Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Mdulo 4
PHP manejo de formularios
Lo ms importante tener en cuenta cuando se trata de formularios HTML y PHP es que cualquier elemento
de un formulario en una pgina HTML de forma automtica est a disposicin de sus scripts PHP.
Ejemplo
El ejemplo siguiente contiene un formulario HTML con dos campos de entrada y un botn de submit:
<html>
<body>
</body>
</html>
Cuando un usuario rellena el formulario de arriba y haga clic en el botn de envo, los datos del formulario se
enva a un archivo PHP, llamado "bienvenido.php":
</body>
</html>
Formulario de Validacin
La entrada del usuario debe ser validado en el navegador siempre que sea posible (las secuencias de
comandos de cliente). La validacin del navegador es ms rpido y reduce la carga del servidor.
Usted debera considerar la validacin en el servidor, si la entrada del usuario se inserta en una base de
datos. Una buena manera de validar un formulario en el servidor es para enviar el formulario a s mismo, en
vez de saltar a una pgina diferente. Luego, el usuario recibir los mensajes de error en la misma pgina que
la forma. Esto hace ms fcil para descubrir el error.
La variable $_GET
La variable predefinida $ _GET se utiliza para recoger los valores en un formulario con method = "get"
La informacin enviada desde un formulario con el mtodo GET es visible para todos (que se muestra en la
barra de direcciones del navegador) y tiene lmites en la cantidad de informacin a enviar.
Ejemplo
<form action="bienvenido.php" method="get">
Name: <input type="text" name="fnombre" />
Age: <input type="text" name="edad" />
<input type="submit" />
</form>
Cuando el usuario hace clic en el botn "Enviar", la URL enviada al servidor podra ser algo como esto:
http://www.localhost.com/bienvenido.php?fname=Pedro&edad=37
El "bienvenido.php" archivo ahora puede utilizar la variable $ _GET para recoger los datos del formulario (los
nombres de los campos del formulario ser automticamente las claves del matriz $ _GET):
Cuando se usa method = "get" en los formularios HTML, todos los nombres de las variables y los valores se
muestran en la URL.
Nota: Este mtodo no debe usarse al enviar contraseas u otra informacin confidencial!
Sin embargo, debido a que las variables se muestran en la URL, es posible marcar la pgina. Esto puede ser
til en algunos casos.
Nota: El mtodo get no es adecuado para los valores de variables muy grandes. No debe utilizarse
con valores superiores a 2000 caracteres.
La variable $_POST
La variable predefinida $ _POST se usa para recoger los valores de un formulario enviado con method =
"post".
La informacin enviada desde un formulario con el mtodo POST es invisible a los dems y no tiene lmites
en la cantidad de informacin a enviar.
Nota: Sin embargo, hay un nio de 8 Mb de tamao mximo para el mtodo POST, por defecto (se
puede cambiar mediante el establecimiento de la post_max_size en el archivo php.ini).
Ejemplo <form action="bienvenido.php" method="post">
Nombre: <input type="text" name="fnombre" />
Edad: <input type="text" name="edad" />
<input type="submit" />
</form>
http://www.localhost.com/bienvenido.php
El "bienvenido.php" archivo ahora puede utilizar la variable $ _POST para recoger los datos del formulario
(los nombres de los campos del formulario ser automticamente las claves del matriz $ _POST):
La informacin enviada desde un formulario con el mtodo POST es invisible a los dems y no tiene lmites
en la cantidad de informacin a enviar.
Sin embargo, debido a que las variables no se muestran en la URL, no es posible marcar la pgina.
Ejemplo
Bienvenido <?php echo $_POST["fnombre"]; ?>!<br />
Tienes <?php echo $_POST["edad"]; ?> aos.
Estas dos funciones se utilizan para crear funciones, encabezados, pies de pgina, o elementos que se
pueden reutilizar en varias pginas.
Del lado del servidor include ahorra mucho trabajo. Esto significa que usted puede crear un encabezado
estndar, pie de pgina o un archivo de men para todas sus pginas web. Cuando la cabecera debe ser
actualizada, slo se puede actualizar el archivo de inclusin, o cuando se agrega una nueva pgina a su sitio,
usted puede simplemente cambiar el archivo de men (en lugar de actualizar los enlaces en todas sus
pginas web).
Si ocurre un error, la funcin include () genera una advertencia, pero el guin seguir la ejecucin.
Ejemplo 1
Suponga que tiene un archivo de cabecera estndar, llamado "header.php". Para incluir el archivo de
encabezado en una pgina, utilice la funcin include ():
<html>
<body>
</body>
</html>
Ejemplo 2
Supongamos que tenemos un archivo de men estndar, llamado "menu.php", que se debe utilizar en todas
las pginas:
<a href="/index.php">Inicio</a>
<a href="/tutoriales.php">Tutoriales</a>
<a href="/referencias.php">Referencias</a>
<a href="/ejemplos.php">Ejemplos</a>
<a href="/acerca.php">Acerca de la pagina</a>
<a href="/contacto.php">Contactese</a>
Todas las pginas en el sitio web debe incluir el archivo de men. As es como se puede hacer:
<html>
<body>
<div class="menuizq">
<?php include("menu.php"); ?>
</div>
<h1>Bienvenido a mi pagina!.</h1>
<p>Algun texto.</p>
</body>
</html>
Si nos fijamos en el cdigo fuente de la pgina anterior (en un navegador), que se ver as:
<html>
<body>
<div class="menuizq">
<a href="/index.php">Inicio</a>
<a href="/tutoriales.php">Tutoriales</a>
<a href="/referencias.php">Referencias</a>
<a href="/ejemplos.php">Ejemplos</a>
<a href="/acerca.php">Acerca de la pagina</a>
<a href="/contacto.php">Contactese</a>
</div>
<h1>Bienvenido a mi pagina!.</h1>
<p>Algun texto.</p>
</body>
</html>
Si ocurre un error, la funcin include () genera una advertencia, pero el guin seguir la ejecucin. El require
() genera un error fatal, y el script se detendr.
<html>
Ejemplo de error funcin include () <body>
<?php
include("error.php");
echo "Hola Mundo!";
?>
</body>
</html>
Mensaje de error:
Warning: include(error.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
Hola Mundo!
Tenga en cuenta que la orden echo es ejecutado! Esto se debe a una advertencia de no detener la ejecucin
del script.
<html>
<body>
<?php
require("error.php");
echo "Hola Mundo!";
?>
</body>
</html>
Mensaje de error:
Warning: require(error.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5
La declaracin de eco no se ejecuta, ya que la ejecucin del script se detuvo despus de que el error fatal.
Se recomienda utilizar la funcin require () en lugar de include (), ya que los scripts no debe continuar
despus de un error.
Manejos de Archivos
Abrir un archivo
La funcin fopen () se utiliza para abrir archivos en PHP.
El primer parmetro de esta funcin contiene el nombre del archivo que se abrir y el segundo parmetro
especifica el modo en que el archivo debe ser abierto:
<html>
<body>
<?php
$file=fopen("bienvenido.txt","r");
?>
</body>
</html>
Modos Descripcin
R Slo lectura. Comienza al principio del archivo.
r+ Lectura / Escritura. Comienza al principio del archivo.
Escriba solamente. Se abre y se borra el contenido de archivo, o crea un nuevo archivo
W
si no existe.
Lectura / Escritura. Se abre y se borra el contenido de archivo, o crea un nuevo archivo
w+
si no existe.
Un Anexar. Se abre y se escribe en el final del archivo o crea un nuevo archivo si no existe.
a+ Leer / Aadir. Conserva el contenido del archivo por escrito al final del archivo.
Escriba solamente. Crea un nuevo archivo. Devuelve FALSE y un error si el archivo ya
X
existe.
Lectura / Escritura. Crea un nuevo archivo. Devuelve FALSE y un error si el archivo ya
x+
existe.
Ejemplo
El siguiente ejemplo se genera un mensaje si la funcin fopen () no es capaz de abrir el archivo especificado:
<html>
<body>
<?php
$file=fopen("benvenido.txt","r") or exit("Error al abrir archivo!");
?>
</body>
</html>
Cierre de un archivo
fclose($file);
?>
El feof () comprueba si el "fin de archivo" (EOF) ha sido alcanzado. El feof () es til para recorrer a travs de
los datos de longitud desconocida.
Nota: Despus de una llamada a esta funcin, el puntero de archivo se ha movido a la siguiente
lnea.
Ejemplo
El siguiente ejemplo lee un archivo lnea por lnea, hasta que al final del archivo que se
alcanza:
<?php
$file = fopen("bienvenido.txt", "r") or exit("Error al abrir!");
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>
Nota: Despus de una llamada a esta funcin, el puntero del archivo se mueve al siguiente carcter.
Ejemplo
El siguiente ejemplo lee un carcter del archivo por su carcter, hasta el final del archivo se llega a:
<?php
$file=fopen("benvenido.txt","r") or exit("Error al abrir!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
<html>
<body>
</body>
</html>
El atributo enctype de la etiqueta <form> especifica qu tipo de contenido que se utilizar al enviar
el formulario. "Multipart / form-data" se utiliza cuando se requiere un formulario de datos binarios,
tales como el contenido de un archivo, para ser cargado.
El type = "file" atributo de la etiqueta <input> especifica que la entrada debe ser procesada como un
archivo. Por ejemplo, cuando se ve en un navegador, habr un botn de exploracin junto al campo
de entrada.
Nota: Permitir a los usuarios subir archivos es un gran riesgo de seguridad. Slo permita que los
usuarios de confianza para llevar a cabo la carga de archivos.
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Subir: " . $_FILES["file"]["nombre"] . "<br />";
echo "Tipo: " . $_FILES["file"]["tipo"] . "<br />";
echo "Tamao: " . ($_FILES["file"]["tamao"] / 1024) . " Kb<br />";
echo "Guardado en: " . $_FILES["file"]["tmp_nombre"];
}
?>
Al utilizar el global de PHP array $ _FILES puede cargar los archivos desde un equipo cliente con el servidor
remoto.
El primer parmetro es el nombre del formulario de entrada y el segundo ndice puede ser "nombre", "tipo",
"tamao", "tmp_name" o "error". De esta manera:
Esta es una manera muy sencilla de subir archivos. Por razones de seguridad, se debe aadir las restricciones
a lo que el usuario est autorizado a cargar.
<?php
if ((($_FILES["file"]["tipo"] == "image/gif")
|| ($_FILES["file"]["tipo"] == "image/jpeg")
|| ($_FILES["file"]["tipo"] == "image/pjpeg"))
&& ($_FILES["file"]["tamao"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["nombre"] . "<br />";
echo "Type: " . $_FILES["file"]["tipo"] . "<br />";
echo "Size: " . ($_FILES["file"]["tamao"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_nombre"];
}
}
else
{
echo "Archivo invalido";
}
?>
Nota: Para IE reconozca los archivos jpg el tipo debe ser pjpeg, para Firefox debe ser JPEG.
Los archivos temporales de copiado desaparece cuando el programa termina. Para guardar el archivo subido
tenemos que copiarlo en una ubicacin diferente:
<?php
if ((($_FILES["file"]["tipo"] == "image/gif")
|| ($_FILES["file"]["tipo"] == "image/jpeg")
|| ($_FILES["file"]["tipo"] == "image/pjpeg"))
&& ($_FILES["file"]["tamao"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["nombre"] . "<br />";
echo "Type: " . $_FILES["file"]["tipo"] . "<br />";
echo "Size: " . ($_FILES["file"]["tamao"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_nombre"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["nombre"]))
{
echo $_FILES["file"]["nombre"] . " ya existe. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_nombre"],
"upload/" . $_FILES["file"]["nombre"]);
echo "Guardado en: " . "subidos/" . $_FILES["file"]["nombre"];
}
}
}
else
{
echo "Archivo Invalido";
}
?>
Nota: En este ejemplo se guarda el archivo en una nueva carpeta llamada "carga".