Conceptos básicos de PHP (5)

Ya estoy de vuelta, esta vez para explicar cómo funcionan los formularios. Trataré de explicarlo de una forma clára.

Cuando creamos una página, lo interesante llega cuando permitimos al usuario interactuar con la página, y mostrar resultado según los valores que dicho usuario introduzca mediante unos campos que permiten escribir. Cuando entramos en google, éste nos brinda un campo de formulario con un espacio para escribir nuestra busqueda y uno o dos botones que envían nuestra petición. Al darle al botón, los valores introducidos se envían a otra página escrita en php que trata estos valores para mostrar un resultado. Vamos a tratar de entender cómo son enviados los valores para su posterior tratado en php.

Primero creamos una archivo HTML, que contenga los campos de formularios que serán enviados a otro archivo en php. Algo básico:

<html>
<head><title>Ejemplillo</title></head>
<body>
<form action="paginaenphp.php" method="post" >
<input type="text" name="valor1" />
<input type="submit" value="Enviar" />

</form>

</body>

</html>

Hemos creado una etiqueta <form>, donde le decimos a que página se enviarán nuestros datos (action=»paginaenphp.php») y donde además le decimos de que forma serán enviados estos datos (method=»post»). Dentro de la etiqueta <form> hemos metido dos «input» o elementos de formularios. El primero es de tipo texto (type=»text») que será una entrada que nos permitirá introducir texto. La segunda es de tipo submit (type=»submit») que será un botón encargado de enviar los datos. Para que al enviar el formulario a nuestro archivo php éste sepa que variables tiene que manejar, debemos darle un nombre a cada elemento del formulario donde introduzcamos algún dato. Php recibirá un array llamado $_POST[] donde cada índice será el nombre que hemos puesto en HTML. Este nombre se especifica con name=»nombreindice».

La forma en que se envían estos datos es similar a la forma en que se establece la conexión entre navegador y servidor web cuando escribimos una dirección. El parámetro action=»lugar» actúa como barra de direcciones, si no le especificamos la dirección completa, asume que el archivo paginaenphp.php está en el mismo sito que el archivo HTML que contiene el formulario. De este modo, podriamos realizar una conexión incluso con un servidor diferente indicandolo en action; action=»http://www.google.com/search». Si hicieramos esto, google recibiría los datos de nuestro formulario pero no sabría que hacer con ellos ya que espera una variable $_POST con nombres de índice concretos y no nuestro $_POST[«valor1″] indicado en el input (name=»valor1») de nuestro HTML.

Por lo tanto, podríamos decir que un formulario actua de forma similar a cuando escribimos una dirección web en la barra de direcciones de nuestro navegador, con la particularidad que a la vez que pide un archivo php, le envía unos valores para que los trate y así obtener un resultado en nuestro navegador en función a los datos enviados. Veamos como sería el archivo paginaenphp.php:

<?php
echo "El dato introducido en el formularo es: " . $_POST["valor1"];
?>

Como vemos, la variable de tipo array llamada $_POST no la hemos definido, ya que no somos nosotros quién la tenemos que definir, ésta se crea automáticamente cuando al pedir un archivo php, se envían a su vez datos de formulario. Para nuestro caso, la forma de enviar estos datos es mediante «post», por lo tanto la variable creada automáticamente se llamará $_POST con nombres de índices iguales a los nombres de nuestros elementos de formulario y con el valor que hemos escrito en dicho elemento. Sigamos con otro ejemplo. Supongamos que creamos un formulario con dos elementos para introducir valores y un botón para enviar dichos valores. Los valores introducidos serán numeros y cuando lo enviemos a php, éste sumará los dos numeros y mostrará el resultado. Bien, al lío; creamos primero el archivo en HTML:

<html>
<head><title>Otro Ejemplillo</title></head>
<body>
<form action="archivophp.php" method="post">
     <input type="text" name="valor1" />
     <input type="text" name="valor2" />
     <input type="submit" value="Enviar" />

</form>

</body>

</html>

Hemos creado un formulario similar al anterior, la diferencia es que hemos añadido otro elemento de texto más. Veamos el archivophp.php:

<?php
$resultado=$_POST["valor1"]+$_POST["valor2"];

echo "El resultado de la suma es: " . $resultado;

?>

Bien, obtenemos automáticamente una variable de tipo array llamada $_POST con índices de nombre igual a nuestros elementos en el formulario; valor1 y valor2. En $resultado almacenamos la suma de $_POST[«valor1»] y de $_POST[«valor2»] para luego mostrarla con echo.

Una aclaración. Como podemos observar el nombre de los índices del array se entrecomillan si son de típo texto, esto crea conflictos con echo cuando no lo usamos correctamente. Esto sería incorrecto:

Mal: echo «El valor1 es: $_POST[«valor1″]»;

Recordemos: echo muestra texto desde el inicio de comillas dobles hasta que encuentra otras comillas dobles, por lo tanto al encontrar las comillas dobles iniciales del índice del array, asume que ha terminado de mostrar texto y espera un punto y coma para terminar. Pero no es lo que encuentra, en cambio encuentra: valor1″]»; Lo cual es incorrecto (error de sintáxis). De modo que para solucionar esto, sacaríamos la variable fuera de las comillas:

Bien: echo «El valor1 es: » . $_POST[«valor1»];

Otra forma de solucionar esto sería sustituir las comillas dobles del índice por comillas simples:

Bien: echo «El valor1 es: $_POST[‘valor1’]»;

Al sustituir comillas dobles por comillas simples, no creamos ningún conflicto en el echo y al encontrar el símbolo $ asume que está ante una variable y la reemplaza por su valor.

All right, expliquemos ahora un concepto extraño. En clase hemos visto como crear un formulario en un archivo html y un archivo php que recibe los datos del formulario. Bueno, a mi particularmente me gusta meter el código php y el html en el mismo archivo. Además es lo que se hace en la vida real habitualmente. Tratemos de entender esto.

Sabemos que al enviar un formulario a un archivo php se crea una variable automáticamente llamada $_POST. Si accedieramos a ese archivo mediante la barra de direcciones de nuestro navegador, esta variable no existiría. Gracias a esta particularidad, en un archivo php podemos reconocer cuando estamos pidiendo el archivo mediante el navegador y cuando han sido enviados los datos. Para hacer este reconocimiento nos ayudaremos de nuestro amigo if else y de una función llamada isset(), a la cual le pasamos una variable como parámetro y nos devuelve un uno (1) si la variable existe y un cero (0) si la variable no existe. ¿Recordais que if esperaba un cero o un uno para ejecutar o no una porción de código? Veamos esto con un ejemplo:

<html>
<head><title>HTML y PHP todo juntito</head>
<body>
<form action="" method="post">
     <input type="text" name="valor1" />
     <input type="submit" value="Enviar" />

</form>
<?php
if( isset($_POST) ){
     echo "El formulario ha sido enviado y valor1 contiene: " . $_POST["valor1"];

}else{
     echo "Aun no se han enviado datos mediante formulario";

}

?>

</body>

</html>

Observemos, isset($_POST) comprueba si el array existe. Si existe (1) significa que hemos enviado el formulario por lo que pasamos a mostrar el valor de los datos enviados. Si no existe este array (0), significa que no hemos enviado los datos mediante formulario y muestra la porción de codigo dentro de else. Curioso ¿eh? Para indicar que queremos enviar los datos al mismo archivo, podemos poner en action el nombre del archivo o simplemente dejar este campo vacío action=»».

Para terminar, os dejo un pequeño juguetito. Hemos visto como enviar datos a un php mediante POST. Existe otro método de enviar datos a un php llamado GET. Este método añade a la dirección url escrita en nuestro navegador el nombre de un índice y su valor. La forma de hacerla sería esta: http://www.nasa.com/archivo.php?nombreindice=pepe&nombredeotroindice=perico. Analicemos esto, hemos enviado al archivo.php de la nasa un índice de variable array llamado nombreindice con valor pepe y otro índice llamado nombredeotroindice con valor perico. Observemos un enlace a un vídeo en youtube:

http://www.youtube.com/watch.php?v=rCLYx3nomao

En este enlace, estamos enviando un índice llamado v con valor rCLYx3nomao al archivo llamado watch.php. Bien, notad que tenemos el poder de darle a esta variable el valor que nos venga en gana. Y digo más, si cualquier persona puede dar una valor cualquiera a una variable dentro de un código php, ¿no sería ésto peligroso?, … pues sería, sería.

x)

Una respuesta a “Conceptos básicos de PHP (5)”

  1. […] ← Conceptos básicos de PHP (3) Conceptos básicos de PHP (5) → […]