Formularios
Con PHP
Los Formularios
no forman parte de PHP, sino del lenguaje estándar de Internet,
HTML. Vamos a dedicar en este capítulo algunas líneas al
HTML, para entrar posteriormente a tratarlos con PHP.
Todo formulario comienza con la
etiqueta <FORM ACTION="lo_que_sea.php" METHOD="post/get">
. Con . Con ACTION indicamos el script que va procesar la información
que recogemos en el formulario, mientras que METHOD
nos indica |
|
si el usuario del formulario va ha
enviar datos ( post ) o recogerlos ( get ). La etiqueta <FORM> indica
el final del formulario.
A partir de la etiqueta <FORM>
vienen los campos de entrada de datos que pueden ser:
Cuadro de texto:
<input
type="text" name="nombre" size="20" value="jose">
Cuadro de texto con barras de
desplazamiento:
<textarea
rows="5" name="descripcion" cols="20">Es de color rojo</textarea>
Casilla de verificación:
<input
type="checkbox" name="cambiar" value="ON">
Botón de opción:
<input
type="radio" value="azul" checked name="color">
Menú desplegable:
<select
size="1" name="dia">
<option
selected value="lunes">lunes</option>
<option>martes</option>
<option
value="miercoles">miércoles</option>
</select>
Boton de comando:
<input
type="submit" value="enviar" name="enviar">
Campo oculto:
<input
type="hidden" name="edad" value="55">
Este último tipo de campo
resulta especialmente útil cuando que remos pasar datos ocultos
en un formulario.
Como habrás
observado todos lo tipos de campo tienen un modificador llamado name
, que no es otro que el nombre de la variable con la cual recogeremos los
datos en el script indicado por el modificador ACTION de la etiqueta FORM
FORM , con value establecemos un valor por defecto.
A continuación veamos un
ejemplo, para lo cual crearemos un formulario en HTML como el que sigue
y lo llamaremos formulario.htm : |
|
<HTML>
<BODY>
<FORM METHOD="post"
ACTION="mis_datos.php">
<input type="hidden"
name="edad" value="55">
<p>Tu nombre
<input type="text" name="nombre" size="30" value="jose"></p>
<p>Tu sistema
favorito
<select
size="1" name="sistema">
<option
selected value="Linux">Linux</option>
<option
value="Unix">Unix</option>
<option
value="Macintosh">Macintosh</option>
<option
value=&qmargin-left: 75"><option value="Windows">Windows</option>
</select></p>
<p>¿Te
gusta el futbol ? <input type="checkbox" name="futbol" value="ON"></p>
<p>¿Cual
es tu sexo?</p>
<blockquote>
<p>Hombre<input
type="radio" value="hombre" checked name="sexo"></p>
<p>Mujer
<input type="radio" name="sexo" value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea
rows="5" name="aficiones" cols="28"></textarea></p>
<p><input
type="submit" value="Enviar datos" name="enviar">
<input type="res-left:
50"> <input type="reset" value="Restablecer" name="B2"></p>
</FORM>
</BODY>
<HTML>
Y ahora creemos el script PHP
llamado desde le formulario mis_datos.php:
Todos los datos se encuentran en
la variable $_POST, ya que el formulario está enviado por el método
post.
<?PHP;
if (isset($_POST['enviar'])
{
echo "Hola
<b>" . $_POST['nombre'] . "</b> que tal estás<BR>n";
echo "Eres
" . $_POST['sexo'] . "<BR>n";
echo "Tienes
" . $_POST['edad'] . "<BR>n";
echo "Tu sistema
favorito es " . $_POST['sistema'] . "<BR>n";
if (isset($_POST['futbol'])
{
echo "Te gusta
el futbol <BR>n";
} else odigo"
style="margin-left: 50">} else {
echo "NO te
gusta el futbol <BR>n";
}
if ($_POST['aficiones']
!= "") {
echo "Tus aficiones
son: <BR>n";
echo nl2br($_POST['aficiones']);
} else {
echo "NO tienes
aficiones <BR>n";
}
}
echo "<a
href='formulario.htm'>VOLVER AL FORMULARIO</a>"
?>
| Una vez rellenados
los datos del formulario, pulsamos el botón Enviar datos , con lo
que le campo enviar toma lo que su etiqueta value indica, es decir enviar="Enviar
datos" . En nuestro script lo primero que evaluamos es que se haya
enviado el formulario, y para ello nada mejor que comprobar que la variable
$enviar no está vacía. Le ponemos el signo dólar delante
a enviar , ponemos el signo dólar delante a enviar , ya que en PHP
todas las variables se les refiere con este signo. |
|
Hay que tener en cuenta que si fusionáramos
el código de ambos ficheros, nos ahorraríamos uno, pero no
también se puede hacer en dos como lo estamos haciendo. Si la variable
$enviar está vacia, enviamos el formulario.
<?PHP;
if ($enviar)
{
echo "Hola
<b>" . $nombre . "</b> que tal estás<BR>n";
echo "Eres
" . $sexo . "<BR>n";
echo "Tienes
" . $edad . "<BR>n";
echo "Tu sistema
favorito es " . $sistema . "<BR>n";
if ($futbol)
{
echo "Te gusta
el futbol <BR>n";
} else {
echo "NO te
gusta el futbol <BR>n";
}
if ($aficiones
!= "") {
< stuot;)>
echo "Tus
aficiones son: <BR>n";
echo nl2br($aficiones);
} else {
echo "NO tienes
aficiones <BR>n";
}
echo "<a
href='$PHP_SELF'>VOLVER AL FORMULARIO</a>"
} else {
<HTML>
<BODY>
<FORM METHOD="post"
ACTION="<?PHP echo $PHP_SELF ?>">
<input type="hidden"
name="edad" value="55">
<p>Tu nombre
<input type="text" name="nombre" size="30" nombre" size="30" value="jose"></p>
<p>Tu sistema
favorito
<select
size="1" name="sistema">
<option
selected value="Linux">Linux</option>
<option
value="Unix">Unix</option>
<option
value="Macintosh">Macintosh</option>
<option
value="Windows">Windows</option>
</select></p>
<p>¿Te
gusta el futbol ? <input type="checkbox" name="futbol" value="ON"></p>
<p>¿Cual
es tu sexo?</p>
<blockquote>
<p>Hombre<input
type="radio" value="hombre" checked name="sexo"></p>
<p>="codigo"
style="margin-left: 100"><p>Mujer <input type="radio" name="sexo"
value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea
rows="5" name="aficiones" cols="28"></textarea></p>
<p><input
type="submit" value="Enviar datos" name="enviar">
<input type="reset"
value="Restablecer" name="B2"></p>
</FORM>
</BODY>
</HTML>
<?PHP
} //fin IF
?>
La variable
de entorno $PHP_SELF , es una variable de entorno que nos devuelve
el nombre del script que estamos ejecutando. Y por último, hacer
notar el uso de la función nl2br() , nl2br() , con la cuál
sustituimos los retornos de carro del texto, los cuáles no
reconocen los navegadores, por la etiqueta <BR> .
Descarga
de ficheros desde un formulario
Vamos a ver
un caso especial, como descargar un archivo desde un formulario. Para ello
utilizaremos una etiqueta INPUT de tipo FILE , soportada a partir de las
versiones de los navegadores Nestcape Navigator 2.0 e Internet Explorer
4.0.
El formulario
debe usar el método post , y el atributo post , y el atributo enctype
debe tener el valor multipart/form-data . Además al formulario debemos
añadirle un campo oculto de nombre MAX_FILE_SIZE , al cuál
le daremos el valor en bytes del tamaño máximo del archivo
a descargar.
<FORM
ENCTYPE="multipart/form-data" ACTION="7-3.php" METHOD="post">
<INPUT
TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
<INPUT
NAME="archivo" TYPE="file">
<INPUT
TYPE="submit" VALUE="Descargar Archivo">
</FORM>
Cuando el formulario
es enviado, PHP detectará automáticamente 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 configuración 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.
La variable terminada en $_FILES['archivo']['name'] contiene el nombre
original del archivo, $_FILES['archivo']['size'] contiene el tamaño
en bytes de éste, y la variable $_FILES['archivo']['type'] nos indicará
el tipo de archivo si éste es ofrecido por el navegador.
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 tamaño máximo 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 ejecución de la
página se borrará.
Veamos un
ejemplo de todo lo dicho.
<HTML>
<BODY>
<?PHP
if (isset($_POST['enviar'])
{
if ($_FILES['archivo']['name']
!= "" && $_FILES['archivo']['size'] != 0){
echo "Nombre:
$archivo_name <BR>n";
echo "Tamaño:
$archivo_size <BR>n";
echo "Tipo:
$archivo_type <BR>n";
if (! move_uploaded_file
($_FILES['archivo']['tmp_name'], "directorio/".$_FILES['archivo']['name']))
{
echo "<h2>No
se ha podido copiar el archivo</h2>n";
}
} elseif ($_FILES['archivo']['name']
!= "" && $FILES['archivo']['size'] == 0) {
echo "<h2>Tamaño
de archivo superado</h2>n";
} else {
echo "<h2>No
ha escogido un archivo para descargar</h2>n";
}
echo "<HR>n";
}
?>
<FORM ENCTYPE="multipart/form-data"
ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="post">
<INPUT type="hidden"
name="MAX_FILE_SIZE" value="100000">
<p><b>Archivo
a descargar<b><br>
<INPUT type="file"
name="archivo" size="35"></p>
<p><INPUT
type="submit" name="enviar" value="Aceptar"></p>
</FORM>
</BODY>
</HTML>
|