sábado, 5 de enero de 2008

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

No hay comentarios: