lunes, 26 de marzo de 2012

Onceava Clase

Captura de Datos en PHP con Formularios

En esta clase aprenderemos como crear un formulario en HTML para capturar datos en la red y luego guardarlos en la tabla datos que creamos en la novena clase.

Lo primero que haremos será iniciar un nuevo documento en este caso de tipo PHP.  Es importae aclarar que este formulario puede hacer en un mismo archivo o bien en dos, para esta clase utilizaremos un solo archivo y en una proxima clase veremos como hacerlo de otra forma.

A continuación el código completo y como en clases anteriores el código PHP está en rojo y el código HTML en azúl, en este caso incluyo comentarios en color verde. 

Esta primera sección evalúa que el formulario no contenga datos, se deja abierto el if para mostrar el formulario, que esta escrito en HTML.

<?
if(!$HTTP_POST_VARS){
?>

En esta línea iniciamos configuramos la tabla con un ancho de 500 y un borde de 5.

<table width="500" border="5">

Con esta línea configuramos el formulario, note que en la acción hacemos referencia a la matriz $HTTP_POST_VARS ya que esta recibirá los datos del formulario que a su vez utiliza el metodo POST para la publicación de los datos.

<form action="<? $HTTP_POST_VARS ?>" method="post">

Luego continuamos con el resto de la tabla y los campos del formulario.

  <tr>
    <th scope="row" colspan="2" bgcolor="#000000" style="color:#FFFFFF"><H3>NUEVO USUARIO</H3></th>
  </tr>

En esta porción de código encontramos el primer campo que corresponde a nombre, note que esta en una fila "<tr>" y "</tr>", se incluye la etiqueta en una celda y el campo en otra.

  <tr>
    <th scope="row">Nombre</th>
    <td><input name="nombre" type="text" size="40" maxlength="50" /></td>
  </tr>

Al igual que el campo anterior vemos en esta porción la configurarción del campo codigo.

  <tr>
    <th scope="row">Codigo</th>
    <td><input name="codigo" type="text" size="40" maxlength="5" /></td>
  </tr>

Ahora el campos edad.

  <tr>
    <th scope="row">Edad</th>
    <td><input type="text" name="edad" size="40" maxlength="2" /></td>
  </tr>

Aquí el campo sueldo, note que este campo incluye value=0 y esto es porque este campo recibirá números.

  <tr>
    <th scope="row">Sueldo</th>
    <td><input name="sueldo" type="text" value="0" size="40" maxlength="7" /></td>
  </tr>

Finalmente el campo Password, vea que el tipo del campo es password.

  <tr>
    <th scope="row">Password</th>
    <td><input name="password" type="password" size="40" maxlength="10" /></td>
  </tr>

En esta última parte del código HTML encontramos la configuración del botón que ejecutará la acción del formulario su valor es Guardar Datos y además vemos el cierre de Form y el cierre de Table.

  <tr>
    <th scope="row">&nbsp;</th>
    <td><input name="" type="submit" value="Guardar Datos" /></td>
  </tr>
</form>
</table>

La siguiente porción de código es de PHP y corresponde al cierre de if y el inicio de else.

<?
} else {

Estas cinco líneas de código asignan los valores de los datos capturados en el formulario a cinco diferentes variables que usaremos para guardar los datos en la tabla.

$nombre = $HTTP_POST_VARS[nombre];
$codigo = $HTTP_POST_VARS[codigo];
$edad = $HTTP_POST_VARS[edad];
$sueldo = $HTTP_POST_VARS[sueldo];
$password = $HTTP_POST_VARS[password];

Las siguiente sección corresponde a la validación del formulario, es decir verificar que el usuario haya ingresado los datos en todos los campos correspondientes, caso contrario se finalizará este programa con el mensaje:  "Debes llenar todos los campos del formulario".

if(!$nombre || !$codigo || !$edad || $sueldo == 0 || !$password) {
    echo "Debes llenar todos los campos del formulario";
    exit;
}

Ahora es necesario conectar con el servidor de prueba para que podamos tener acceso a la base de datos que creamos en la lección nueve, para ello usamos el siguiente código.  Vea que el codigo incluye el nombre del servidor "localhost", el nombre del usuario "root" y la contraseña "123456" en mi caso utilizo estos datos, tambien es importante resaltar que la instrucción or die permite enviar un mensaje de error en caso de no conectar con el servidor.

$db = mysql_connect("localhost", "root", "123456") 
           or die ("No es posible conectar con localhost en este momento, inténtalo más tarde.");

Es momento de seleccionar la base de datos, al igual que en el código anterior si la base de datos no se puede seleccionar la instrucción or die enviará un mensaje de error.

mysql_select_db("colegioiprueba") or die ("No se pudo seleccionar la base datos colegioprueba, prueba más tarde");

Una vez seleccionada la base de datos grabamos los datos capturados en el formulario utilizando una instrucción sql.

$insertar = "insert into datos (nombre, codigo, edad, sueldo, password)
            values ('$nombre', '$codigo', '$edad', '$sueldo', '$password')";

Ejecutamos la consulta slq.

$resultado = mysql_query($insertar);

Debemos confirmar si efectivamente se guardaron los datos y en caso contrario notificar que no fue posible guardarlos.

if(!$resultado){
    echo "No se guardaron datos";
} else {
    echo "<h1>DATOS GUARDADOS CON EXITO</H1>";
}

Terminamos cerrando else con una llave y PHP.

}
?>

Bien es hora de probar si funciona nuestro programa, recuerde que primero se debe crear la base de datos, luego la tabla, luego debe configurar su sitio en Dreamweaver con su servidor (si así lo prefiere, sino puede usar el bloc de notas) y listo.

Aquí les dejo una copia del programa completo sin comentarios.

<?
if(!$HTTP_POST_VARS){
?>
<table width="500" border="5">
<form action="<? $HTTP_POST_VARS ?>" method="post">
  <tr>
    <th scope="row" colspan="2" bgcolor="#000000" style="color:#FFFFFF"><H3>NUEVO USUARIO</H3></th>
  </tr>
  <tr>
    <th scope="row">Nombre</th>
    <td><input name="nombre" type="text" size="40" maxlength="50" /></td>
  </tr>
  <tr>
    <th scope="row">Codigo</th>
    <td><input name="codigo" type="text" size="40" maxlength="5" /></td>
  </tr>
  <tr>
    <th scope="row">Edad</th>
    <td><input type="text" name="edad" size="40" maxlength="2" /></td>
  </tr>
  <tr>
    <th scope="row">Sueldo</th>
    <td><input name="sueldo" type="text" value="0" size="40" maxlength="7" /></td>
  </tr>
  <tr>
    <th scope="row">Password</th>
    <td><input name="password" type="password" size="40" maxlength="10" /></td>
  </tr>
  <tr>
    <th scope="row">&nbsp;</th>
    <td><input name="" type="submit" value="Guardar Datos" /></td>
  </tr>
</form>
</table>
<?
} else {
$nombre = $HTTP_POST_VARS[nombre];
$codigo = $HTTP_POST_VARS[codigo];
$edad = $HTTP_POST_VARS[edad];
$sueldo = $HTTP_POST_VARS[sueldo];
$password = $HTTP_POST_VARS[password];

if(!$nombre || !$codigo || !$edad || $sueldo == 0 || !$password) {
    echo "Debes llenar todos los campos del formulario";
    exit;
}

$db = mysql_connect("localhost", "root", "123456") 
           or die ("No es posible conectar con localhost en este momento, inténtalo más tarde.");

mysql_select_db("colegioiprueba") or die ("No se pudo seleccionar la base datos colegioprueba, prueba más tarde");

$insertar = "insert into datos (nombre, codigo, edad, sueldo, password)
            values ('$nombre', '$codigo', '$edad', '$sueldo', '$password')";
$resultado = mysql_query($insertar);

if(!$resultado){
    echo "No se guardaron datos";
} else {
    echo "<h1>DATOS GUARDADOS CON EXITO</H1>";
}
}
?>

2 comentarios:

  1. Buen aporte profe, esta bien explicado y también la división entre php y tabla por color...gracias.

    ResponderEliminar
  2. Prof. Tengo una duda: Estoy creando mi formulario para el acceso de productos de la FERRETERÍA pero al momento de probar el formulario no me resultados positivos; en si la duda es que en el IF DE ESTE CODIGO USTED TIENE if(!$nombre || !$codigo || !$edad || $sueldo == 0 || !$password) {
    echo "Debes llenar todos los campos del formulario";
    exit; yo lo cambié por mis datos desde luego pero en si no sé si en $sueldo yo lo sustituí por precio pero no sé si deba llevar == 0 y sin la !...
    Gracias prof.
    Att. Fernando Amaya =)

    ResponderEliminar