Curso de PHP: Nivel Básico – Clase 7. Formularios

Con este artículo retomamos el curso de PHP básico. En la última clase vimos que se puede usar GET para pasar parámetros entre páginas de PHP. Hoy llega el turno de conocer POST, que es otro método usado para el pasaje de parámetros, asociado con los formularios.

A lo largo de esta clase, vamos a ver tres ejemplos de formularios que se envían y reciben mediante este nuevo método. En el primero, se envía de una página PHP a otra y en el segundo, se envía a sí misma. En el tercero, el formulario está dividido en dos páginas y hay una tercera que recibe todos los datos.

Pasaje de datos por POST

Empecemos con el primero y veamos el código. Noten que en este caso, el archivo que tiene el formulario y que realiza el envío puede ser únicamente HTML, no necesita nada de PHP. Al siguiente código lo introduciremos en un archivo que llamaremos formA.php

El código fuente completo está a continuación, y el ejemplo en este enlace.

Tenemos una definición típica de un documento HTML. En el cuerpo definimos un formulario entre las etiquetas <form> y </form> y dentro, se sitúan todos los elementos que tendrá: campos de texto, selects, áreas de texto, botones, etc. Prestemos atención a la primera línea donde abre la etiqueta <form>

Observemos los atributos. El primero, name, sirve para darle un nombre al formulario y así tener una forma de identificarlo. No lo confundan con el atributo id, que en este caso, no ha sido definido. El atributo method define el método de pasaje de datos que vamos a utilizar. Podríamos elegir el que ya vimos, get, o podemos usar post. La principal diferencia entre ambos, es que en get veremos las variables y sus valores en la dirección de la URL y en post no. Por último, el atributo action indica a qué página se enviará el formulario cuando lo enviemos.

Se podría enunciar como regla general que en formularios siempre se utiliza post, y que para pasar parámetros en enlaces, se utiliza get.

Este ejemplo tiene las características básicas de un formulario de contacto de los que se utilizan en páginas webs y sus componentes son: un campo de texto nombre, un select para elegir un país, un campo de texto para introducir un correo electrónico, otro para una dirección web, un área de texto para escribir un mensaje y un botón, del tipo submit para enviar el formulario.

Si completamos los campos y hacemos click en el botón enviar, todos los valores se enviarán al otro archivo: formB.php. Veamos como es:

Pasamos a un nuevo archivo donde aparece algo de PHP dentro de un código HTML. Aquí se recibirán los valores que se enviaron desde el formulario. ¿Cómo se obtienen los valores? Utilizando la variable $_POST y poniendo entre corchetes el nombre del campo. Por ejemplo, $_POST[‘frm-nombre’] tiene el valor del campo cuyo atributo name es frm-nombre. Lo mismo ocurre con los otros campos. En el caso de $_POST[‘frm-pais’] tiene el valor de la opción elegida en el select. En este ejemplo, opté por mostrar los valores introducidos, pero es posible modificarlos, o pasarlos a otras variables para trabajar con ellos. Comúnmente, lo primero que se hace al recibir datos a través de un formulario es validarlo, pero eso lo veremos a fondo en la clase vinculada a cadenas de caracteres.

Formulario que envía y recibe al mismo tiempo

Ahora vamos a ver un ejemplo donde el archivo PHP que envía y el que recibe son el mismo. Se podría decir que las dos partes del ejemplo anterior se unen en un único archivo. Veamos como hacer esto. El código funcionando lo encuentran en este enlace.

Como ven, hay un if que sirve para dividir en dos el código. Pensemos que el archivo se cargará tanto en caso de que el formulario se esté enviando y también en el caso en que no se esté enviando. Es decir, en un caso deberá mostrarse el formulario (antes de enviarse) y en otro, el resultado (luego de enviarse). La clave está en la condición de este if.

Mediante la función isset se verifica si la variable $_POST[“frm-nombre”] está definida. Esto se puede hacer con cualquiera de los parámetros que se estén enviando. Si se está enviando el formulario entonces esa variable debería venir definida. Si el formulario no está siendo enviado, entonces esa variable está indefinida. Esto posibilita que si la condición es verdadera, se ejecute la primera parte del código del archivo, que muestra el resultado por pantalla. En caso contrario, se muestra el formulario para completar.

Formularios en partes con campos ocultos

Muchas veces, se realizan programas donde los formularios deben enviarse una y otra vez y cierta información debe guardarse en cada envío. Un ejemplo donde podemos ver esto es en formularios de más de una página. Un buen truco para lograr este tipo de formularios es utilizar campos ocultos. Veamos el siguiente ejemplo. Supongamos que una empresa necesita hacer una encuesta a sus clientes. Para ello, ha diagramado un formulario que consiste en dos partes: una donde van los datos de contacto y otra donde están las preguntas que se quiere que los clientes respondan. El resultado de todo lo que se complete debe ir a una única página. Para poder hacer esto, vamos a utilizar tres archivos PHP.

El primero, tendrá un formulario donde solamente se introducirán los datos de contacto. Al enviarlo, iremos a parar a otro formulario donde estarán las preguntas de la encuesta y en donde se recibirán los datos de contacto. Finalmente, este segundo formulario se enviará hacia una tercera página, resultados.php donde se mostrarán la totalidad de datos ingresados.

El ejemplo funcionando lo pueden encontrar en este enlace.
Veamos el código del primer archivo, form1.php

Es todo HTML, no hay nada de PHP. Es muy similar a los formularios de los ejemplos anteriores. Noten que el atributo action en la etiqueta form apunta al archivo form2.php. Veamos como es.

En este segundo formulario, nos interesan dos aspectos. Por un lado, tenemos que recibir los datos del formulario anterior y guardarlos para luego reenviarlos. Por el otro, hay que realizar las preguntas de la encuesta. Esto último es simple: se agregan los campos que se necesitan, que en este caso son elementos del tipo radio. Para guardar temporalmente los valores del formulario anterior, se usan los campos ocultos o hidden. Son los últimos tres antes de la etiqueta </form>. Se les pone el mismo nombre que ya tenían (aunque podrían ser otros) y en el atributo value se les define el valor que traen por post que corresponde. Al enviarse este segundo formulario, se llegará al último archivo, resultados.php

Aquí se reciben todos los datos y se muestran por pantalla. En el caso de las respuestas de las preguntas, consideré asignarle un número a cada una y eso es lo que se observa.

Conclusiones

Mientras que el método get se utiliza para pasar parámetros en enlaces, el método post se utiliza para hacer lo mismo pero con formularios. La principal diferencia es que get muestra los datos en la URL de la dirección y post no lo hace.

Los formularios pueden ser enviados de una página a otra, o pueden enviarse a sí mismos. También pueden estar divididos en partes, para lo cual se aprovechan los campos ocultos.

Ejercicios propuestos

  1. El usuario ingresa 10 valores enteros desordenados y debe devolverse la lista ordenada. Deben usarse dos archivos con un formulario. Un archivo para enviar y otro para recibir.
  2. Se ingresan 6 números que corresponden a temperaturas. Obtener la más alta de todas. Realizar el ejercicios en un único archivo.
  3. Se reciben las siguiente palabras: 1 sustantivo, 1 adjetivo y 2 verbos. Introducirlos en un párrafo que cuente una historia corta. Realizarlo en un único archivo.
  4. Dado un número al azar entre 1 y 10, realizar un programa en PHP que permita al usuario adivinarlo. Si falla, debe tener la oportunidad de volver a intentarlo de forma repetida.

Bibliografía

  • Zend PHP5 Certification Study Guide de Davey Shafik con Ben Ramsey, php architect nanobooks
  • Desarrollo web con PHP y MySQL, de Luke Welling y Laura Thomson, Editorial Anaya
Soy programador web y me desempeño como Líder Técnico y de Proyectos en Polar Bear Development. Trabajo con tecnologías como PHP, Javascript, MySQL y HTML5 para el desarrollo de sitios y sistemas web. Me especializo en Zend Framework 2 y otros frameworks MVC, como también en WordPress y otros CMS. Lidero equipos de desarrolladores trabajando con Scrum. Vivo en Buenos Aires, Argentina.
 

8 thoughts on “Curso de PHP: Nivel Básico – Clase 7. Formularios

  1. Son geniales tus tutos Alejandro!! Se valora el esfuerzo y el tiempo!! ojala publiques algo sobre expresiones regulares en PHP, un abrazo y de nuevo Gracias!

  2. Muchas gracias Marco.
    Recibir comentarios así me dan ganas de seguir escribiendo.

    Con respecto a las expresiones regulares, es un tema que siempre dejé pendiente puesto que tengo una materia en la universidad en la que lo explican. Este año no la cursé, pero calculo que seguro lo haré el próximo. Y sí, probablemente escriba al respecto.

    Saludos!

  3. Soy Blogger y se el tiempo que lleva redactar un articulo, me imagino Un tutorial! debe demandar mucho de tu tiempo y eso se agradece, justo estoy viendo el tema de expresiones regulares, por eso mi sugerencia.

    PD: ya agregue al “El Replicante” como sitios de interés en mi Blog 😉 Abrazo.

  4. Sí, es cierto. Lleva tiempo, pero también es una satisfacción ver como va queda al final.
    Gracias por agregarme a tus links, yo ya agregué Código Tech a mis enlaces. ¡Y me suscribí al RSS!

    Abrazo!

  5. Saludos

    O soy muy bruto, o no estoy viendo a que correo se envia el formulario?

    Incluso busque aca en la pagina con arroba @ y no aparece nada que diga algo como:

    sent to: destinatario @ correo.com

    En que parte del código se indica a que correo va dirigido el formulario?

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*