PHP - 8va Entrega datos GET y POST
No es nada nuevo lo que vamos a ver para ésta entrega, ya que por el nivel que venimos manejando en los formularios y las variables que pasamos. No tendría porque dificultarse la utilización de éstos métodos.
En las versiones anteriores a la 5 de PHP la información directamente se pasaba a través de la variable, lo que suponía una deficiencia en la seguridad de nuestros sitios. Por ésto desde la versión 5 PHP pasa los datos a través de las variables superglobales $_POST, $_GET y $_COOKIE.
$_POST pasa los valores a través de la etiqueta name de nuestro código HTML y como es un array asociativo nuestro valor tiene que respetar ése nombre, como venimos viendo.
$_GET pasa los valores a través de la URL de nuestro sitio lo cual es adminisible si los valores que tiene que pasar son de caracter público.
$_COOKIE anteriormente HTTP_COOKIE_VARS sirve para almacenar la información de nuestro inicio de sesión en nuestro sitio.
Como no voy a dar ejemplos con $_POST creo que ya veníamos viendo bastante con los anteriores artículos...
Veamos el siguiente código:
<?php switch ($_GET["producto"]) { case 1: $imagen = "images/autos/Autos1.jpg"; break; case 2: $imagen = "images/autos/Autos2.jpg"; break; case 3: $imagen = "images/autos/Autos3.jpg"; break; case 4: $imagen = "images/autos/Autos4.jpg"; break; case 5: $imagen = "images/motos/Moto1.jpg"; break; case 6: $imagen = "images/motos/Moto2.jpg"; break; case 7: $imagen = "images/motos/Moto3.jpg"; break; case 8: $imagen = "images/motos/Moto4.jpg"; break; default: $imagen = "images/nodisponible.jpg"; } ?> <html> <head> <title>Práctica 11 PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <div align="center"> <table width="82%" border="0" cellpadding="4"> <tr> <td width="19%"><font color="#0000FF" size="2">AUTOS</font></td> <td width="51%" rowspan="5"><div align="center"><?php echo "<img src=$imagen>"; ?></div></td> <td width="30%"><font color="#FF0080" size="2">MOTOS</font></td> </tr> <tr> <td><a href="/mostrarImagenesCopia.php?producto=1">Auto 1</a></td> <td><a href="/mostrarImagenesCopia.php?producto=5">Moto 1</a></td> </tr> <tr> <td><a href="/mostrarImagenesCopia.php?producto=2">Auto 2</a></td> <td><a href="/mostrarImagenesCopia.php?producto=6">Moto 2</a></td> </tr> <tr> <td><a href="/mostrarImagenesCopia.php?producto=3">Auto 3</a></td> <td><a href="/mostrarImagenesCopia.php?producto=7">Moto 3</a></td> </tr> <tr> <td><a href="/mostrarImagenesCopia.php?producto=4">Auto 4</a></td> <td><a href="/mostrarImagenesCopia.php?producto=8">Moto 4</a></td> </tr> </table> </div> </body> </html>
A estas alturas podemos entenderlo fácilmente.
Veamos en detalle como pasamos los datos a través de GET. El caracter ? se usa para indicar la URL de destino en nuestro sitio.
El caracter & se usa para indicar la clave que se pasa, en éste ejemplo no se ve pero más adelante vamos a mostrar el uso.
Una pequeña práctica con POST(y al final si di práctica ejejejiju!)... que sirve para que tengamos buenas costumbres.
Aquí el ejemplo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Buenas practias POST</title> </head> <body> <h1>Buenas prácticas con POST</h1> <p>Supongamos que tenemos que enviar 2 campos a un formulario web, para esto tenemos que configurar nuestro código para que envíe los datos correctamente. Para ésto creamos los formularios teniendo en cuenta algunas cosideraciones</p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p>Sumamos valores con funciones</p> <fieldset> <legend>Ingresá los valores que querés sumar</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="text" id="tipo2" name="tipo2" value=""/> <br /><br /> <input type="submit" value="Enviar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if (empty($_POST["tipo1"])) { echo "<p>Falta rellenar el campo 1</p>"; } if (empty($_POST["tipo2"])) { echo "<p>Falta rellenar el campo 2</p>"; } ?> </body> </html>
Al levantar el formulario vemos algunos temas, en principio apenas ingresamos nos acusa que no tiene valores ingresados y luego comprobamos el funcionamiento y al ingresar los valores no nos acusa de nada, pero cuando ingresamos un valor solamente nos sigue apareciendo que nos faltan los 2. Veamos como solucionar éste tema:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Buenas practias POST</title> <?php $ingresoInicial = FALSE; if (empty($_POST["Enviar"])) { $ingresoInicial = TRUE; $_POST["tipo1"] = ""; $_POST["tipo2"] = ""; } ?> </head> <body> <h1>Buenas prácticas con POST</h1> <p>Supongamos que tenemos que enviar 2 campos a un formulario web, para esto tenemos que configurar nuestro código para que envíe los datos correctamente. Para ésto creamos los formularios teniendo en cuenta algunas cosideraciones</p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p>Sumamos valores con funciones</p> <fieldset> <legend>Ingresá los valores que querés sumar</legend> <input type="text" id="tipo1" name="tipo1" value=""/> <br /><br /> <input type="text" id="tipo2" name="tipo2" value=""/> <br /><br /> <input type="submit" value="Enviar" name="Enviar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if (!$ingresoInicial) { if (empty($_POST["tipo1"])) { echo "<p>Falta rellenar el campo 1</p>"; } if (empty($_POST["tipo2"])) { echo "<p>Falta rellenar el campo 2</p>"; } } ?> </body> </html>
Finalmente nos encontramos con un sólo tema pendiente, antes como nos gusta escribir mucho y tener orden en nuestro código recapitulemos lo que logramos.
- Que el formulario no acuse de que nos faltan ingresar datos apenas ingresamos.
- Que muestre el error del campo que corresponda.
Nos falta algo escencial... y es que cuando llenamos los campos no se olvide de lo que llenamos y así no nos haga llenarlos cada vez... lo solucionamos de la siguiente forma:
Agregando el código PHP necesario en nuestro atributo value: <?php echo $_POST['tipo1']; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Buenas practias POST</title> <?php $ingresoInicial = FALSE; if (empty($_POST["Enviar"])) { $ingresoInicial = TRUE; $_POST["tipo1"] = ""; $_POST["tipo2"] = ""; } ?> </head> <body> <h1>Buenas prácticas con POST</h1> <p>Supongamos que tenemos que enviar 2 campos a un formulario web, para esto tenemos que configurar nuestro código para que envíe los datos correctamente. Para ésto creamos los formularios teniendo en cuenta algunas cosideraciones</p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p>Sumamos valores con funciones</p> <fieldset> <legend>Ingresá los valores que querés sumar</legend> <input type="text" id="tipo1" name="tipo1" value="<?php echo $_POST['tipo1']; ?>"/> <br /><br /> <input type="text" id="tipo2" name="tipo2" value="<?php echo $_POST['tipo2']; ?>"/> <br /><br /> <input type="submit" value="Enviar" name="Enviar"/> <input type="reset" value="Limpiar" /> </fieldset> </form> <?php if (!$ingresoInicial) { if (empty($_POST["tipo1"])) { echo "<p>Falta rellenar el campo 1</p>"; } if (empty($_POST["tipo2"])) { echo "<p>Falta rellenar el campo 2</p>"; } } ?> </body> </html>
Listo por ahora, saludos, Ch4rl1X!