Interacción con formularios HTML.

Anuncio
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
Descargar