Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
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
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>
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
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
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>
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>
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
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>
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>
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
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>
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>
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>
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>
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
Botones Datos procedentes de botones <FORM action="documento.php"> <INPUT type="submit" name="b1" value="enviar"> <INPUT type="reset" name="b2" value="borrar"> <INPUT type="button" name="b3" value="acción"> <BR> <INPUT type="image" name="b4" value="imagen" src="correcto.png"> <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>
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>
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
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>
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] => Array ( [0] => v1 [1] => v3 [2] => v5 ) ) </PRE>
Á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>
Á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 ( ) </PRE> [comentario] => Escribe aquí tus comentarios
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>
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>
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>
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>
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
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>
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
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 expĺıcita, mediante la función session start() De forma impĺı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 ĺı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 expĺıcita con la función session destroy()
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>
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>
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();?>