PHP: Interacción con HTML Francisco J. Martı́n Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Metodologı́a de la Programación PHP: Interacción con HTML Variables En algunas ocasiones es necesario saber si una variable tiene un valor asignado o no, para ello utilizamos la instrucción isset() Intentar utilizar una variable que no tenga valor asignado puede dar lugar a errores inesperados La instrucción isset() recibe como argumento una variable y devuelve TRUE si la variable está definida y FALSE si no lo está Si queremos prescindir de una variable, podemos eliminarla utilizando la instrucción unset() Esta instrucción recibe como argumento la variable que se quiere eliminar Si $A es un array asociativo entonces unset($A) elimina dicho array y unset($A[’clave’]) elimina un elemento del array Metodologı́a de la Programación PHP: Interacción con HTML Interacción con formularios Con PHP se pueden generar páginas Web dinámicas a partir de información proporcionada por el usuario La forma natural de proporcionar información a través de páginas Web es mediante formularios Para que un documento PHP reciba la información procedente de un formulario es necesario indicarlo como acción asociada a dicho formulario Envio de datos a un documento PHP <FORM action="documento.php"> Usuario: <INPUT type="text" name="usuario" value="id" size="8" maxlength="16"> <BR> Clave: <INPUT type="password" name="clave" size="8"> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Interacción con formularios En función del método de envı́o utilizado en el formulario, los datos llegan de distinta forma al documento PHP Si el método de envı́o es get, entonces los datos del formulario se almacenan en el array asociativo $ GET Si el método de envı́o es post, entonces los datos del formulario se almacenan en el array asociativo $ POST Si se envı́an ficheros desde el formulario (y por tanto el método de envı́o es post), entonces dichos ficheros se almacenan en el array asociativo $ FILES El método de envı́o por defecto es get Cada control activo del formulario tiene una entrada en el array asociativo correspondiente, en la que la clave es el valor de atributo name de dicho control El valor sólo se envı́a si se incluye el atributo name Si varios controles activos tienen el mismo valor del atributo name, entonces sólo se envı́a el último de ellos Sólo se recogen los datos del formulario desde el que se realiza el envı́o Metodologı́a de la Programación PHP: Interacción con HTML Interacción con formularios Es usual que un documento PHP sea la acción asociada a los formularios contenidos en el propio documento Para saber cuando el documento PHP es llamado como acción de un formulario se utiliza la función isset() sobre las variables procedentes del formulario Metodologı́a de la Programación PHP: Interacción con HTML Interacción con formularios Fichero bienvenida.php <HTML> <HEAD> <TITLE>Bienvenido a mi sitio Web</TITLE> </HEAD> <BODY> <?php if (isset($_POST[boton]) && $_POST[boton] == "datos") { echo "<H3>Bienvenido $_POST[nombre] $_POST[apellidos]</H3>"; } ?> <H1>Acceso de usuario</H1> <FORM action="bienvenida.php" method="post"> Nombre: <INPUT type="text" name="nombre"> <BR> Apellidos: <INPUT type="text" name="apellidos"> <BR> <INPUT type="submit" name="boton" value="datos"> </FORM> </BODY> </HTML> Metodologı́a de la Programación PHP: Interacción con HTML Interacción con formularios Consideraremos el siguiente documento PHP genérico que recoge los datos de un formulario y los muestra de forma ordenada Fichero documento.php <HTML> <HEAD> <TITLE>Documento PHP de respuesta</TITLE> </HEAD> <BODY> Variable $_GET: <PRE> <?php print_r($_GET) ?> </PRE> Variable $_FILES: <PRE> <?php print_r($_FILES) ?> </PRE> </BODY> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: campos de texto El valor enviado por un formulario correspondiente a un campo de texto es el texto que contiene en el momento del envı́o Si el usuario no modifica el campo de texto entonces el valor enviado será el valor del atributo value Si el campo de texto está vacı́o, el valor enviado será la cadena vacı́a Aunque no se ve en el navegador, el valor de un campo de texto de tipo contraseña se envı́a como cualquier otro Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: campos de texto Datos procedentes de campos de texto <FORM action="documento.php"> Usuario: <INPUT type="text" name="usuario" value="id" size="8" maxlength="16"> <BR> Clave: <INPUT type="password" name="clave" size="8"> <BR> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: campos de texto Después de modificar los campos de texto y enviar el formulario, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de campos de texto Variable $_GET: <PRE> Array ( [usuario] => fmartin [clave] => contraseña ) </PRE> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de opciones El valor enviado por un formulario correspondiente a una selección de opciones es el valor del atributo value indicado en los controles que se hayan seleccionado Sólo se envı́a la información de los controles seleccionados Si no se indica un valor para el atributo value, el valor que se envı́a es on Si no se indican distintos valores para las opciones de una selección de tipo radio, entonces el valor enviado será siempre on y no servirá para distinguir la opción elegida Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de opciones Datos procedentes de selección de opciones <FORM action="documento.php"> Sexo: <INPUT type="radio" name="sexo" value="hombre"> Hombre <BR> <INPUT type="radio" name="sexo" value="mujer"> Mujer <BR> Edad: <INPUT type="radio" name="edad"> Menor de 18 <BR> <INPUT type="radio" name="edad"> Mayor de 18 <BR> Aficiones: <INPUT type="checkbox" name="hobby1" value="musica"> Música <BR> <INPUT type="checkbox" name="hobby2"> Cine <BR> <INPUT type="checkbox" name="hobby3"> Lectura <BR> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de opciones Después de seleccionar las opciones Hombre, Mayor de 18, Música y Cine, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de selección de opciones Variable $_GET: <PRE> Array ( [sexo] => hombre [edad] => on [hobby1] => musica [hobby2] => on ) </PRE> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: campos ocultos El valor enviado por un formulario correspondiente a un campo oculto es el valor del atributo value indicado en dicho campo Datos procedentes de campos ocultos <FORM action="documento.php"> Usuario: <INPUT type="text" value="id" name="usuario"> <BR> Clave: <INPUT type="password" name="clave"> <BR> <INPUT type="hidden" name="control" value="Campo oculto"> <BR> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: campos ocultos Al pulsar sobre el botón de envio de datos, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de campos ocultos Variable $_GET: <PRE> Array ( [control] => Campo oculto ) </PRE> Metodologı́a de la Programación PHP: Interacción con HTML Botones El valor enviado por un formulario correspondiente a un botón es el valor del atributo value, siempre y cuando se haya incluido el atributo name en el control correspondiente Sólo se envı́a la información correspondiente al botón que se ha pulsado De esta forma se puede distinguir qué botón se ha pulsado para enviar un formulario Para los botones gráficos de envı́o de datos (control INPUT de tipo image), el formulario también envı́a las coordenadas donde se encontraba el cursor al pulsarlo Si se ha incluido el atributo name="Nombre", entonces las coordenadas se envı́an como valores de las claves Nombre x y Nombre y Si no se ha indicado el atributo name, entonces las coordenadas se envı́an como valores de las claves x e y Metodologı́a de la Programación PHP: Interacción con HTML Botones Datos procedentes de botones <FORM action="documento.php"> <INPUT type="submit" name="b1" <INPUT type="reset" name="b2" <INPUT type="button" name="b3" <INPUT type="image" name="b4" src="correcto.png"> value="Enviar"> value="Borrar"> value="Acción"> <BR> value="Imagen" <BUTTON type="submit" name="b5" value="Enviar"> Enviar</BUTTON> <BUTTON type="reset" name="b6" value="Borrar"> Borrar</BUTTON> <BUTTON type="button" name="b7" value="Accion"> Acción</BUTTON> <BR> <BUTTON type="submit" name="b8" value="Imagen"> <IMG src="correcto.png"></BUTTON> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Botones Al pulsar sobre el botón gráfico de envio de datos, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de botones Variable $_GET: <PRE> Array ( [b4_x] => 11 [b4_y] => 9 [b4] => Imagen ) </PRE> Metodologı́a de la Programación PHP: Interacción con HTML Cuadro de selección El valor enviado por un formulario correspondiente a un cuadro de selección es un array asociativo que almacena indexados desde 0 los valores de las opciones seleccionadas Si se trata de un campo de selección múltiple, entonces el valor del atributo name en la etiqueta SELECT tiene que terminar en corchetes [] Si no se indican los corchetes [] en el valor del atributo name en la etiqueta SELECT, entonces sólo se envı́a el último valor seleccionado de la lista de opciones El atributo name en las opciones de selección no tiene ninguna utilidad Metodologı́a de la Programación PHP: Interacción con HTML Cuadro de selección Datos procedentes de un cuadro de selección <FORM action="documento.php"> Aficiones: <SELECT align="top" name="aficiones[]" size="3" multiple> <OPTION name="o1" value="v1">Música</OPTION> <OPTION name="o2" value="v2">Cine</OPTION> <OPTION name="o3" value="v3">Lectura</OPTION> <OPTION name="o4" value="v4">Maquetas</OPTION> <OPTION name="o5" value="v5">Fotografı́a</OPTION> <OPTION name="o6" value="v6">Informática</OPTION> </SELECT> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Cuadro de selección Al seleccionar las opciones Música, Lectura y Fotografı́a, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de un cuadro de selección Variable $_GET: <PRE> Array ( [aficiones] ( [0] [1] [2] ) ) </PRE> => Array => v1 => v3 => v5 Metodologı́a de la Programación PHP: Interacción con HTML Áreas de texto El valor enviado por un formulario correspondiente a un área de texto es el contenido de la etiqueta <TEXTAREA> En este caso se ignora el valor del atributo value Datos procedentes de un área de texto <FORM action="documento.php"> <TEXTAREA name="comentario" value="Otro valor" rows="5" cols="20"> Escribe aquı́ tus comentarios </TEXTAREA> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Áreas de texto Al pulsar sobre el botón gráfico de envio de datos, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de un área de texto Variable $_GET: <PRE> Array ( [comentario] => ) </PRE> Escribe aquı́ tus comentarios Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de ficheros Si no se indica la codificación de contenido enctype="multipart/form-data" en la etiqueta FORM, entonces el valor enviado por un formulario correspondiente a un campo de selección de fichero es el contenido de dicho campo (el nombre del fichero) Datos procedentes de una selección de ficheros <FORM action="documento.php"> Fichero: <INPUT type="file" name="fichero"> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de ficheros Al pulsar sobre el botón gráfico de envio de datos, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de una selección de ficheros Variable $_GET: <PRE> Array ( [fichero] => /home/fmartin/Personal/simpsons.jpg ) </PRE> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de ficheros Si se indica la codificación de contenido enctype="multipart/form-data" en la etiqueta FORM, entonces el valor enviado por un formulario correspondiente a un campo de selección de fichero es un array asociativo con el nombre, el tipo, la localización temporal en el servidor, el tamaño y un código de error, que se almacena en el array asociativo $ FILES Datos procedentes de una selección de ficheros <FORM action="documento.php" enctype="multipart/form-data"> Fichero: <INPUT type="file" name="fichero"> <INPUT type="submit"> </FORM> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de ficheros Al pulsar sobre el botón gráfico de envio de datos, el documento PHP genera el siguiente fragmento de código HTML Datos procedentes de una selección de ficheros Variable $_FILES: <PRE> Array ( [fichero] => Array ( [name] => simpsons.jpg [type] => image/jpeg [tmp_name] => /tmp/phpI9bsPQ [error] => 0 [size] => 175101 ) ) </PRE> Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de ficheros El fichero enviado se almacena en el servidor en la localización temporal indicada Dicho fichero deja de existir en cuanto se termina de enviar la respuesta al cliente Para acceder al contenido de dicho fichero se ha de utilizar la función PHP file get contents Para preservar el fichero enviado, hay que almacenar el contenido del fichero temporal en algún otro sitio Metodologı́a de la Programación PHP: Interacción con HTML Control INPUT: selección de ficheros Fichero contenido.php <HTML> <HEAD> <TITLE>Documento PHP de respuesta</TITLE> </HEAD> <BODY> El contenido del fichero que has enviado es: <BR> <PRE> <?php echo file_get_contents($_FILES["fichero"][tmp_name]); ?> </PRE> </BODY> Metodologı́a de la Programación PHP: Interacción con HTML Sesiones El registro de un usuario en una Web permite proporcionar a éste una versión personalizada de la página Web solicitada Las variables de registro (disponibles en $ GET o $ POST) sólo existen en el momento de establecer la comunicación con el servidor La comunicación de un navegador con el servidor Web es efimera, sólo se mantiene para una página Web cada vez Las sesiones permiten mantener la comunicación entre un navegador y el servidor Web para un conjunto de páginas Web Ası́ podemos personalizar todo un conjunto de páginas Web para un mismo usuario sin necesidad de pedirle identificación Metodologı́a de la Programación PHP: Interacción con HTML Sesiones Una sesión es una secuencia de comunicaciones sucesivas entre un navegador y un sitio Web a las que se les asigna un identificador común Para utilizar sesiones en PHP lo primero es inicializarlas De forma explı́cita, mediante la función session start() De forma implı́cita, registrando una variable en la sesión mediante la función session register(’miVariable’) Es conveniente que estas funciones aparezcan al comienzo del fichero, antes de cualquier otra instrucción PHP, etiqueta HTML o lı́nea en blanco En ambos casos se crea una nueva sesión, si no existe, o se retoma la sesión actual Las variables de sesión se almacenan en $ SESSION La sesión termina Cuando se cierra el navegador en que se inició De forma explı́cita con la función session destroy() Metodologı́a de la Programación PHP: Interacción con HTML Sesiones Fichero sesion-0.php <?php session_register(’contador’); session_register(’usuario’); $_SESSION[’usuario’] = ’fmartin’; ?> <HTML> <HEAD> <TITLE>Inicio de sesión</TITLE> </HEAD> <BODY> <A HREF="sesion-1.php">Otro documento de sesión</A> </BODY> </HTML> Metodologı́a de la Programación PHP: Interacción con HTML Sesiones Fichero sesion-1.php <?php session_start(); $_SESSION[’contador’]++; ?> <HTML> <HEAD> <TITLE>Otro documento de sesión</TITLE> </HEAD> <BODY> <A HREF="sesion-1.php">Otro documento de sesión</A> <BR> <A HREF="sesion-2.php">Variables de sesión</A> </BODY> </HTML> Metodologı́a de la Programación PHP: Interacción con HTML Sesiones Fichero sesion-2.php <?php session_start(); ?> <HTML> <HEAD> <TITLE>Variables de sesión</TITLE> </HEAD> <BODY> <PRE> <?php print_r($_SESSION) ?> </PRE> <A HREF="sesion-2.php">Variables de sesión</A> </BODY> </HTML> <?php session_destroy(); ?> Metodologı́a de la Programación PHP: Interacción con HTML