miércoles, 30 de enero de 2008

Publicidad Cursos Pucallpa Factory Software

Tenemos listo nuestro anuncio para los cursos que queremos compartir contigo, No dudes en consultarnos o comentar algo es nuestro blog.












Dudas y Consultas:

kozuke44@hotmail.com
starcreen23@hotmail.com
hpfloresj@gmail.com

Dirección Jr. Alfonso Ugarte Nº 347





Gracias a todos los interesados!!!

MasterlineGroup!!!!

martes, 22 de enero de 2008

Segunda Convocatoria a Diseño de Paginas Web Dinámicas con PHP y MySQL

Hola Amigos!!!

Gracias a la acogida que tuvo nuestra primera convocatoria, hemos decicido compartir con ustedes nuestro conocimientos, de esta manera, les invitamos a formar parte de nuestra segunda convocatoria del curso:


-> Diseño de Páginas Web Dinámicas con PHP y MySQL


Como a nuestros anteriores participantes te ofrecemos lo siguiente:

Corel Draw X3 - Herramientas básicas para crear objetos para web.
Photoshop CS2 - Herramientas básicas, efectos y creación y optimización de imágenes para web.
SwishMax - Creación de Animaciónes SWF

Dreamweaver 8 - Creación de una pagina web, elementos de una paginas web, css y javascripts.

PHP y MySQL - Implementación de un mantenimiento de sistema de noticias.


"También tenemos nuevos cursos"

-> Java 2 Básico

(
Temario Proximamente)

-> C#

(Temario Proximamente)

Ventajas:
  1. Una PC por Alumno.
  2. Proyector.
  3. Videos Tutoriales realizados por los ponentes.
  4. Recursos para webmasters
  5. Certificado de participación.
Agradecemos tu interes y esperamos contar con tu particiación. La fecha exacta esta por definirse pero sera en el mes de Febrero. Asi que ponte creativo que nosotros te daremos todos los conocimientos que necesitas.

Atte. Masterlinegroup & System Factory Software.

viernes, 18 de enero de 2008

Busca un modelo, usa las herramientas de corel y obten algo como esto.

Hola amigos, nuevamente para traerles alguna novedad. Como ya sabemos, Corel Draw X3es un programa para hacer gráficos vectoriales, bueno, entonces creemos un gráfico vectorial.

Tomemos un Diseño, es este caso, un automovil que es mi favorito: el Datsun 260Z.



Siento decirles que no explicare los pasos detalladamente, sino a grandes rasgos. Lo primero que tenemos que hacer, es importar la imagen de muestra a corel, luego, silueteamos al auto con la herramienta pluma, le damos forma al chasis y luego procedemos a agregar los detalles del auto.



Quiero que noten que la gran medida de los detalles, son cuadrados, circulares, rectangulares, etc. Lo que tenemos que tener en cuenta, es como captar los colores, efectos de nuestro imagen guía, para asi poder obtener un resultado bonito, las herramientas nos la pone corel, nosotros debemos solamente darle uso.



El mio me quedo algo bonito, poniendo degradados por aqui, y transparencias por alla. Pueden hacer el intento con otras imagenes, recuerden que corel es un programa para hacer gráficos vectoriales, pero cuanto mas tiempo nos tomemos en los detalles, los resultados serán mas sorprendentes.



Bueno amigos, he compartido algo con ustedes una vez mas, espero les haya gustado, recuerden que todo es experimentación en este mundo. Siempre tengan en cuenta las preguntas "¿Qué pasaría? ¿Qué resultado tendra si.....? :D son la clave y artifices a mi parecer de cuanto el hombre a avanzado a traves de los años.

Herramientas Usadas.
- Herramienta Pluma
- Herramienta Forma
- Herramienta Elipse
- Herramienta Rectángulo
- Herramienta Degradado
- Herramienta Transperencia Interactiva
- Herramienta Degradado
- Herramienta Sombra Interactiva
- Herramienta Envoltura Interactiva
- Herramienta Borrador

Mirkosoft!!!

martes, 15 de enero de 2008

La web y el Merchandising!! - Convirtiendo ideas en dinero

Hi amigos, nuevamente para compartir con ustedes algunos temas interesantes el dia de hoy.

Muchos de nosotros hemos oido la palabra Merchandising verdad?. Bueno, veremos como esto lo han aplicado algunas personas o empresas y que gracias a ello, generan ingresos para mantenerse o simplemente "ganarse la vida" :D.

Wikipedia nos dice que El Merchandising (literalmente del inglés "mercancía"), o Micromercadotécnia es la parte del marketing que tiene por objeto aumentar la rentabilidad en el punto de venta. Son actividades que estimulan la compra en el punto de venta. Objetivos del merchandising: llamar la atención, llevar al cliente al producto, facilitar la acción de compra. Es el conjunto de estudios y técnicas comerciales que permiten presentar el producto o servicio en las mejores condiciones al consumidor final. En contraposición a la presentación pasiva, se realiza una presentación activa del producto o servicio utilizando una amplia variedad de mecanismos que lo hacen más atractivo: colocación, presentación, etc.

Bueno, como ya sabemos que es el Merchandising, veamos un claro ejemplo. Tomaremos como punto referente a una web que visite hace años y que siempre visito con frecuencia por el contenido que tiene. Me refiero a la pagina del superheroe Calico Electrónico.



Si visitamos esta web, nos toparemos con las aventuras de este singular personaje. La serie esta hecha integramente en Macromedia Flash y tiene como principal objetivo, el arrancarte carcajadas con sus disparatadas aventuras.



Como vemos, tambien tiene una sección llamada tienda, si, exactamente, eso es, bingo!!!!, llegamos a nuestro termino "merchandising" o mercaderia asociada. Cálico es muy popular en españa y lo que hacen es sacarle el jugo a su idea. Los creadores de cálico electrónico son Niko y Raúl Escolano, que viendo el exito que tenia su personaje, decidieron ir mas alla de hacer la serie y centrarse en comenzar a vender, como diriamos, a cálico por todas partes.

Recuerdo haber visto los primeros productos de cálico, empezando por camisetas y tasas y ahora tienen varios productos, 11 para ser exacto.

Vemos como una idea se puede convertir en algo rentable, eso si, siempre y cuando tenga una buena planeación y como dije "una buena idea que venda".

Bueno, el merchandising es muy usado para promocionar el lanzamiento de un producto o de un evento cultural (película, simposio, feria, etc.) los fabricantes o productores ponen a la venta pequeños objetos relacionados con el mismo: muñecos, camisetas, llaveros, juguetes.


Ropa friki es tambien un buen ejemplo. Explota los elementos conocidos en el ciberespacio y en todo lo que a informatica, gamers y otras cosas se refieren, poniendoles un toque creativo y vendiendo dichos productos. Visitalos en www.ropafriki.com

En fin, ya sabemos como funciona el Merchandising, lo unico que necesitamos es una idea (una ideota!!!!!) jejeje, un buen argumento en caso de una serie, o manejar muy bien un producto, ponerlo en la web, publicitarlo y mantener a nuestro publico pendiente de mas de nosotros con cosas novedosas.

Bueno amigos, espero haberlos entretenido una vez mas, no se olviden de visitar nuestro blog periodicamente y de indagar o compartir algun comentario acerca de los temas que tratamos en el blog, ya saben que es bienvenida toda participación. Hasta otra oportunidad!!!

Mirkosoft

Arte Digital!!!! - 3D

Hola amigos, ya habiendo acabado el curso, estamos en la obligación de no parar nuestras ganas de compartir algo con ustedes. Bueno, en este caso voy a tocar el tema de el Diseño 3D. Como ya hemos visto, el cine, la televisión y el mundo web, usa mas este recurso y Perú no esta ajeno a competir con diseñadores de otras partes del Mundo.

Un gran ejemplo de visión empresarial son los de Alpamayo Entertainment, un grupo de profesionales que decidió formar una empresa y lanzar al público su primera obra maestra "Piratas en el callao" estrenada en el 2005 y que conto con gran aceptación entre el público peruano. Como todo empresario, siempre tiende a ver la oportunidad de negocio, ya habiendo lanzado su segunda película "Dragones, Destino de Fuego" (2006), ponen en marcha el proyecto de fundar su propio Instituto de Animación 3D, que a decir verdad, me interesa mucho y espero algun dia ir a capacitarme en ese tema.



"Fx & Animation School es una escuela que capacitará y entrenará personal en animación y efectos especiales e impartirá conocimiento en 2D y 3D a personas de distintas áreas profesionales con el fin de que lo apliquen en su desempeño laboral"

Bueno, Fxanima no esta sola en el mercado, tambien tiene a la "Escuela de Arte Digital" que tambien imparte formación profesional en este ámbito, pero que ofrece muchas mas especializaciones como Diseño de videojuegos, programación de videojuegos, modelado 3D, Arquitectura, etc.

Como ven, en nuestro país, se aplican las nuevas tecnologias y talento hay de sobra, solo falta sacar a flote todo nuestro potencial, ya sea en programación, diseño o en lo que mejor nos desenvolvamos, la idea de estos empresarios es que ellos aman y se apasionan por su trabajo, se levantan con ganas de empezar un nuevo dia haciendo (y esta frase me encanta :D) lo que mas les gusta e inclusive (y esta es otra de mis favoritas :D) les pagan por ello.

Asi que chicos, en nosotros esta el ir mas alla, estar a la vanguardia de todos los avences tanto de software como de hardware, y de estar siempre investigando, ya que eso fue lo que nos trajo toda esta nueva era.

Pueden visitar las de cada institución en nuestra seccion Link`s y antes de irme, quiero dejarles una muestra de un gran trabajo de animacion 3D, particularmente es uno de mis personajes favoritos, jejeje. Hasta la proxima amigos!!!!!

Mirkosoft!!!

sábado, 5 de enero de 2008

Unas palabras de felicitaciones

Hola señores que participaron en este mini curso de animacion y diseño de aplicaciones web con PHP, nuestras sinceras felicitaciones a los participantes, por que han demostrado interes y muchas ganas de aprender, siempre hay que estar hambrientos, hambrientos de sabiduria, con una dosis de cretividad e investigación, les deseamos éxitos a todos ustedes , Atte. Masterline Group ;)




















Nota: para los que desean tener más información de PHP y MySQL tengo bajado dos CDs de videos tutoriales relacionados con el curso, desde VideoTutoriales, siempre agradeciendo el incomiable aporte del excelentísmimo Jesus Conde.
No se olviden de ir este sábado 12-01-2008 15:00 al local de SystemFactory, para coordinar los certificados, pero vajan repasando un poco especialmente esta ultima seccion de php y mysql. examen?? :$ jejeje.

Session4 implementacion el metodo actualizar y eliminar

Antes de comenzar, hay que indicar que existe un pequeño error en el metodo actualizar() de Contacto, en concreto en el SQL, este es:

fechaNac = '".$this->getFechaNac()."',


El problema es la coma, tenemos que eliminar este caracter:

fechaNac = '".$this->getFechaNac()."'

Bien ahora implementaremos las acciones actualizar y eliminar de la clase en el ContactoController y la pagina registro.php
1  
          case "delete":{
2                 $idContacto = $_REQUEST[ "idContacto" ];
3                 $objCont = new Contacto( "", "", "", "" );
4                 if( $objCont->eliminar( $idContacto ) ){
5                      echo "<h1>Exito</h1>";
6                      echo "Contacto eliminado correctamente<br>";
7                      echo "<a href='../paginas/mantenimiento.php'>Regresar</a>";
8                 }else{
9                      echo "<h1>Exito</h1>";
10                      echo "Contacto no se puedo eliminar<br>";
11                      echo "<a href='../paginas/mantenimiento.php'>Regresar</a>";
12                 }
13                 break;
14            }
15            case "edit":{
16                 $idContacto = $_REQUEST[ "idContacto" ];
17                 $objCont = new Contacto( "", "", "", "" );
18                 if( $objCont->buscarPorClavePK( $idContacto )){
19                      $nombre = $objCont->getNombre();
20                      $telefono = $objCont->getTelefono();
21                      $fecha = $objCont->getFechaNac();
22   header("Location: ../paginas/registrar.php?idContacto=".$idContacto."&nombre=".
23                                          $nombre."&telefono=".
24                                          $telefono."&fecha=".
25                                          $fecha."&boton=Modificar&accion=actualizar");
26                 }
27                 break;
28            }
29            case "actualizar":{
30                 $idContacto = $_REQUEST[ "idContacto" ];
31                 $nombre = $_REQUEST["nombre"];
32                 $telefono = $_REQUEST["telefono"];
33                 $fecha = $_REQUEST["fecha"];
34                 $objCont = new Contacto( $idContacto, $nombre, $telefono, $fecha );
35  
36                 if( $objCont->actualizar() ){
37                                echo "<h1>Exito</h1>";
38                                echo "Contacto actualizado correctamente<br>";
39                                echo "<a href='../paginas/mantenimiento.php'>Regresar</a>";
40                 }else{
41                                echo "<h1>Error</h1>";
42                                echo "Contacto no se ha podido actualizar<br>";
43                                echo "<a href='../paginas/mantenimiento.php'>Regresar</a>";
44                 }
45                 break;
46            }


A continuacion modificamos la pagina registar.php
























Lo que hemos hecho es agregar varaiables que me recojan los datos que recibo de ConactoController.php al inicio del archivo registrar.php

Al final debe de quedar asi:









Cuando hago click en el link Actualizar me debe cargar todos los datos correspondientes a ese registro por medio de idContacto:




















Luego una vez recogios los datos los imprimo en pantalla, mediante echo...
para ver el ejercicio completo de agenda descargar

Session2 para descargar

Aqui esta la segunda presentacion del curso:

Session3 - PHP y MySQL parte II

Autor: hugo flores
hpfloresj@gmail.com
Para esta session crearemos un mantenimiento básico de una clase conocidos como CRUD(Create,Retrieve,Update,Delete). para este ejercicio crearemos una base de datos en MySQL, esta base de datos se llamara agenda, a continuacion el script SQL:

CREATE TABLE `contacto` (
`idContacto` tinyint(3) unsigned NOT NULL auto_increment,
`nombre` varchar(100) collate latin1_general_ci NOT NULL,
`telefono` varchar(15) collate latin1_general_ci NOT NULL,
`fechaNac` date NOT NULL,
PRIMARY KEY (`idContacto`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;

--
-- Volcar la base de datos para la tabla `contacto`
--

INSERT INTO `contacto` VALUES (1, 'carlos flores', '572991', '1987-01-22');
INSERT INTO `contacto` VALUES (2, 'paula navarro', '579874', '1987-04-28');


Representacion UML de la clase Contacto












Antes de ejecutar este script creamos la base de datos en PhpMyAdmin:














para ejecutar el sql lo hacemos mediante la pestaña SQL.
  • Luego creamos la estructura de nustra aplicacion dentro de htdocs de XAMPPP:








Esta estructura sigue el patron modelo vista controlador, pero en nuestro ejercicio no lo implentaremos al 100% por la necesidad de un framework, uno de ellos es el zend framework
  • Ahora creamos nuestras paginas php:
    • mantenimiento.php






















  • registrar.php







































  • Implementamos nuestras clases php:
Clase Contacto.php



<?php
// importar la clase DBManager
require_once( "../../librerias/DBManager.class.php");
class Contacto {
private $idContacto;
private $nombre;
private $telefono;
private $fechaNac;


public function __construct( $idContacto,
$nombre,
$telefono,
$fechaNac ) {
$this->setIdContacto( $idContacto );
$this->setNombre( $nombre );
$this->setTelefono( $telefono );
$this->setFechaNac( $fechaNac );
}


public function crear(){
$resp = false;
$db = new DBManager( "root", "" );
$sql = "INSERT INTO contacto VALUES ( NULL,'".$this->getNombre()."',
'".$this->getTelefono()."',
'".$this->getFechaNac()."');";
if($db->executeUpdate( $sql ) )
{
$resp=true;
}
return $resp;

}

public function buscarPorClavePK( $idContacto ){
$resp=false;
$num_rows=0;//numero de filas afectada por la consulta
$db= new DBManager('root','');
$rs=$db->executeQuery( "SELECT * FROM contacto WHERE" .
" idContacto=".$idContacto.";" );
// numero de filas afectadas por la consulta
$num_rows=$rs->getNumOfRows();
if($num_rows>0)
{ $resp=true;
// moverse al primer registro
$rs->firstRow(); // opcional, pero recomendado
while ( !$rs->EOF ) {
/* Coleccion de campos accesible mediante arrays
* asociativos también
*/
$this->setIdContacto( $rs->fields[ "idContacto" ] );
$this->setNombre( $rs->fields[ "nombre" ] );
$this->setTelefono( $rs->fields[ "telefono" ] );
$this->setFechaNac( $rs->fields[ "fechaNac" ] );
$rs->nextRow(); // Nota: nextRow() Esta situado al final
}
}
$rs->close();
$db->closeConnection();//opcional cierra el enlace de la Base de Datos
return $resp;
}

public function actualizar(){
$resp=false;
$db= new DBManager('root','');
if($db->executeUpdate( "UPDATE contacto SET
nombre = '".$this->getNombre()."',
telefono = '".$this->getTelefono()."',
fechaNac = '".$this->getFechaNac()."'
WHERE(
idContacto = ".$this->getIdContacto()."
);" ) );
{
$resp=true;
}
return $resp;
}

public function listar(){
$vector=null;
$db= new DBManager('root','');
$rs=$db->executeQuery( "SELECT * FROM contacto ORDER BY idContacto" );
$num_rows=$rs->getNumOfRows();
if($num_rows>0)
{ $row = 0;
$rs->firstRow(); // opcional, pero recomendado
while ( !$rs->EOF )
{
$vector[ $row ] = new Contacto( $rs->fields["idContacto"],
$rs->fields["nombre"],
$rs->fields["telefono"],
$rs->fields["fechaNac"] );

$row++;
$rs->nextRow();
}
return $vector;
}else return null;
$rs->close();
$db->closeConnection();//opcional cierra el enlace de la Base de Datos
}

public function eliminar( $idContacto ){
$resp=false;
$db= new DBManager('root','');
if($db->executeUpdate( "DELETE FROM contacto
WHERE( idContacto=".$idContacto.");" ) )
{
$resp=true;
}
return $resp;
}



public function getIdContacto(){
return $this->idContacto;
}

public function setIdContacto( $idContacto ){
$this->idContacto = $idContacto;
}

public function getNombre(){
return $this->nombre;
}

public function setNombre( $nombre ){
$this->nombre = $nombre;
}

public function getTelefono(){
return $this->telefono;
}

public function setTelefono( $telefono ){
$this->telefono = $telefono;
}

public function getFechaNac(){
return $this->fechaNac;
}

public function setFechaNac( $fechaNac ){
$this->fechaNac = $fechaNac;
}

}
?>


  • Integramos nuestras clase Contacto con las paginas PHP:
modificando el Formulario mantenimiento.php























Implementando el controlador de la clase Contacto
1
<?php
2
require_once( "../clases/Contacto.class.php" );
3
$accion = $_REQUEST[ "accion" ];
4 switch(
$accion ){
5 case
"nuevo":{
6
$nombre = $_POST["nombre"];
7
$telefono = $_POST["telefono"];
8
$fecha = $_POST["fecha"];
9
$objCont = new Contacto( null, $nombre, $telefono, $fecha );
10
11 if(
$objCont->crear() ){
12 echo
"<h1>Exito</h1>";
13 echo
"Contacto creado correctamente<br>";
14 echo
"<a href='../paginas/mantenimiento.php>Regresar</a>";
15 }else{
16 echo
"<h1>Error</h1>";
17 echo
"Contacto no se ha podido registrar<br>";
18 echo
"<a href='../paginas/mantenimiento.php>Regresar</a>";
19 }
20 break;
21 }
22 case
"registrar":{
23
$idContacto = "Autogenerado";
24
header("Location: ../paginas/registrar.php?idContacto=".$idContacto."&boton=Nuevo&accion=nuevo");
25 break;
26 }
27 }
28
?>
29



Modificando el formulario registro

viernes, 4 de enero de 2008

Session1 para descargar

Hola a todos aqui les dejo el link de las dos primeras clases que hicimos:

sesion2 proximamente

Session3 - PHP y MySQL parte I

Autor: hugo flores
hpfloresj@gmail.com

Hola que tal amigos de este curso, bueno escribo para darles algunas pautas sobre lo que aharemos mañana 05-01-2008, vamos a crear un mantenimiento (Leer, Actualizar, Borrar, Insertar) registros en una tabla, pero con clases en php.

Primero quisiera explicar algo, php trabaja con base de datos, pero no tiene un estandar para conectarme con distintas bases de datos, por ejemplo si trabajo con mysql la funcion para conectarme es mysql_connect, pero si trabajo con sql server me conecto mediante mssql_connect(), como veen existe un cambio en el nombre de los comandos, y esto sucede con todas las demas bases de datos, no hay un estandar que encapsule todo esto, por lo demas todo es sencillo.

Para los que quieren estudiar algo mas elaborado he creado un modulo de una aplicación llamada catalogo wbmusic que es un portal web de músicas, aqui les dejo para que lo estudien:
ejemplo

Requerimiento para esta clase:
  • Implementar una clase DBManager para MySQL: clase que me sirve para conectarme con la base de datos.
  • Implementar una clase RecordSet: clase que me permitirá recorrer una arreglo, que contiene los registros obtenidos de una consulta SQL en la base de datos.


1
<?
2
/********************************************/
3 /* Clase DBManager */
4 /*Clase que administra las conexiones con */
5 /*la base de datos. */
6 /*Autor: Hugo Flores Joseph 2006 */
7 /*Copyright (c) */
8 /********************************************/
9
require_once('Recordset.class.php');
10
11 class
DBManager{
12
13 private
$host='localhost';
14 private
$db ='wbmusic';
15 private
$user='';
16 private
$pass='';
17 private
$connectionID;// Retorna un enlace identificador de la conexion hecha con la base de datos
18
private $queryID = -1;// Esta variable guarda elúltimo resultado creado por link identifier de una consultra (almacena un entero<true=1,false=0>)
19
private $tempResultObj = '';// Almacena el resultado del Objeto Recientemente creado via el método execute()
20
private $error="";
21
22
23
//----------------Métodos Públicos--------------------//
24
25
public function DBManager($user='',$pass='')
26 {
27 if(!empty(
$user))$this->user=$user;
28 if(!empty(
$pass))$this->pass=$pass;
29
30 try{
31
$this->connectionID=@mysqli_connect($this->host,$this->user,$this->pass,$this->db);
32 if(!
$this->connectionID) throw new Exception(mysqli_connect_error());
33 }
34 catch(
Exception $e)
35 {
36 echo
"A ocurrido un error: ".$e->getMessage();
37 exit();
//termina la ejecucion del script
38
}
39 }
40
41
//funcion ADHOC utilizada con SELECT
42
public function executeQuery($sql = "")
43 {
44
$this->queryID = mysqli_query($this->connectionID,$sql);
45
$this->tempResultObj = new Recordset($this->queryID);//Inicializa un objeto sin considerar si la consulta retorna algun resultado o no.
46
return $this->tempResultObj;
47 }
48
//funcion ADHOC utilizada con INSERT, UPDATE, DELETE
49
public function executeUpdate($sql = "")//devuelve falso si la consulta tuvo exito
50
{
51
$resp=false;
52
$this->queryID = @mysqli_query($this->connectionID,$sql); //Inicializa un objeto sin considerar si la consulta retorna algun resultado o no.
53
if($this->queryID) $resp=true;
54 return
$resp;
55 }
56 public function
getConnection() { return $this->connectionID;}
57 public function
closeConnection(){ mysqli_close($this->connectionID);}
58 }
59
?>

Descripcion
  • Variables: las variables de esta clase se utilizan para almacenar los atributos del metodo mysqli_connect() que recibe como parametro el nombre del servidor mysql, el nombre de usuario de mysql, la clave correspondiente a ese usuario y por ultimo la base de datos.
  • Algunos otras variables que destacar:
  • $tempResultObj: variable que almacena un objeto de tipo Recordset que es el que contiene los registros de la consulta.
  • $connectionID: es un indentificador que me dice si he tenido exito al conectarme con la base de datos. su valor puede ser true/false
  • Con respecto a los métodos tenemos dos executeQuery y executeUpdate para ejecutar comandos SELECT y DELETE, UPDATE, INSERT respectivamente
y finalmente tenemos otra clase que utilizaresmos para las conexiones con mysql:


1
<?
2
/********************************************/
3 /* Clase Recordset */
4 /* clase que me permite manejar un conjunto */
5 /* de registros de una base de datos */
6 /* MySQL. */
7 /* Autor: Hugo Flores Joseph 2006 */
8 /* Copyright (c) */
9 /********************************************/
10
11
class Recordset{
12
//------Variables Públicas---------//
13
public $fields;
14 public
$BOF = null;// indica que la posición actual del registro esta antes del primer registrp en un Objeto Recordset.
15
public $EOF = null;// indica que la posición actual del registro esta después del último registro en un Objeto Recordset.
16
17 //------Variables Privadas---------//
18
private $_numOfRows = -1; // No Cambie este valor! SOLO LECTURA!
19
private $_numOfFields = -1; // No Cambie este valor! SOLO LECTURA!
20
private $_tempResult = '';// Almacena un valor que fue retornado desde una función específica de la Base de Datos
21
private $_queryID = -1;// Esta variable guarda el resultado de un link identifier
22
private $_currentRow = -1;// Esta variable guarda la actual fila en un Recordset.
23
24 //------Métodos--------------------//
25 // Devuelve: query id exitoso o falso si
26 // la función Constructor ha fallado
27
public function Recordset($queryID)
28 {
29
$this->_queryID = $queryID;
30 if (
$queryID) {
31
$this->_numOfRows = @mysqli_num_rows($this->_queryID);
32
$this->_numOfFields = @mysqli_num_fields($this->_queryID);//devuelve el número de campos de la consulta o result set
33
}
34 else {
35
$this->_numOfRows = 0;
36
$this->_numOfFields = 0;
37 }
38
// Si el resultado contiene filas
39
if ($this->_numOfRows > 0 && $this->_currentRow == -1) {
40
$this->_currentRow = 0;
41
$this->fields = mysqli_fetch_array($this->_queryID);//captura la fila en un array mssql_fetch_aaray(Devuelve: Un array que corresponde a la fila capturada, o FALSE si no hay más filas)
42
$this->EOF = false;
43
$this->BOF = false;
44 }
45 return
$this->_queryID;
46 }
//fin de método Recordset
47
48 // Devuelve: True si hay todavía filas disponibles, o False
49 // si no hay mas filas. Mueve a la proxima fila en un
50 // Objeto Recordset Especifico y hace que el registro de la fila actual
51 // y la correspondiente informaciónde la fila se recupere
52 // en la colección de los campos. Note: Al contrario del método moveRow(),
53 // cuando _currentRow esta getNumOfRows() - 1, EOF podria inmediatamente ser
54 // True. Si el número de fila no es proporcionado, la funcion podria posicionarse
55 //automáticamente en la primera fila.
56
public function nextRow()
57 {
58 if (
$this->getNumOfRows() > 0)
59 {
60
$this->fields = array();
61
$this->_currentRow++;
62
$this->fields = @mysqli_fetch_array($this->_queryID);
63
// Esto esta no trabajando. True todo el tiempo
64
if ($this->fields)
65 {
66
$this->_checkAndChangeEOF($this->_currentRow - 1);
67 return
true;
68 }
69 }
70
$this->EOF = true;
71 return
false;
72 }
//fin de método nextRow()
73
74 // Devuelve: true si es exitoso, false si ha fallado moveRow()
75 // moueve el puntero interno de una fila de el Objeto Recordset
76 // hacia un puntero de una fila especifico y la correspondiente
77 // información de la fila que podria recuperarse de la colección de
78 // campos. Si el número de fila no es proporcionado, la funcion podria posicionarse
79 // automáticamente en la primera fila.
80
public function moveRow($rowNumber = 0)
81 {
82 if (
$rowNumber == 0) {
83 return
$this->firstRow();
84 }
85 else if (
$rowNumber == ($this->getNumOfRows() - 1)) {
86 return
$this->lastRow();
87 }
88 if (
$this->getNumOfRows() > 0 && $rowNumber < $this->getNumOfRows()) {
89
$this->fields = null;
90
$this->_currentRow = $rowNumber;
91 if(@
mysqli_data_seek($this->_queryID, $this->_currentRow)) {//mueve el puntero interno de las filas Devuelve: TRUE si se ejecuta con éxito, FALSE si falla
92
$this->fields = @mysqli_fetch_array($this->_queryID);
93
/* This is not working. True all the time */
94
if ($this->fields) {
95
// No necesita llamar a _checkAndChangeEOF() por que
96 // la posibilidad de mover hacia la última fila ha
97 // sido manejada por el código de arriba
98
$this->EOF = false;
99 return
true;
100 }
101 }
102 }
103
$this->EOF = true;
104 return
false;
105 }
//fin de moveRow()
106
107 // Devuelve: true en caso de exito, false en caso de fallo de lastRow() moueve
108 // el puntero interno de la fila de un Objeto Recordset hacia la última fila
109 // y recupera la correspondiente información de la fila
110 // de la collecion de campos.
111
public function lastRow()
112 {
113 if (
$this->getNumOfRows() > 0) {
114
$this->fields = array();
115
$num_of_rows = $this->getNumOfRows();
116
$this->_tempResult = @mysqli_data_seek($this->_queryID, --$num_of_rows);//Devuelve: TRUE si se ejecuta con éxito, FALSE si falla y es --$num_of_rows por que en sql
117
if ($this->_tempResult) { //existe un ultimo registro en blanco entonces tengo que posicionarme en el
118 /* $num_of_rows decrementado anterioemente */ //penultimo registro.
119
$this->_currentRow = $num_of_rows;
120
$this->fields = @mysqli_fetch_array($this->_queryID);
121
/* Esto no esta trabajando. Verdadero todo el tiempo */
122
if ($this->fields) {
123
/* Caso Especial para hacer EOF=fallse. */
124
$this->EOF = false;
125 return
true;
126 }
127 }
128 }
129
$this->EOF = true;
130 return
false;
131 }
//fin de método lastRow()
132
133 // Devuelve: true en caso de éxito, false en caso de fallo, firstRow() mueve
134 // el puntero interno de la fila de un Objeto Recordset hacia la primera fila
135 // y recupera la correspondiente información de la fila
136 // de la collecion de campos.
137
138
public function firstRow()
139 {
140 if (
$this->getNumOfRows() > 0) {
141
$this->fields = array();
142
$this->_currentRow = 0;
143 if (@
mysqli_data_seek($this->_queryID, $this->_currentRow)) {
144
$this->fields = @mysqli_fetch_array($this->_queryID);
145
$this->EOF = false;
146
/* Esto no esta trabajando. Verdadero todo el tiempo */
147
if ($this->fields) {
148 return
true;
149 }
150 }
151 }
152
$this->EOF = true;
153 return
false;
154 }
155
156
157
// Retorna: El número de filas de un resultado.
158
public function getNumOfRows(){return $this->_numOfRows;}
159
160
/* Chequea y Cambia el Estado de EOF. */
161
public function _checkAndChangeEOF($currentRow)
162 {
163 if (
$currentRow >= ($this->_numOfRows - 1))
164 {
165
$this->EOF = true;
166 }else{
167
$this->EOF = false;
168 }
169 }
170
171
// close() solo necesita ser llamado si esta usando mucha memoria
172 // al correr su script. libera la memoria.
173
174
public function close()
175 {
176
$this->_tempResult = @mysqli_free_result($this->_queryID);
177 return
$this->_tempResult;
178 }
179 }
//fin de la clase
180
?>



Bien esta clase ya esta casi todo comentada y explicada, solo hay que aplicar los métodos, el que usaremos generalmente es el metodo nextRow() para avanzar un registro.