Subido por Ing. Israel Bravo

php 2

Anuncio
Tema 2: Formularios
Tema 2: Formularios
1.
2.
3.
4.
Acceso a formularios HTML desde PHP
El formulario de PHP
Subida de archivos al servidor
Validación de los datos de un formulario
Elemento FORM
El elemento <form> es el elemento que define formalmente un formulario.
<form>
... elementos del formulario ...
</form>
Los atributos del formulario determinan el modo general en el que éste se
comportará:
<form atributo1="valor" atributo2="valor" ...>
...
</form>
Fieldset
Este es un elemento que agrupa a diferentes elementos del formulario,
elementos que están relacionados entre ellos. La sintaxis de fieldset es la
siguiente:
<fieldset>...</fieldset>
Entre estos elementos aparecerán los campos del formulario. Por
ejemplo si tenemos campos personales básicos podemos agruparlos de
la siguiente forma:
<fieldset>
<label for="nombre">Nombre</label><input type="text"
id="nombre"/>
<label for="apellido">Apellido</label><input type="text"
id="apellido"/>
</fieldset>
Legend
El elemento legend nos servirá para darle un significado a una agrupación
<fieldset>
<legend>Introduzca sus datos personales</legend>
<label for="nombre">Nombre</label><input
type="text" id="nombre"/>
<label for="apellido">Apellido</label><input
type="text" id="apellido"/>
</fieldset>
Destino del formulario
Para establecer el destino del formulario tenemos el atributo action. El
atributo action tiene la URL de destino del formulario. La estructura del
atributo action es:
<form action="url-destino"> … </form>
Las URL de destino suelen ser programas o código de servidor, ya sea
Java, PHP, Node, ASP,… Los cuales recuperan la información del
formulario, la manipulan y nos devuelven una nueva página HTML.
Tipo de envío: GET y POST
Existen dos métodos con los que el navegador puede enviar información
al servidor:
● Método HTTP GET. Información se envía de forma visible
● Método HTTP POST. Información se envía de forma no visible
Antes de que el navegador envíe la información proporcionada, la codifica
mediante URL encoding, dando como resultado un Query String. Esta
codificación es un esquema de keys y values separados por un
ampersand &
Tipo de envío: GET y POST
Para establecer el tipo de envío del formulario tenemos el atributo method.
El atributo method puede tener dos valores: GET y POST. El atributo
method lo encontramos dentro del elemento form:
<form method="GET|POST"> … </form>
A la hora de enviar los ** formularios de forma GET** lo que vamos a
conseguir es que a la URL destino del formulario se le añaden los
parámetros con los datos del formulario en la estructura:
action?nombre1=valor1&nombre2=valor2&...&nombreN=valorN
Ejemplo GET ---html--- uno.php
Si tenemos el siguiente formulario:
<body>
<form action="envio.php" method="GET">
<label for="nombre">Nombre</label>
<input type="text" id="nombre" name="nombre"/>
<label for="apellido">Apellido</label>
<input type="text" id="apellido" name="apellido"/>
<button id="envio">Enviar Formulario</button>
</form>
</body>
Lo que se enviará en la URL será algo parecido a:
envio.php?name=Victor&apellido=Robles
Ejemplo 1 POST ---html--- uno.php
Si indicamos que el método de envío del formulario es POST lo que hará
el navegador es enviar los datos junto al cuerpo del formulario y no se
verán en la URL.
Así, en el siguiente formulario:
<body>
<form action="envio.php" method="POST">
<label for="nombre">Nombre</label>
<input type="text" id="nombre" name="nombre"/> <br>
<label for="apellido">Apellido</label>
<input type="text" id="apellido" name="apellido"/>
<button id="envio">Enviar Formulario</button>
</form>
</body>
Ejemplo 2 POST ---html--- uno.php
<body>
<form action="form-result.php" target="_blank" method="POST">
<fieldset>
<legend>Introduzca sus datos personales</legend>
<label for="nombre">Nombre</label>
<input type="text" id="nombre"/>
<br />
<label for="apellido">Apellido</label>
<input type="text" id="apellido"/>
</fieldset>
</form>
</body>
No se ven los datos en la URL
Acceso a formularios desde PHP
●
archivo uno.php
<HTML>
<BODY>
<FORM ACTION=”dos.php” METHOD=”POST”>
Edad: <INPUT TYPE=”text” NAME=”edad”>
<INPUT TYPE=”submit” VALUE=”aceptar”>
</FORM>
</BODY>
</HTML>
●
archivo dos.php
<HTML>
<BODY>
<?PHP
$edad = $_REQUEST[‘edad’];
print (“La edad es: $edad”);
?>
</BODY>
</HTML>
Acceso a formularios desde PHP
Acceso a formularios desde PHP
●
Acceso a los diferentes tipos de elementos de entrada de
formulario
– Elementos de tipo INPUT
•
•
•
•
•
•
•
•
TEXT
RADIO
CHECKBOX
BUTTON
FILE
HIDDEN
PASSWORD
SUBMIT
– Elemento SELECT
• Simple / múltiple
– Elemento TEXTAREA
Acceso a formularios desde PHP
●
TEXT
Introduzca la cadena a buscar:
<INPUT TYPE="text" NAME="cadena" VALUE="valor por
defecto" SIZE="20">
<?PHP
$cadena = $_REQUEST[‘cadena’];
print ($cadena);
?>
Acceso a formularios desde PHP
●
RADIO
Sexo:
<INPUT TYPE="radio" NAME=“sexo" VALUE=“M“ CHECKED>Mujer
<INPUT TYPE="radio" NAME=“sexo" VALUE=“H">Hombre
<?PHP
$sexo = $_REQUEST[‘sexo’];
print ($sexo);
?>
Acceso a formularios desde PHP
●
CHECKBOX
<INPUT TYPE="checkbox" NAME="extras[]" VALUE="garaje" CHECKED>Garaje
<INPUT TYPE="checkbox" NAME="extras[]" VALUE="piscina">Piscina
<INPUT TYPE="checkbox" NAME="extras[]" VALUE="jardin">Jardín
<?PHP
$extras = $_REQUEST[‘extras’];
foreach ($extras as $extra)
print (“$extra<BR>\n”);
?>
Acceso a formularios desde PHP
●
BUTTON
<INPUT TYPE="button" NAME=“actualizar"
VALUE="Actualizar datos">
<?PHP
$actualizar = $_REQUEST[‘actualizar’];
if ($actualizar)
print ("Se han actualizado los datos");
?>
Acceso a formularios desde PHP
●
FILE
<FORM ACTION="procesa.php" METHOD="post“
ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="archivo">
</FORM>
Acceso a formularios desde PHP
●
HIDDEN
<?PHP
print(“<INPUT TYPE=’hidden’ NAME=’username’
VALUE=’$usuario’>\n”);
?>
<?PHP
$username = $_REQUEST[‘username’];
print ($username);
?>
Acceso a formularios desde PHP
●
PASSWORD
Contraseña: <INPUT TYPE="password"
NAME="clave">
<?PHP
$clave = $_REQUEST[‘clave’];
print ($clave);
?>
Acceso a formularios desde PHP
●
SUBMIT
<INPUT TYPE="submit" NAME="enviar" VALUE="Enviar
datos">
<?PHP
$enviar = $_REQUEST[‘enviar’];
if ($enviar)
print ("Se ha pulsado el botón de enviar");
?>
Acceso a formularios desde PHP
●
SELECT simple
Color:
<SELECT NAME=“color">
<OPTION VALUE=“rojo" SELECTED>Rojo
<OPTION VALUE=“verde">Verde
<OPTION VALUE=“azul">Azul
</SELECT>
<?PHP
$color = $_REQUEST[‘color’];
print ($color);
?>
Acceso a formularios desde PHP
●
SELECT múltiple
Idiomas:
<SELECT MULTIPLE SIZE="3" NAME="idiomas[]">
<OPTION VALUE="ingles" SELECTED>Inglés
<OPTION VALUE="frances">Francés
<OPTION VALUE="aleman">Alemán
<OPTION VALUE="holandes">Holandés
</SELECT>
<?PHP
$idiomas = $_REQUEST[‘idiomas’];
foreach ($idiomas as $idioma)
print (“$idioma<BR>\n”);
?>
Acceso a formularios desde PHP
●
TEXTAREA
Comentario:
<TEXTAREA COLS=“50" ROWS=“4" NAME="comentario">
Este libro me parece ...
</TEXTAREA>
<?PHP
$comentario = $_REQUEST[‘comentario’];
print ($comentario);
?>
Acceso a formularios desde PHP
●
Ejercicio: Diseñar una página web con php que pida al usuario el
precio
de
tres
productos
en
tres
establecimientos
distintos
denominados “Tienda 1”, “Tienda 2” y “Tienda 3”. Una vez se
introduzca esta información se debe calcular y mostrar el precio
medio del producto. El envío de datos debe hacerse por POST y la
recuperación con REQUEST.
El formulario de PHP
●
La forma habitual de trabajar con formularios en PHP es
utilizar un único programa que procese el formulario o lo
muestre según haya sido o no enviado, respectivamente
●
Ventajas:
– Disminuye el número de archivos
– Permite validar los datos del formulario en el propio formulario
●
Procedimiento:
si se ha enviado el formulario:
Procesar formulario
si no:
Mostrar formulario
fsi
Subida de archivos al servidor
●
●
Para subir un archivo al servidor se utiliza el elemento de
entrada FILE
Hay que tener en cuenta una serie de consideraciones
importantes:
– El elemento FORM debe tener el atributo ENCTYPE="multipart/form-
data“
– El archivo tiene un límite en cuanto a su tamaño. Este límite se fija de
dos formas diferentes:
• En el archivo de configuración php.ini
• En el propio formulario
Subida de archivos al servidor
php.ini
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files (will use
; system default if not specified).
;upload_tmp_dir =
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
formulario
<INPUT TYPE=”HIDDEN” NAME=”MAX_FILE_SIZE” VALUE='102400'>
<INPUT TYPE=”FILE” NAME="archivo">
Subida de archivos al servidor
●
Consideraciones (cont)
– Debe darse al archivo un nombre que evite coincidencias con
archivos ya subidos. Por ello, y como norma general, debe
descartarse el nombre original del archivo y crear uno nuevo que
sea único
– El archivo subido se almacena en un directorio temporal y hemos
de moverlo al directorio de destino usando la función
move_upload_file()
●
Procedimiento:
si se ha subido correctamente el archivo:
Asignar un nombre al archivo
Mover el archivo a su ubicación definitiva
si no:
Mostrar un mensaje de error
fsi
Subida de archivos al servidor
HTML
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="102400">
<INPUT TYPE="FILE" SIZE="44" NAME="imagen">
●
La variable $_FILES contiene toda la información del archivo
subido:
– $_FILES['imagen']['name']
• Nombre original del archivo en la máquina cliente
– $_FILES['imagen']['type']
• Tipo mime del archivo. Por ejemplo, "image/gif"
– $_FILES['imagen']['size']
• Tamaño en bytes del archivo subido
– $_FILES['imagen']['tmp_name']
• Nombre del archivo temporal en el que se almacena el archivo subido
en el servidor
– $_FILES['imagen’]['error']
• Código de error asociado al archivo subido
Crear el formulario HTML
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/formdata">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Cargar imagen" name="submit">
</form>
</body>
</html>
Crear archivo PHP upload 1/3
GENERE EL SUBDIRECTORIO ANTES DE CORRER EL PROGRAMA
<?php
PHP
<?php
$target_dir = "uploads/";
$target_file = $target_dir .
basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType =
strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
Crear archivo PHP upload 2/3
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType !=
"jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
Crear archivo PHP upload 3/3
●
●
●
●
●
●
●
●
●
●
●
●
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file))
{
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has
been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Archivo PHP
PHP
● $ target_dir = "uploads /": especifica el directorio donde se colocará
el archivo
● $ target_file especifica la ruta del archivo a cargar
● $ uploadOk = 1 no se usa aún (se usará más adelante)
● $ imageFileType contiene la extensión de archivo del archivo (en
minúsculas)
● A continuación, compruebe si el archivo de imagen es una imagen
real o una imagen falsa
Subida de archivos al servidor
●
Ejercicio: subida de un archivo al servidor
–
Modifica el programa para subir archivos pdf a un
servidor
– controla su tamaño,
– crea un nombre único para cada archivo
– Almacena los archivos en un subdirectorio
Descargar