Formulario e inserción de datos en la base de datos método 1 (get y post). Tutorial 6

Basándonos en los tutoriales pasados, en la tabla persona y en el gestor de datos, vamos a hacer una simple inserción desde un formulario web a la base de datos, usando un solo archivo php (controlador) y continuando con la técnica de separación por capas que se hablo en el primer tutorial.

En el desarrollo php es supremamente importante, antes de empezar a copiar código php, pensar bien las cosas que se van a hacer (los pasos que hay que realizar). En este caso los pasos son los siguientes:

1) Desarrollar un template el cual tenga un formulario para recolectar el nombre, apellido y documento de una persona.

2) Desarrollar un controlador, desde el cual se llame ese template y en el caso de que ya se haya introducido información se deberá  enviar la información al gestor y luego mostrar otro template donde haya un aviso diciendo que la información fue agregada correctamente.

3) Agregarle las funciones de adicionar personas a la base de datos al gestor.

Los pasos son muy sencillo, y una ves uno tiene bien definido esos pasos podrá seguir con el proceso de codificación.

Codificación 1

Archivo: agregarpersona.tpl – C://wamp/www/trabajo/templates/agregarpersona.tpl


<html>
<title></title>
<body>

<table border="0" cellspacing="10"><tr><td>
<form action="agregarpersona.php?opcion=agregar" name="agregarpersona" method="post">
<b>Documento:</b> <input type="text" name="documento" /><br />
<b>Nombre:</b> <input type="text" name="nombre" /><br />
<b>Apellido:</b> <input type="text" name="apellido" /><br />
<input type="submit" value="Agregar" />
</form>
</td></tr></table>
</body>
</html>

El template lo llamaremos agregarpersona.tpl (es muy importante utilizar nombres acordes a lo que hace cada cosa) todos los formularios deben ser tipo POST ya que por ahí la información viaja mas protegida. Y el resto son simplemente los campos que el usuario deberá llenar. Cuando el usuario da clic en agregar envía los datos que la persona lleno, y llama el controlador, enseguida observaremos que un mismo controlador puede mostrar el template del formulario, encargarse del envió de datos y mostrar mensajes, mucha gente utiliza varios controladores o archivos php, para estas cosas, eso es muy ineficiente y lo único que hace es complicar la lógica de la programación y aumentar las líneas de código.

Codificación 2

Archivo: agregarpersona.php – C://wamp/www/trabajo/agregarpersona.php

<?php

//cargamos las librerías de smarty
require('include.php');
include ('varios/gestor.php');

class agregarpersona {

 public function agregar($Opcion,$Datos)
 {
 global $smarty, $TemplateAuxiliar;

 switch($Opcion)
 {

 case "agregar":
 $gestor = new gestor();
 $gestor->conectar();
 $gestor->agregar('persona',$Datos);
 $gestor->cerrarConexion();
 $smarty->assign('mensaje','Persona agregada correctamente');
 $TemplateAuxiliar = 'mensaje.tpl';
 break;

 default:
 break;
 }
 }

 public function display()
 {
 global $smarty, $TemplateAuxiliar;

 //Muestra por pantalla todos los diferentes templates
 $smarty->display($TemplateAuxiliar);
 }

}

//guarda el tipo de accion que se desea realizar
$Opcion = $_GET['opcion'];
//guarda los datos enviados en una nueva conexion
$Datos = $_POST;

$TemplateAuxiliar ='agregarpersona.tpl'; 

$call = new agregarpersona();
$call->agregar($Opcion,$Datos);
$call->display();

?>

Como podemos ver he llamado la clase igual al nombre del controlador, es simplemente por referencia; lo primero que ejecuta el navegador es la parte donde se llama al include.php y además incluye el gestor para futuras operaciones, luego guarda la opción que se manda por get, y los datos por post; luego crea una variable template auxiliar que luego miraremos para que sirve, y por ultimo crea un objeto agregarpersona y llama la función agregar; en esta función se detecta si se recibió algo por get o no, en caso de que la persona entre por primera ves al archivo agregarperosna.php la variable opción estará vacia por lo cual en la función agregar ira al default donde no hace nada; en caso contrario creara un objeto tipo gestor, lamara la función agregar, y enviara los datos para q sean agregados.

Aquí viene un truco, el template auxiliar se cambia a mensaje.tpl, por defecto al principio estaba en agregarpersona.tpl pero ahora se cambia porque ya sabemos que en este caso se agrego una persona y mostrara simplemente un mensaje que se asigna con smarty diciendo que la persona se agrego satisfactoriamente.

Finalmente se ejecutara la función display y mostrara un template dependiendo del caso.

Adicionalmente adjunto el archivo mensaje.tpl para que vean su sencillez

Archivo: mensaje.tpl – C://wamp/www/trabajo/templates/mensaje.tpl


<html>
<title></title>
<body>

<table border="0" cellspacing="10"><tr><td>
<b>Aviso</b><br />
{$mensaje}
</td></tr></table>
</body>
</html>

Codificación 3

Agregar al Archivo: gestor.php – C://wamp/www/trabajo/varios/gestor.php (para encontrar el archivo completo ver tutorial 5)


function agregar($Opcion,$Datos)
	{
		switch($Opcion)
		{
			case "persona":
			  $nombre= mysql_real_escape_string($Datos['nombre']);
			  $apellido= mysql_real_escape_string($Datos['apellido']);
		      $documento= mysql_real_escape_string($Datos['documento']);

$consulta = "INSERT INTO persona (documento, nombre, apellido) values ('$documento', '$nombre', '$apellido')";
       	      $this->realizarOperacion($consulta);
			  break;

		    default:
			    break;
		}
	}

El código es muy sencillo, simplemente coge los datos que se enviara, a cada uno les saca los caracteres extraños con la función mysql_real_escape_string esto para evitar que nos envíen códigos maliciosos o nos quieran hacer una injection sql de la cual hablaremos después, y finalmente envía la consulta a la base de datos.

Luego de hacer un experimento podremos observar que claramente en phpmyadmin aparece registrado algún dato que metamos por agregarpersona.php