Está en la página 1de 29

PROGRAMACIÓN ORIENTADA

A LA WEB I

Tema 3: Procesamiento de Formularios


Formularios en HTML
Un formulario se hace, añadiendo el elemento <FORM> a una
página. El procesamiento de los datos introducidos en el formulario
(cliente) se debe hacer utilizando un programa aparte localizado en
un servidor remoto (indicado en una URL en un parámetro de la
etiqueta) que hará algo con dicha información (meterla en una BD,
modificarla y devolverla al cliente, etc).

Un formulario se construye con las etiquetas <FORM> y </FORM>,


y contiene texto normal, elementos HTML de cualquier tipo (tablas,
etc) y elementos de formulario (campos de texto, áreas de texto,
botones, desplegables, etc).
Formularios en HTML
Para lograr que el formulario funcione y se pueda enviar a un CGI
remoto se deben especificar tres cosas: la dirección del programa
que manipulará los contenidos del formulario (ACTION), el método
en el que se van a pasar los datos del formulario (METHOD), y
potencialmente, cómo se van a codificar los datos del formulario
(ENCTYPE).
Formularios en HTML
El atributo ACTION

La manera en la que se va a manipular el formulario HTML se


establece empleando el atributo ACTION para el elemento de
formulario. El atributo ACTION se fija generalmente a un URL del
programa que manipulará los datos del formulario. Este URL
apuntará habitualmente aun CGI para decodificar los resultados.

Por ejemplo:

<form action="http://geneura.ugr.es/prueba.php" method="POST">


Formularios en HTML
El atributo METHOD

Es también necesario especificar cómo se va a enviar el formulario


a la dirección especificada por el atributo ACTION. El atributo
METHOD indica cómo se enviarán los datos. Hay dos valores
aceptables para el atributo METHOD: GET y POST. Por defecto, se
utiliza GET.
Formularios en HTML
Método GET

El método GET es el utilizado para enviar la información


(documentos HTML, por ejemplo). Usando este método es
necesario pasar los datos del formulario junto con el nombre del
programa que hay que ejecutar. Para hcer esto, se adjunta toda la
información del formulario al final del URL que se solicita:

http://geneura.ugr.es/prueba.php?nombre=pepito+grillo&edad=21

El método GET no es un método muy seguro, ya que la entrada de


datos aparece en el URL. Además, hay un límite en cuanto a la
cantidad de datos que se pueden pasar con el método GET.
Formularios en HTML
Método POST

El método POST transmite la información de entrada del formulario


inmediatamente después del URL. De alguna forma, este método
requiere hacer dos contactos con el servidor Web. El método GET
sólo necesita uno, ya que el método viene con los datos a usar
directamente en la solicitud.

La ventaja de usar POST es que de esta manera se puede enviar


una gran cantidad de información, ya que los contenidos del
formulario no están en el URL. Es incluso posible enviar contenidos
de archivos usando este método. En el caso de usar POST, hay
que indicarlo en la etiqueta FORM, mediante la propiedad
METHOD:
<form action="http://geneura.ugr.es/prueba.php" method="POST">
Acceso a formularios desde PHP
Parámetros

Se utilizan los arreglos _POST, _GET y _FILES para acceder a los


parámetros de formulario desde el código PHP. Las llaves son los
nombres de los parámetros y los valores son los valores de esos
parámetros. Por ejemplo:

<form action="separar.php" method="POST">


Ingrese una palabra:
<input type="text" name="word"/><br/>
Largo de las separaciones:
<input type="text" name="number" /><br/>
<input type="submit" value="Dividir">
</form>
Acceso a formularios desde PHP
Parámetros

El programa PHP para procesar dicho formulario sería el siguiente:

$word = $_POST['word'];
$number = $_POST['number'];
$chunks = ceil(strlen($word) / $number);

echo "The {$number}-letter chunks of '{$word}' are:<br />\n";

for ($i = 0; $i < $chunks; $i++) {


$chunk = substr($word, $i * $number, $number);
printf("%d: %s<br />\n", $i + 1, $chunk);
}
Acceso a formularios desde PHP
• Fichero uno.php
• Desde PHP se <HTML>
puede acceder <BODY>
fácilmente a <FORM ACTION=”dos.php” METHOD=”POST”>
los datos Edad: <INPUT TYPE=”text” NAME=”edad”>
introducidos <INPUT TYPE=”submit” VALUE=”aceptar”>
desde un </FORM>
formulario </BODY>
HTML </HTML>
• Veámoslo con
un ejemplo • Fichero dos.php
simple: <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="fichero">
</FORM>
Acceso a formularios desde PHP
• HIDDEN

<?PHP
print("<INPUT TYPE='hidden' NAME='username' VALUE='admin'>");
?>

<?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);
?>
Subida de ficheros al servidor
• Para subir un fichero 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 fichero tiene un límite en cuanto a su tamaño. Este
límite se fija de dos formas diferentes:
• En el fichero de configuración php.ini
• En el propio formulario
Subida de ficheros 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="fichero">
Subida de ficheros al servidor
• Consideraciones (cont):
• Debe darse al fichero un nombre que evite coincidencias con ficheros
ya subidos.
• Por ello, y como norma general, debe descartarse el nombre original
del fichero y crear uno nuevo que sea único.
• El fichero 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 fichero:


Asignar un nombre al fichero
Mover el fichero a su ubicación definitiva
si no:
Mostrar un mensaje de error
fsi
Subida de ficheros al servidor
<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 fichero


subido:
• $_FILES['imagen']['name']
• Nombre original del fichero en la máquina cliente
• $_FILES['imagen']['type']
• Tipo mime del fichero. Por ejemplo, "image/gif"
• $_FILES['imagen']['size']
• Tamaño en bytes del fichero subido
• $_FILES['imagen']['tmp_name']
• Nombre del fichero temporal en el que se almacena el fichero
subido en el servidor
• $_FILES['imagen’]['error']
• Código de error asociado al fichero subido
Subida de ficheros al servidor
if (is_uploaded_file ($_FILES['imagen']['tmp_name']))
{
$nombreDirectorio = "img/";
$idUnico = time();
$nombreFichero = $idUnico . "-" . $_FILES['imagen']['name'];

move_uploaded_file ($_FILES['imagen']['tmp_name'],
$nombreDirectorio . $nombreFichero);
}
else
print ("No se ha podido subir el fichero\n");
Referencias
[1] PHP 5 File Upload
https://www.w3schools.com/php/php_file_upload.asp
[2] Programación PHP
https://programacion-php.readthedocs.io/es/latest/index.html

También podría gustarte