Anda di halaman 1dari 10

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

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.

Formularios con GET


La forma ms utilizada para recoger informacin acerca de los usuarios es emplear formularios HTML. El siguiente cdigo muestra cmo recoger informacin: Ejemplo FormularioGET.php: <html> <head> <title>Formulario - Envo de datos con el mtodo GET</title> </head> <body> <p>Introduzca sus datos personales: </p> <form name="form1" method="GET" action="FormularioGET2.php"> <table width="50%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="24%">Nombre</td> <td width="76%"><input name="nombre" type="text" id="nombre"></td> </tr> <tr> <td>Apellidos</td> <td><input name="apellidos" type="text" id="apellidos"></td> </tr> <tr> <td>Correo</td> <td><input name="correo" type="text" id= "correo"></td> </tr> <tr> <td>Estado civil </td>

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

<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

UF 1: Lenguaje de guin de servidor

Ejemplo FormularioGET2.php: <html> <head>

<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

UF 1: Lenguaje de guin de servidor

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.

Paso de informacin con GET


Si miris en la barra de direccin de los navegadores cuando visitis pginas web sobre noticias o carritos de la compra, en la URL van apareciendo variables que tienen que ver con los distintos mens que existen en la web. El siguiente ejemplo muestra una pequea revista digital escrita en pocas lneas y en una sola pgina web que cambia sus noticias eligiendo las distintas opciones del men. Ejemplo FormRevista.php: <?php $menu = array (1 => "Editorial", 2 => "Opinin", 3 => "Regional", 4 => "Nacional"); echo ("<h3>Revista Digital</h3>"); echo ("<h4>MENU</h4>"); foreach ($menu as $indice => $valor){ echo("<a href=\"FormRevista.php?menu=$indice\">$valor</a><br>"); } if (isset($_GET["menu"])){ echo ("<h4>NOTICIAS</h4>"); switch ($_GET["menu"]){ case 1: echo ("Editorial"); break; case 2: echo ("Opinin"); break; case 3: echo ("Regional"); break; case 4: echo ("Nacional"); break; default: echo ("Noticias de Portada"); break;

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

} } else{ } ?> echo ("<h4>Tienes que elegir una opcin</h4>");

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

UF 1: Lenguaje de guin de servidor

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>"; } ?>

Envo de archivos $_FILES


Los campos de tipo file permiten el envo de archivos a travs de formularios. La variable sper-global $_FILES recoge mediante una matriz los ficheros enviados. Importante: PHP no reconoce ni procesa ficheros que hayan sido enviados mediante GET. Cuando use un formulario desde el cual el usuario pueda enviar ficheros al servidor, se tendr que usar siempre el mtodo POST. El diseo de un formulario que permita el envo de ficheros exige el incluir en el mismo un campo de tipo file e incluir en el comando de definicin del formulario el parmetro ENCTYPE indicando al formulario que se transferirn datos en archivos. Adems al formulario debemos aadirle un campo oculto de nombre MAX_FILE_SIZE, al cul le daremos el valor en bytes del tamao mximo del archivo a descargar. <FORM ENCTYPE=multipart/form-data ACTION=RecibirFichero.php METHOD=POST> <INPUT TYPE=hidden name=MAX_FILE_SIZE value=100000> <INPUT TYPE=file name=archivo> <INPUT TYPE=submit value=Enviar archivo> </FORM>

ASIX Mdulo 9

UF 1: Lenguaje de guin de servidor

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:

PROPIEDAD error name tmp_name

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

UF 1: Lenguaje de guin de servidor

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

UF 1: Lenguaje de guin de servidor

$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

UF 1: Lenguaje de guin de servidor

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

Anda mungkin juga menyukai