t9 - uso de formularios
DESCRIPTION
Formularios en PHPTRANSCRIPT
![Page 1: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/1.jpg)
Uso de formularios Daniel Santiago
1
Uso de formularios
Introducción 2
Cómo recoge PHP los datos de un formulario 2
Post VS Get 3
Crear formularios dinámicos 3
Obtener datos de un formulario 4
Verificar el contenido de los campos de un formulario 6
Formulario con más de un botón 6
![Page 2: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/2.jpg)
Uso de formularios Daniel Santiago
2
1. Introducción
La gran mayoría de aplicaciones web, por no decir todas, están diseñadas para formular
preguntas al usuario. Estas aplicaciones recogen la información de introducen los usuarios y la
usan con diversos propósitos, como pueden ser guardar los datos en una base de datos o para
realizar una comprobación en una instrucción condicional.
Los datos se recogen mediante los formularios HTML, mediante los cuales el usuario puede
introducir de diversas formas los datos (ya sea con campos de texto, listas desplegables, cajas
de selección, etc.).
En este capítulo se verá las herramientas que ofrece PHP para poder tratar los datos que
introduce el usuario en un formulario.
2. Cómo recoge PHP los datos de un formulario
Cuando el usuario pulsa el botón Submit del formulario, se ejecuta la acción que contiene el
parámetro action del formulario. En este parámetro especificamos el programa PHP que
queremos ejecutar. Las instrucciones de este programa serán capaces de obtener los datos del
formulario y operar con ellos. Hay diversas formas de acceder a estos datos:
Nombre de función Descripción
$_POST Array que contiene los datos de cada campo del formulario, siempre que éste tenga method=”POST”
$_GET Array que contiene los datos de cada campo del formulario, siempre que éste tenga method=”GET”
$_REQUEST Array que contiene los datos de $_POST, $_GET y $_COOKIE
Supongamos que tenemos un formulario cuyo método está definido a POST (method=”POST”),
y tiene los campos (inputs) “nombre” y “edad”. Una forma de obtener los datos de estos
campos sería con las siguientes instrucciones:
$nombre = $_POST[“nombre”];
$edad = $_POST[“edad”];
Podemos observar que accedemos a los campos del formulario mediante el array $_POST
usando su nombre.
El siguiente ejemplo muestra cómo listar todos los campos de un formulario junto con el valor
introducido por el usuario en cada uno:
foreach ($_POST as $campo => $valor){
echo “$campo = $valor<br/>”;
}
![Page 3: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/3.jpg)
Uso de formularios Daniel Santiago
3
3. Post VS Get
Para enviar información de un formulario, se usa uno de los dos métodos. Las diferencias entre
uno y otro son:
Método GET: los datos del formulario se pasan agregándolos a la URL que ejecuta la
acción del formulario. Por ejemplo:
procesaform.php?nombre=Dani&apellido=Santiago
Las ventajas de este método son su simplicidad y velocidad. Las desventajas son que se
pueden pasar menos datos y que la información se puede ver en el explorador, lo cual
es un problema de seguridad.
Método POST: los datos del formulario se pasan como un paquete en una
comunicación separada con el programa de procesamiento. Las ventajas de este
método son que se puede pasar información ilimitada y los datos están más seguros.
La desventaja es que es un método más lento.
4. Crear formularios dinámicos
Una utilidad de tener una base de datos que guarda información sobre nuestra aplicación
puede ser la creación de formularios construidos según los datos almacenados. Por ejemplo:
Podemos crear formularios con un número de campos igual al número de atributos de
una tabla, y con el mismo nombre.
Si queremos crear un formulario para que el usuario pueda editar los datos de su
perfil, podemos hacer que los campos contengan los datos actuales del usuario.
Podemos crear listas de selección cuyas opciones son cargadas desde la base de datos.
Por ejemplo, si tenemos una tienda que trabaja con 4 tipos de categorías de
productos, y los nombres de estas categorías los tenemos guardados en una tabla de la
base de datos, podemos crear la lista de selección a partir de estos valores.
El mismo método que el del punto anterior podemos usarlo para crear listas de
botones de opción.
El siguiente fragmento de código muestra cómo se crea un formulario a partir de los campos
de la tabla Alumno de la base de datos Escuela:
$con = mysqli_connect("localhost","root","12345","Escuela")
or die("No se puede conectar");
$consulta = "SHOW COLUMNS FROM alumno";
$resultado = mysqli_query($con, $consulta);
echo "<form action='procesaInformacion.php' method='POST'>";
echo "<table border='0'>";
while($fila = mysqli_fetch_array($resultado)){
echo "<tr><td>".$fila['Field']."</td>";
echo "<td><input type='text' name='".$fila['Field']."'
maxlength='50'/></td>";
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' value='Enviar'/>";
echo "</form>";
![Page 4: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/4.jpg)
Uso de formularios Daniel Santiago
4
Obsérvese los siguientes aspectos:
Cómo se obtiene el nombre de los campos de una tabla: con la consulta SHOW
COLUMNS FROM nombre_tabla.
En el bucle accedemos al nombre de cada columna usando $fila*‘Field’+. Field es el
nombre de columna que nos devuelve MySQL para referirnos al nombre del campo.
Cada input que creamos tiene el mismo nombre que el de la columna de la tabla
Alumno al que hace referencia.
En el siguiente código vemos un ejemplo de cómo se crea una lista de selección cuyas opciones
provienen de los datos de la tabla Categoría de la base de datos Tienda:
$con = mysqli_connect("localhost","root","12345","Tienda")
or die("No se puede conectar");
$consulta = "SELECT * FROM Categoria";
$resultado = mysqli_query($con, $consulta);
echo "<select name='categoria'>";
while($fila = mysqli_fetch_array($resultado)){
extract($fila);
echo "<optionvalue='$codigo'>$nombre</option>";
}
echo "</select>";
Podemos observar cómo se van creando las diferentes opciones de la lista de selección dentro
del bucle. Se usa la función extract para obtener tantas variables como campos tiene cada fila,
y cada variable con el mismo nombre que el del campo de la fila. Hay que tener en cuenta que
sólo se crea una lista de opciones, por tanto antes del bucle creamos la etiqueta HTML select.
Dentro del bucle añadimos las opciones, y después del bucle cerramos la etiqueta select.
Veamos el mismo ejemplo que en el caso anterior, pero esta vez creando una lista de botones
de opción:
$con = mysqli_connect("localhost","root","12345","alumno")
or die("No se puede conectar");
$consulta = "SELECT * FROM Categoria";
$resultado = mysqli_query($con, $consulta);
while($fila = mysqli_fetch_array($resultado)){
extract($fila);
echo "<input type='radio' name='categoria'
value='$codigo'/>$nombre<br/>";
}
Recordemos que la etiqueta HTML radio crea un botón de opción. Si queremos crear un grupo
de botones de opción, de forma que el usuario sólo pueda seleccionar una opción, tendremos
que poner el mismo nombre (name) a todos los botones de opción que formen grupo.
5. Obtener datos de un formulario
Como se ha dicho en el apartado 2, PHP nos proporciona los arrays $_GET y $_POST donde se
guardan los valores que ha introducido el usuario en los campos de nuestros formularios.
Recordemos que $_GET se utiliza para formularios de tipo “get”, y $_POST para formularios de
tipo “post”.
![Page 5: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/5.jpg)
Uso de formularios Daniel Santiago
5
Así pues, para coger el valor de un campo de texto llamado “nombre”, de un formulario de
tipo “post”, escribiremos:
$var = $_POST[“nombre”];
Sabemos que los formularios pueden tener diversos tipos de inputs: campos de texto, listas
desplegables, botones de selección, casillas… El proceso de recoger los valores de cada input
es muy similar, pero existen casos especiales, como las casillas, ya que el usuario puede
seleccionar varias de ellas a la vez. Veamos un ejemplo:
En el siguiente formulario, el usuario puede seleccionar varias aficiones, representadas con
una lista de casillas. Vamos a almacenar los datos de esta lista de casillas en un array:
echo “<input type=’checkbox’ name=’aficiones[leer]’
value=’Leer’>Leer<br/>”;
echo “<input type=’checkbox’ name=’aficiones[deporte]’
value=’Deporte’>Practicar deporte<br/>”;
echo “<input type=’checkbox’ name=’aficiones[programar]’
value=’Programar’>Programar<br/>”;
}
Podemos acceder a los datos de la siguiente forma:
$_POST[aficiones][leer];
$_POST[aficiones][deporte];
$_POST[aficiones][programar];
Otra forma de acceder a los datos que ha introducido el usuario en un formulario es el uso de
la estructura foreach, que es útil para recorrer un array. Recordemos que los datos de un
formulario se almacenan en el array $_POST (o $_GET, en función del tipo de formulario).
Veamos un ejemplo, en el que se comprueba que todos los campos del formulario tienen
algún valor:
foreach($_POST as $valor){
if($valor==””){
echo “Debes completar todos los campos”;
mostrar_formulario();
exit();
}
}
echo “Bienvenido”;
En el código hemos introducido un foreach que recorre cada posición del array $_POST. Si
encuentra alguno vacío, es decir, igual a una cadena de caracteres vacía (“”), muestra un
mensaje y llama a una función que crea el formulario para que el usuario vuelva a introducir
sus datos. La función exit() es importante: hace que el programa se detenga. Tiene sentido
ya que si hay algún campo vacío, se debe volver a mostrar el formulario y ya está. Si no
pusiéramos la función exit(), el programa seguiría ejecutándose y se mostraría el mensaje
de bienvenida que hay después del foreach.
Veamos ahora un ejemplo en el que recorremos los campos de un formulario para
asegurarnos de que el usuario los ha rellenado, todos menos un par, llamados
“segundoTelefono” y “fax”:
![Page 6: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/6.jpg)
Uso de formularios Daniel Santiago
6
foreach($_POST as $campo => $valor){
if($campo != “segundoTelefono” and $campo != “fax”){
if($valor==””){
echo “Debes completar todos los campos”;
mostrar_formulario();
exit();
}
}
}
echo “Bienvenido”;
6. Verificar el contenido de los campos de un formulario
Una práctica útil en nuestras aplicaciones web es asegurarnos de que la información que
introduce un usuario en los campos de los formularios es correcta: por ejemplo, los números
de teléfono no contiene letras, no hay números en los nombres, etc. También podemos
proteger a la aplicación o la base de datos de ataques de usuarios que introduzcan scripts en
los campos de los formularios.
Esta verificación de contenido la podemos hacer usando expresiones regulares. Veamos un
ejemplo:
if(!ereg(“[A-Za-z’ -]{1,50}”, $apellido)){
echo “Ha introducido caracteres erróneos en el apellido”;
mostrar_formulario();
exit();
}
echo “Bienvenido”;
En el código anterior comprobamos mediante la función ereg que el valor de la variable
$apellido sólo contenga letras (mayúsculas o minúsculas), espacios, comilla simple o guión.
7. Formulario con más de un botón
En ocasiones nuestras aplicaciones tendrán formularios con más de un botón. Por ejemplo, en
un carrito de la compra, tendremos un botón para confirmar el pedido y otro para cancelarlo.
Ambos botones estarán dentro del mismo formulario, el cual sólo puede realizar una acción en
su atributo action. Necesitamos una manera de saber qué botón ha pulsado el usuario para
luego realizar las operaciones que queramos asociadas a cada botón. Veamos como hacer esto
en PHP.
Tenemos este formulario:
<formaction=”acciones.php” method=”POST”> <input type=”text” name=”nombre”/><br/>
<input type=”submit” name=”boton” value=”Aceptar”/><br/>
<input type=”submit” name=”boton” value=”Cancelar”/><br/>
</form>
Los dos botones deben llamarse igual (tienen el mismo valor en name).
![Page 7: T9 - Uso de formularios](https://reader035.vdocuments.co/reader035/viewer/2022073102/559c1aa71a28ab27598b47e3/html5/thumbnails/7.jpg)
Uso de formularios Daniel Santiago
7
La página acciones.php tendrá el siguiente código:
if($_POST[“boton”] == “Aceptar”){ mostrar_pagina1();
}
else{
mostrar_pagina2();
}
Para saber el botón que ha pulsado el usuario utilizamos el array $_POST y nos fijamos en el
valor de la variable asociada a los botones del formulario (boton).