Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Formularios
La verdadera potencia del lenguaje reside en la aplicacin de las tcnicas aprendidas a travs de varias pginas Web, pasando informacin de unas a otras.
Argumentos GET
Los argumentos GET pasan la informacin como parte de la URL. Cuando se utilice esta forma de trabajar, las parejas de variable / valor podrn verse en la casilla de direccin del navegador. Ejemplo: formulario.php?variable1=Hola Mundo&variable2 = 1234 El array $_GET es considerado en PHP una variable sper-global. sta almacena todas las variables pasadas entre pginas mediante el mtodo GET. Para extraer el valor de una variable pasada por este mtodo slo hay que escribir $_GET ["nombre_variable"] en la pgina que recibe los datos.
ASIX Mdulo 9
<td> <select name="estado" id="estado"> <option value="Soltero">Soltero</option> <option value="Casado">Casado</option> <option value="Divorciado">Divorciado</option> <option value="Viudo">Viudo</option> </select> </td> </tr> <tr> <td>Nmero de hijos:</td> <td> 0 <input name="hijos" type="radio" value="0" checked> 1 <input name="hijos" type="radio" value="l"> 2 <input name="hijos" type="radio" value="2"> 3 <input name="hijos" type="radio" value="3"> </td> </tr> <tr> <td>Gustos</td> <td> Informtica <input type="checkbox" name="gustos[]" value="Informtica"> Buceo <input type="checkbox" name="gustos[]" value="Buceo"> Magia <input type="checkbox" name="gustos[]" value="Magia"> Jazz <input type="checkbox" name="gustos[]" value="Jazz"> </td> </tr> <tr> <td><input type="submit" name="submit" value="Enviar"></td> <td> </td> </tr> </table> </form> </body> </html> Hay varios aspectos a tener en cuenta. Lo primero es que el apartado action de la etiqueta <FORM> contiene la pgina web a la que se enviarn los datos y el apartado method permite seleccionar el mtodo de envo; por ahora utilizaremos el mtodo GET. La pgina FormularioGET2.php recoge la informacin del formulario y la imprime en pantalla utilizando un bucle foreach a la variable sper-global $_GET.
ASIX Mdulo 9
<title>Formulario - Recogida de datos con el mtodo GET</title> </head> <body> <?php echo "<h3>Salida de datos mediante un recorrido:</h3>"; foreach ($_GET as $indice => $valor){ echo "$indice: $valor<br>"; } echo "<h3>Salida de datos mediante llamadas a las variables:</h3>"; echo "Nombre: ".$_GET ["nombre"]."<br>"; echo "Apellidos: ".$_GET ["apellidos"]."<br>"; echo "Correo: ".$_GET ["correo"]."<br>"; echo "Estado: ".$_GET ["estado"]."<br>"; echo "Hijos: ".$_GET ["hijos"]."<br>"; echo "Gustos: ".$_GET ["gustos"]."<br>"; ?> </body> </html> Para sacar los datos hemos utilizado un bucle que busca todos los valores dentro de $_GET. Otra forma de hacerlo es imprimir los datos uno a uno si sabemos el nombre de las variables definidas en el formulario anterior. Existen en el formulario varias tcnicas de recogida de informacin. Los cuadros de texto, que permiten escribir valores alfanumricos, lista de seleccin y botones de opcin, en dnde podemos elegir una de las opciones existentes y casillas de verificacin que permiten elegir 0 o ms opciones existentes. Todas estas partes del formulario tienen una variable asociada que puede buscarse en $_GET. El nico mtodo que puede plantear algn problema es el que utiliza casillas de verificacin. Puesto que podemos elegir varias opciones, stas son enviadas como un array. Para que los valores de las casillas de verificacin sean enviados como array hay que declararlas en el formulario como tal, escribiendo dos smbolos de corchetes en la propiedad name asociada a las casillas. Por ejemplo: <input type=checkbox name="gustos[]" value="Informtica">
ASIX Mdulo 9
La pgina FormularioGET2.php queda de esta forma, para que pueda recibir los gustos de los usuarios: <?php //Cdigo anterior echo "<h3>Gustos de los usuarios mediante un recorrido:</h3>"; $gustos = $_GET["gustos"]; foreach ($gustos as $indice => $valor){ echo "$indice: $valor<br>"; }?> Ahora es capaz de recuperar los gustos de los usuarios e imprimirlos en pantalla. Para esto hemos aadido un bucle nuevo que inspecciona los valores enviados al array $gustos.
ASIX Mdulo 9
En el array $menu se cargan los distintos valores que podemos ir seleccionando. En la actualidad estos valores se suelen extraer de una base de datos. Para mostrar el men se hace un bucle donde se extraen todos los valores e ndices del array y se ponen como valores en los enlaces. echo("<a href=\"FormRevista.php?menu=$indice\">$valor</a><br>"); Los enlaces siempre se dirigen a la pgina principal, pero con un valor distinto en la variable men. La segunda parte de la web es una eleccin mltiple mediante la estructura switch(), donde en funcin del valor de la variable men pasada por GET, se eligen unas noticias u otras.
Argumentos POST
La utilizacin del mtodo GET es totalmente insegura, porque no hay forma de ocultar datos privados en la direccin web, tales como la contrasea de entrada o el nmero de cuenta bancaria. El mtodo POST arregla estos problemas, siendo el preferido de los desarrolladores. Este mtodo es tan sencillo como cambiar en el formulario el mtodo de envo de datos: Ejemplo FormularioPOST.php: <form name="form1" method="POST" action="FormularioPOST2.php"> En cuanto a la recuperacin de los datos, tambin se debe cambiar el nombre de la variable sper-global $_GET por $_POST de esta manera:
ASIX Mdulo 9
Ejemplo FormularioPOST2.php: <?php echo "<h3>Salida de datos mediante un recorrido:</h3>"; foreach ($_POST as $indice => $valor){ echo "$indice: $valor<br>"; } echo "<h3>Salida de datos mediante llamadas variables:</h3>"; echo "Nombre: ".$_POST ["nombre"]."<br>"; echo "Apellidos: ".$_POST ["apellidos"]."<br>"; echo "Correo: ".$_POST ["correo"]."<br>"; echo "Estado: ".$_POST ["estado"]."<br>"; echo "Hijos: ".$_POST ["hijos"]."<br>"; echo "Gustos: ".$_POST ["gustos"]."<br>";
las
echo "<h3>Gustos de los usuarios mediante un recorrido:</h3>"; $gustos = $_POST["gustos"]; foreach ($gustos as $indice => $valor){ echo "$indice: $valor<br>"; } ?>
ASIX Mdulo 9
Cuando el formulario es enviado, PHP detectar automticamente que se est descargando un archivo y lo colocar en un directorio temporal en el servidor. Dicho directorio ser que el que est indicado en el archivo de configuracin php.ini, o en su defecto en el directorio temporal del sistema. Cuando PHP detecta que se est descargando un archivo crea varias variables con el prefijo del nombre del archivo pero con distintas terminaciones. $_FILES['archivo']['error'] $_FILES['archivo']['name'] $_FILES['archivo']['tmp_name'] $_FILES['archivo']['type'] $_FILES['archivo']['size']
Si el proceso de descarga no ha sido correcto la variable archivo tomar el valor none y size ser 0, y si el proceso ha sido correcto, pero la variable $_FILES['archivo'] ['size'] da 0, quiere decir que el archivo a descarga supera el tamao mximo indicado por MAX_FILE_SIZE. Una vez descargado el archivo, lo primero que debemos hacer es moverlo a otro lugar, pues sino se hace nada con l, cuando acabe la ejecucin de la pgina se borrar. Las matrices que manejan los ficheros son asociativas de dos ndices. El primero (el de las filas) contiene el nombre que se ha dado en el formulario a cada campo de fichero (puede haber ms de uno en un mismo formulario). Dentro de cada fila encontramos otro ndice con las propiedades del fichero, como el nombre, tamao, tipo Las propiedades que definen un archivo enviado al servidor son las siguientes:
CONTENIDO Indica si se ha producido un error en el envo del fichero. Si todo ha ido correctamente, esta propiedad almacena el valor 0. Si se ha producido un error, el valor ser diferente de 0. El nombre del archivo, tal como lo tiene almacenado el usuario en su ordenador. Es un nombre temporal que usa PHP para la gestin provisional del archivo, hasta que lo almacene en el disco del servidor, lo enve por correo electrnico a donde corresponda, o cualquier otra accin que le hayamos programado al script. Almacena el tipo de fichero que se ha enviado. Puede ser una imagen, audio, vdeo, texto plano, etc. El peso del archivo en bytes.
type size
ASIX Mdulo 9
Ejemplo enviarFichero1.php: <html> <head> <title>Ficheros - S_FILES</title> </head> <body> <form action="enviarFichero2.php" method="post" name="f_prof" id="f_prof" enctype="multipart/form-data"> <h3>Fichero:</h3> <input type="hidden" name="MAX_FILE_SIZE" value="100000"> <input type="file" name="fichero" id="fichero"> <input type="submit" value="ENVIAR" name="ok" id="ok"> </form> </body> </html> Ejemplo enviarFichero2.php: <?php foreach ($_FILES["fichero"] as $clave => $valor){ echo ("Propiedad: $clave ---- Valor: $valor<br>"); }
?> En este script se emplea un bucle foreach para recorrer cada uno de los elementos de una matriz que, a su vez, es el elemento fichero de la matriz $_FILES. Ejemplo enviarFichero.php: <?php if(isset($_POST['enviar'])){ if($_FILES['archivo']['name'] != "" && $_FILES['archivo'] ['size'] != 0){ echo "Nombre: ". $_FILES['archivo']['name']."<br>"; echo "Tamao: ". $_FILES['archivo']['size']." bytes <br>"; echo "Fich. Tmp.: ".$_FILES['archivo']['tmp_name']."<br>"; echo "Tipo: ". $_FILES['archivo']['type']."<br>"; echo "Error: ". $_FILES['archivo']['error']."<br>"; if(!is_dir("descarga/")){//Comprueba si existe el directorio mkdir("descarga/", 0700); //Crea el directorio } $carpetaDestino="descarga/".$_FILES['archivo']['name']; if(move_uploaded_file($_FILES['archivo']['tmp_name'], $carpetaDestino)){ echo "<h2>El archivo se ha copiado a la carpeta de destino</h2>"; }else{ echo "<h2>No se ha podido copiar el archivo a la carpeta de destino</h2>"; } $tipo=$_FILES['archivo']['type']; $barra=strpos($tipo, "/"); $cadena_extraida=substr($tipo,0,$barra);
8
ASIX Mdulo 9
$extension="image"; if (strcmp($extension,$cadena_extraida) == 0){ echo "<img src='$carpetaDestino' width='200' height='200'>"; } }elseif($_FILES['archivo']['name'] != "" && $_FILES['archivo'] ['size'] == 0){ echo "<h2>El tamao del archivo es superior al mximo</h2>"; }else{ echo "<h2>No ha elegido un archivo para mover</h2>"; } }//Fin de isset else{ ?> <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> <h3>Archivo a descargar</h3> <input type="hidden" name="MAX_FILE_SIZE" value="150000"> <input type="file" name="archivo" size="35"> <input type="submit" name="enviar" value="Aceptar"> </form> <?php } ?> En este script se recoge un archivo del formulario y se muestra los datos del archivo por pantalla, si el tamao supera el mximo mostrar un error, si no se carga ningn archivo tambin mostrar un error, si la carga del archivo se realiza con xito y no se supera el tamao se mostrarn los datos del archivo y en caso de que sea una imagen, se mostrar la imagen. Se puede observar una nueva funcin llamada move_uploaded_file(), esta funcin se encarga de mover un archivo cargado a una nueva ubicacin. bool move_uploaded_file (string $nombre_archivo , string $destino) Realiza un chequeo para asegurar que el archivo indicado por nombre_archivo sea un archivo cargado vlido. Si el archivo es vlido, ser movido al nombre de archivo dado por destino. nombre_archivo - El nombre del archivo cargado. Destino - El destino del archivo a mover.
Si nombre_archivo no es un archivo cargado vlido, entonces no se tomar ninguna accin, y move_uploaded_file() devolver FALSE. Si nombre_archivo es un archivo cargado vlido, pero no puede ser movido por alguna razn, no se tomar ninguna accin, y move_uploaded_file() devolver FALSE. Si el archivo de destino ya existe ser sobrescrito.
ASIX Mdulo 9
Variables sper-globales
Las arrays sper-globales sirven para almacenar los valores que se pasan de unas pginas a otras, se almacenan en el ordenador del usuario o en el servidor. En PHP 5 el uso de estas variables se hace obligatorio para recuperar todos los valores. Las variables a utilizar son:
$_GET: Almacena las variables pasadas por GET de un formulario. $_POST: Almacena las variables pasadas por POST de un formulario. $_COOKIE: Guarda los valores que estn almacenados en cookies. $_SESSlON: Guarda las variables que se pasan entre sesiones. $_SERVER: Contiene numerosos valores relativos al servidor. $_FILES: Almacena los archivos que enviemos a travs de un formulario.
10