PHP Formularios y entrada de usuario


Las variables $_GET y $_POST en PHP se utilizan para recuperar información de los formularios, como la entrada del usuario.


Procesamiento de formularios PHP

Es importante tener en cuenta que al procesar formularios HTML, PHP puede convertir automáticamente los elementos del formulario de la página HTML en variables disponibles para los scripts PHP.

Ejemplo

El siguiente ejemplo contiene un formulario HTML con dos campos de entrada y un botón de envío.

Código del archivo form.html:

<html> <head> <meta charset="utf-8"> <title>Tutorial de novato (example.com)</title> </head> <body> <form action="welcome.php" method="post">Nombre:<input type="text" name="fname">Edad:<input type="text" name="age"> <input type="submit" value="Enviar"> </form> </body> </html>

Cuando el usuario completa el formulario anterior y hace clic en el botón Enviar, los datos del formulario se envían al archivo PHP llamado "welcome.php":

Código del archivo welcome.php:

Bienvenido<?php echo $_POST["fname"]; ?>!<br>Tu edad es<?php echo $_POST["age"]; ?>años.

La demostración mediante el navegador es la siguiente:

Explicaremos las variables $_GET y $_POST de PHP en el próximo capítulo.


PHP obtener datos del menú desplegable

PHP menú desplegable de selección única

En el siguiente ejemplo configuramos tres opciones en el menú desplegable. El formulario utiliza el método GET para obtener los datos; el valor vacío del atributo action indica que se envía al script actual. Podemos obtener el valor del menú desplegable mediante el atributo name de select:

Código del archivo php_form_select.php:

<?php $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : ''; if($q) { if($q =='EJEMPLO') { echo 'Tutorial de novato<br>http://www.example.com'; } else if($q =='GOOGLE') { echo 'Búsqueda de Google<br>http://www.google.com'; } else if($q =='TAOBAO') { echo 'Taobao<br>http://www.taobao.com'; } } else { ?>
<form action="" method="get"> <select name="q"> <option value="">Selecciona un sitio:</option> <option value="EJEMPLO">Ejemplo</option> <option value="GOOGLE">Google</option> <option value="TAOBAO">Taobao</option> </select> <input type="submit" value="Enviar"> </form>
<?php } ?>

PHP menú desplegable de selección múltiple

Si el menú desplegable es de selección múltiple (multiple="multiple"), podemos configurar selectname="q[]"para que los datos se obtengan como un array. A continuación se utiliza el método POST para el envío, como se muestra en el siguiente código:

Código del archivo php_form_select_mul.php:

<?php $q = isset($_POST['q'])? $_POST['q'] : ''; if(is_array($q)) { $sites = array( 'EJEMPLO' => 'Tutorial de novato: http://www.example.com', 'GOOGLE' => 'Búsqueda de Google: http://www.google.com', 'TAOBAO' => 'Taobao: http://www.taobao.com', ); foreach($q as $val) { //PHP_EOL es una constante que se utiliza para los saltos de línea echo $sites[$val] . PHP_EOL; } } else { ?>
<form action="" method="post"> <select multiple="multiple" name="q[]"> <option value="">Selecciona un sitio:</option> <option value="EJEMPLO">Ejemplo</option> <option value="GOOGLE">Google</option> <option value="TAOBAO">Taobao</option> </select> <input type="submit" value="Enviar"> </form>
<?php } ?>

Formulario de botones de opción

En el formulario de botones de opción de PHP, el valor del atributo name es el mismo, mientras que los valores de value son diferentes, como se muestra en el siguiente código:

Código del archivo php_form_radio.php:

<?php $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : ''; if($q) { if($q =='EJEMPLO') { echo 'Tutorial de novato<br>http://www.example.com'; } else if($q =='GOOGLE') { echo 'Búsqueda de Google<br>http://www.google.com'; } else if($q =='TAOBAO') { echo 'Taobao<br>http://www.taobao.com'; } } else {
?><form action="" method="get"> <input type="radio" name="q" value="EJEMPLO" />Ejemplo <input type="radio" name="q" value="GOOGLE" />Google <input type="radio" name="q" value="TAOBAO" />Taobao <input type="submit" value="Enviar"> </form>
<?php } ?>

Casillas de verificación (checkbox)

Las casillas de verificación (checkbox) de PHP pueden seleccionar múltiples valores:

Código del archivo php_form_select_checkbox.php:

<?php $q = isset($_POST['q'])? $_POST['q'] : ''; if(is_array($q)) { $sites = array( 'EJEMPLO' => 'Tutorial de novato: http://www.example.com', 'GOOGLE' => 'Búsqueda de Google: http://www.google.com', 'TAOBAO' => 'Taobao: http://www.taobao.com', ); foreach($q as $val) { //PHP_EOL es una constante que se utiliza para los saltos de línea echo $sites[$val] . PHP_EOL; } } else {
?><form action="" method="post"> <input type="checkbox" name="q[]" value="EJEMPLO"> Ejemplo<br> <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br> <input type="submit" value="Enviar"> </form>
<?php } ?>

Validación de formularios

Debemos validar la entrada del usuario siempre que sea posible (mediante scripts de cliente). La validación en el navegador es más rápida y puede reducir la carga del servidor.

Si la entrada del usuario debe insertarse en una base de datos, debería considerar el uso de la validación en el servidor. Una buena forma de validar formularios en el servidor es enviar los datos del formulario a la página actual (mejor aún mediante envío asíncrono) en lugar de saltar a una página diferente. De esta manera, el usuario puede ver los mensajes de error en la misma página del formulario, lo que facilita la detección de errores.

Otras extensiones