• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
T9 - Uso de formularios
 

T9 - Uso de formularios

on

  • 302 views

Formularios en PHP

Formularios en PHP

Statistics

Views

Total Views
302
Views on SlideShare
296
Embed Views
6

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 6

http://danisantiago.com 6

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    T9 - Uso de formularios T9 - Uso de formularios Document Transcript

    • Uso de formularios Daniel Santiago 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 1
    • Uso de formularios Daniel Santiago 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 $_POST $_GET $_REQUEST Descripción Array que contiene los datos de cada campo del formulario, siempre que éste tenga method=”POST” Array que contiene los datos de cada campo del formulario, siempre que éste tenga method=”GET” 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/>”; } 2
    • Uso de formularios Daniel Santiago 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>"; 3
    • Uso de formularios Daniel Santiago 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”. 4
    • Uso de formularios Daniel Santiago 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”: 5
    • Uso de formularios Daniel Santiago 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). 6
    • Uso de formularios Daniel Santiago 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). 7