PHP - Programación en 3 capas

este es un ejemplo sencillo de registro de un cliente en Mysql, utilizando la arquitectura en capas con PHP.
bueno para empezar hay que crear la BD y una tabla cliente en Mysql.

Codigo - MySql

create database bd_ejemplo
create table cliente(
cod_cli int auto_increment,
nombre varchar(30),
apellidos varchar(30),
telefono varchar(12),
primary key(cod_cli))

ahora codificamos la primera capa (capa_datos.php)

Codigo - PHP
<?php
//Capa datos
class dal 
{
private $servidor;
private $usuario;
private $password;
private $basedatos;
//constructor
public function dal()
{
$this->servidor="SERVIDOR";
$this->usuario="USUARIO";
$this->password="CONTRASEÑA";
$this->basedatos="bd_ejemplo";
}
public function conectar()
{
$bd=mysqli_connect($this->servidor,$this->usuario,$this->password,$this->basedatos);
if($bd)
  return $bd;
else
  echo "Error al conectarser con la Base de datos";  
}
public function ejecutar($sql)
{
$db=$this->conectar();
return mysqli_query($db,$sql);
}
}
?>

ahora la capa de Negocio para Cliente

<?php
//Capa negocio - Cliente
include_once('capa_datos.php');
class cliente extends dal
{
private $cod_cli;
private $nombre;
private $apellidos;
private $telefono;

public function cliente()
{
parent:: dal();
$this->cod_cli=0;
$this->nombre="";
$this->apellidos="";
$this->telefono="";
}

public function setCodCli($valor)
{$this->cod_cli=$valor;}
public function getCodCli()
{return $this->cod_cli;}

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

public function setApellidos($valor)
{$this->apellidos=$valor;}
public function getApellidos()
{return $this->apellidos;}

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

//FUNCIONES

public function guardar()
{
$sql="insert into cliente(nombre,apellidos,telefono) values
      ('$this->nombre','$this->apellidos','$this->telefono')";
$result=parent::ejecutar($sql);
if($result)
   return true;
else
   return false;  
 
}
public function modificar()
{
$sql="update cliente set cod_cli='$this->cod_cli',nombre='$this->nombre',apellidos='$this->apellidos',telefono='$this->telefono' where cod_cli=$this->cod_cli ";
$result=parent::ejecutar($sql);
if($result)
   return true;
else
   return false;  

}
public function eliminar()
{
$sql="delete from cliente where cod_cli=$this->cod_cli";
$result=parent::ejecutar($sql);
if($result)
   return true;
else
   return false;  

}
public function buscar_nombre($criterio)
{
$sql="select * from cliente where nombre like '%$criterio'";
return(parent::ejecutar($sql));
}

public function buscar_apellidos($criterio)
{
$sql="select * from cliente where apellidos like '%$criterio'";
return(parent::ejecutar($sql));
}
  

}
?>

ahora la capa de presentación
diseñar un formulario parecido a este

                     

en el cual  los nombres de los campos de texto son los siguientes

  • txtcodcli
  • txtnombre
  • txtapellidos
  • txttelefono
el nombre de todos los botones son btn, para que así podamos llamarlos mediante un switch
el nombre de los botones de opción son grupo que lo utilizaremos de igual forma con un switch


Codigo la capa presentacion - Cliente
<?php
include_once('capa_negocio.php');
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>Registro cliente</title>
</head>

<body>
<h3>Registro de clientes </h3>
&ltform id="form1" name="form1" method="post" action="clientes.php">
//AQUI VA TODO EL CODIGO DEL DISEÑO DE SU FORMULARIO
//NO LO PUSE PARA HACERLO MAS CORTO EL CODIGO
</form>

<?php
function guardar()
{
$c=new cliente();
$c->setNombre($_POST['txtnombre']);
$c->setApellidos($_POST['txtapellidos']);
$c->setTelefono($_POST['txttelefono']);
if($c->guardar())
  echo "Registro Guardado";
else
  echo "Error,no se puedeguardar";  
}

function modificar()
{
$c=new cliente();
$c->setCodCli($_POST['txtcodcli']);
$c->setNombre($_POST['txtnombre']);
$c->setApellidos($_POST['txtapellidos']);
$c->setTelefono($_POST['txttelefono']);
if($c->modificar())
  echo "Registro Modificado";
else
  echo "Error,no se puede modificar";  
}

function eliminar()
{
$c=new cliente();
$c->setCodCli($_POST['txtcodcli']);
if($c->eliminar())
  echo "Registro eliminado";
else
  echo "Error,no se puedeeliminar";  
}

function mostrarclientes($registro)
{
echo"<table border = '2'";
echo"<tr><td>CODIGO</td>";
echo"<td>NOMBRES</td>";
echo"<td>PELLIDOS</td>";
echo"<td>TELEFONK</td>";
echo"</tr>";
while($fila=mysqli_fetch_object($registro))
{
echo"<tr>";
echo"<td> $fila->codigo </td>";
echo"<td> $fila->nombre </td>";
echo"<td> $fila->apellidos </td>";
echo"<td> $fila->telefono </td>";
echo"</tr>";
}
echo"</table>";
}

function buscar()
{
$c= new cliente();
switch($_POST[grupo])
{
case 1:{ $registro=$c->buscar_nombre($_POST['txtbuscar']);
         mostrarclientes($registro);
       } break;
case 2:{ $registro=$c->buscar_apellidos($_POST['txtbuscar']);
         mostrar_registros($registro);
       } break;

}
}
//BOTONES
switch($_POST[btn])
{
case "Guardar":{guardar();
} break;
case "Modificar":{modificar();
} break;
case "Eliminar":{eliminar();
} break;
case "Buscar":{
buscar();
} break;

}
?>

16 comentarios:

Anónimo dijo...

Muy buen aporte. Gracias!!

Anónimo dijo...

buen tutorial, me sirvio bastante gracias!!

Anónimo dijo...

gracias por la información me resulto de utilidad

Anónimo dijo...

al hacer un clic en los botones no hace ninguna accion me podrias decir ¿por que ?.
el nombre de mi formulario se llama clientes.php

Dany dijo...

si mandas tu código, podemos revisar cual es tu error, suerte y gracias por visitar el blog

Anónimo dijo...

Muchas gracias, el código me sirvió de mucho. Aún asi, tuve un inconveniente al momento de ejecutar las búsquedas. Me sale el siguiente error:

"mysql_fetch_object(): supplied argument is not a valid MySQL result resource..."

El código que he utilizado es exactamente igual al que muestras, a excepción de que he utilizado el mysql_connect, mysql_query y mysql_fetch_object. La verdad no se que puede andar mal, porque todo lo demás está perfecto. Agradecería que me ayudes a encontrar la falla. Gracias

Anónimo dijo...

Ya solucioné el inconveniente que tenía, al parecer sólo fue un error de sintaxis. Gracias x el tuto, realmente es excelente =D

Anónimo dijo...

buen aporte eh !!!!

Anónimo dijo...

e copiado el codigo y me sale: Use of undefined constant btn

Anónimo dijo...

Antes de nada agradecer al autor este buen ejemplo.

Tengo un problema , cuando ejecuto

con php5 me da un error al ejecutar
Fatal error : Class 'cliente' not found in c:\xampp\htdocs\formularios\cliente.php on line 58

esa linea instancia la clase cliente ( $c = new cliente ();)
Me podéis ayudar?

Anónimo dijo...

El tutorial muy bueno, no esquivaste nada en lo que respecta a código. Has definido muy bien las capas.
Un ejemplo sencillo, pulido y que cierra. Parece mentira que algo tan simple como la pantalla que hiciste te sirve un montón para hacer pantallas más complejas.

Muchas gracias por compartir. Ojalá hubiera más personas como vos Daniel.

Desde ya muchas gracias. Marcelo de provincia de Córdoba, Argentina.

Daniel Monroy dijo...

Muchas gracias por tus palabras Marcelo, mas bien agradecerte a ti por visitar el blog, que últimamente no lo actualize pero comentarios como el tuyo dan ganas de seguir publicando código que pueda servir a mucha mas gente.
Muchas gracias a ti y un gran saludo a Córdoba - Argentina

Daniel Monroy dijo...

Muchas gracias a todos por los comentarios y disculparme, por no haberles respondido a tiempo, saludos a todos

Anónimo dijo...

gracias por las dudas despejadas

Anónimo dijo...

hola podrias subir el codigo completo en tu blog? en un servidor para descargarlo.. es q me da ciertos errores q aun no entiendo bien.. me sale el siguient error Notice: Undefined index: btn in C:\wamp\www

Anónimo dijo...


Notice: Use of undefined constant btn - assumed 'btn' in C:\xampp\htdocs\capas\capa_presentacion.php on line 88

Notice: Undefined index: btn in C:\xampp\htdocs\capas\capa_presentacion.php on line 88

Publicar un comentario en la entrada