Está en la página 1de 36

Desarrollo de sitios webcon

PHP y MySQL
Tema 3: Formularios
J os Mariano Gonzlez Romano
mariano@lsi.us.es
Tema 3: Formularios
1. Acceso a formularios HTML desde PHP
2. El formulario de PHP
3. Subida de ficheros al servidor
4. Validacin de los datos de un formulario
Acceso a formularios desde PHP
Desde PHP se puede acceder fcilmente a los datos
introducidos desde un formulario HTML
Vemoslo con un ejemplo simple
Acceso a formularios desde PHP
Fichero uno.php
<HTML>
<BODY>
<FORM ACTI ON=dos. php METHOD=POST>
Edad: <I NPUT TYPE=t ext NAME=edad>
<I NPUT TYPE=submi t VALUE=acept ar >
</ FORM>
</ BODY>
</ HTML>
Fichero dos.php
<HTML>
<BODY>
<?PHP
pr i nt ( La edad es: $edad) ;
?>
</ BODY>
</ HTML>
Acceso a formularios desde PHP
Acceso a formularios desde PHP
A partir de PHP 4.2.0, el valor por defecto de la directiva de
PHP register_globals es off
Esto tiene una gran importancia sobre los formularios, ya
que no es posible acceder a las variables enviadas de la
manera anterior (como variables globales). En su lugar hay
que utilizar la variable predefinida de PHP $_REQUEST,
escribiendo $_REQUEST[edad] en lugar de $edad
Se puede poner register_globals = on en el fichero de
configuracin php.ini, pero no es recomendable por motivos
de seguridad. Una alternativa que permite hacer mnimos
cambios en el cdigo ya existente es la siguiente:
$edad = $_REQUEST[edad];
Acceso a formularios desde PHP
Fichero uno.php
<HTML>
<BODY>
<FORM ACTI ON=dos. php METHOD=POST>
Edad: <I NPUT TYPE=t ext NAME=edad>
<I NPUT TYPE=submi t VALUE=acept ar >
</ FORM>
</ BODY>
</ HTML>
Fichero dos.php
<HTML>
<BODY>
<?PHP
$edad = $_REQUEST[ edad ] ;
pr i nt ( La edad es: $edad) ;
?>
</ BODY>
</ HTML>
Acceso a formularios desde PHP
Ejercicio 1: formulario simple
Ilustra cmo acceder a los valores introducidos desde un
formulario HTML
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 / mltiple
Elemento TEXTAREA
Acceso a formularios desde PHP
TEXT
I nt r oduzca l a cadena a buscar :
<I NPUT TYPE=" t ext " NAME=" cadena" VALUE=" val or por def ect o" SI ZE=" 20" >
<?PHP
$cadena = $_REQUEST[ cadena ] ;
pr i nt ( $cadena) ;
?>
Acceso a formularios desde PHP
RADIO
Sexo:
<I NPUT TYPE=" r adi o" NAME=sexo" VALUE=M CHECKED>Muj er
<I NPUT TYPE=" r adi o" NAME=sexo" VALUE=H" >Hombr e
<?PHP
$sexo = $_REQUEST[ sexo ] ;
pr i nt ( $sexo) ;
?>
Acceso a formularios desde PHP
CHECKBOX
<I NPUT TYPE=" checkbox" NAME=" ext r as[ ] " VALUE=" gar aj e" CHECKED>Gar aj e
<I NPUT TYPE=" checkbox" NAME=" ext r as[ ] " VALUE=" pi sci na" >Pi sci na
<I NPUT TYPE=" checkbox" NAME=" ext r as[ ] " VALUE=" j ar di n" >J ar d n
<?PHP
$ext r as = $_REQUEST[ ext r as ] ;
f or each ( $ext r as as $ext r a)
pr i nt ( $ext r a<BR>\ n) ;
?>
Acceso a formularios desde PHP
BUTTON
<I NPUT TYPE=" but t on" NAME=act ual i zar " VALUE=" Act ual i zar dat os" >
<?PHP
$act ual i zar = $_REQUEST[ act ual i zar ] ;
i f ( $act ual i zar )
pr i nt ( " Se han act ual i zado l os dat os" ) ;
?>
Acceso a formularios desde PHP
FILE
<FORM ACTI ON=" pr ocesa. php" METHOD=" post
ENCTYPE=" mul t i par t / f or m- dat a" >
<I NPUT TYPE=" f i l e" NAME=" f i cher o" >
</ FORM>
Acceso a formularios desde PHP
HIDDEN
<?PHP
pr i nt ( <I NPUT TYPE= hi dden NAME= user name VALUE= $usuar i o >\ n) ;
?>
<?PHP
$user name = $_REQUEST[ user name ] ;
pr i nt ( $user name) ;
?>
Acceso a formularios desde PHP
PASSWORD
Cont r asea: <I NPUT TYPE=" passwor d" NAME=" cl ave" >
<?PHP
$cl ave = $_REQUEST[ cl ave ] ;
pr i nt ( $cl ave) ;
?>
Acceso a formularios desde PHP
SUBMIT
<I NPUT TYPE=" submi t " NAME=" envi ar " VALUE=" Envi ar dat os" >
<?PHP
$envi ar = $_REQUEST[ envi ar ] ;
i f ( $envi ar )
pr i nt ( " Se ha pul sado el bot n de envi ar " ) ;
?>
Acceso a formularios desde PHP
SELECT simple
Col or :
<SELECT NAME=col or " >
<OPTI ON VALUE=r oj o" SELECTED>Roj o
<OPTI ON VALUE=ver de" >Ver de
<OPTI ON VALUE=azul " >Azul
</ SELECT>
<?PHP
$col or = $_REQUEST[ col or ] ;
pr i nt ( $col or ) ;
?>
Acceso a formularios desde PHP
SELECT mltiple
I di omas:
<SELECT MULTI PLE SI ZE=" 3" NAME=" i di omas[ ] " >
<OPTI ON VALUE=" i ngl es" SELECTED>I ngl s
<OPTI ON VALUE=" f r ances" >Fr ancs
<OPTI ON VALUE=" al eman" >Al emn
<OPTI ON VALUE=" hol andes" >Hol ands
</ SELECT>
<?PHP
$i di omas = $_REQUEST[ i di omas ] ;
f or each ( $i di omas as $i di oma)
pr i nt ( $i di oma<BR>\ n) ;
?>
Acceso a formularios desde PHP
TEXTAREA
Coment ar i o:
<TEXTAREA COLS=50" ROWS=4" NAME=" coment ar i o" >
Est e l i br o me par ece . . .
</ TEXTAREA>
<?PHP
$coment ar i o = $_REQUEST[ coment ar i o ] ;
pr i nt ( $coment ar i o) ;
?>
Acceso a formularios desde PHP
Ejercicio 2: programa que muestra los datos
introducidos desde un formulario
Ilustra cmo acceder a los valores introducidos desde todos
los tipos de elementos de entrada de un formulario, con
excepcin de los tipos BUTTON y FILE, que se tratan en
ejercicios posteriores
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 segn haya sido o no enviado, respectivamente
Ventajas:
Disminuye el nmero de ficheros
Permite validar los datos del formulario en el propio formulario
Procedimiento:
si se ha envi ado el f or mul ar i o:
Pr ocesar f or mul ar i o
si no:
Most r ar f or mul ar i o
f si
El formulario de PHP
Esquema de funcionamiento:
a) b)
si se ha envi ado el f or mul ar i o:
Pr ocesar f or mul ar i o
si no:
Most r ar f or mul ar i o
f si
La 1 vez que se carga la pgina se muestra el formulario (a)
La 2 vez se procesa el formulario (b)
El formulario de PHP
Para saber si se ha enviado el formulario se acude a la
variable correspondiente al botn de envo. Si este botn
aparece de la siguiente forma en el formulario HTML:
<I NPUT TYPE=" SUBMI T" NAME=" envi ar VALUE=" pr ocesar " >
entonces la condicin anterior se transforma en:
i f ( i sset ( $envi ar ) )
o bien
i f ( $envi ar == pr ocesar )
El formulario de PHP
Ejercicio 3: formulario de PHP
Ilustra cmo crear pginas multipropsito que sirven tanto
para mostrar un formulario como para procesarlo
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 lmite en cuanto a su tamao. Este lmite se
fija de dos formas diferentes:
En el fichero de configuracin php.ini
En el propio formulario
Subida de ficheros al servidor
php.ini
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; Fi l e Upl oads ;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; Whet her t o al l ow HTTP f i l e upl oads.
f i l e_upl oads = On
; Tempor ar y di r ect or y f or HTTP upl oaded f i l es ( wi l l use
; syst emdef aul t i f not speci f i ed) .
; upl oad_t mp_di r =
; Maxi mumal l owed si ze f or upl oaded f i l es.
upl oad_max_f i l esi ze = 2M
formulario
<I NPUT TYPE=HI DDEN NAME=MAX_FI LE_SI ZE VALUE=' 102400' >
<I NPUT TYPE=FI LE NAME=" f i cher o" >
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 funcin
move_upload_file()
Procedimiento:
si se ha subi do cor r ect ament e el f i cher o:
Asi gnar un nombr e al f i cher o
Mover el f i cher o a su ubi caci n def i ni t i va
si no:
Most r ar un mensaj e de er r or
f si
Subida de ficheros al servidor
HTML
<I NPUT TYPE=" HI DDEN" NAME=" MAX_FI LE_SI ZE" VALUE=" 102400" >
<I NPUT TYPE=" FI LE" SI ZE=" 44" NAME=" i magen" >
La variable $_FILES contiene toda la informacin del fichero
subido:
$_FILES['imagen']['name']
Nombre original del fichero en la mquina cliente
$_FILES['imagen']['type']
Tipo mime del fichero. Por ejemplo, "image/gif"
$_FILES['imagen']['size']
Tamao 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']
Cdigo de error asociado al fichero subido
Subida de ficheros al servidor
PHP
i f ( is_uploaded_file ( $_FI LES[ ' i magen' ] [ ' t mp_name' ] ) )
{
$nombr eDi r ect or i o = " i mg/ " ;
$i dUni co = t i me( ) ;
$nombr eFi cher o = $i dUni co . " - " . $_FI LES[ ' i magen' ] [ ' name' ] ;
move_uploaded_file ( $_FI LES[ ' i magen' ] [ ' t mp_name' ] ,
$nombr eDi r ect or i o . $nombr eFi cher o) ;
}
el se
pr i nt ( " No se ha podi do subi r el f i cher o\ n" ) ;
Subida de ficheros al servidor
PHP
i f ( is_uploaded_file ( $_FI LES[ ' i magen' ] [ ' t mp_name' ] ) )
{
$nombr eDi r ect or i o = " i mg/ " ;
$nombr eFi cher o = $_FI LES[ ' i magen' ] [ ' name' ] ;
$nombr eCompl et o = $nombr eDi r ect or i o . $nombr eFi cher o;
i f ( is_file( $nombr eCompl et o) )
{
$i dUni co = t i me( ) ;
$nombr eFi cher o = $i dUni co . " - " . $nombr eFi cher o;
}
move_uploaded_file ( $_FI LES[ ' i magen' ] [ ' t mp_name' ] ,
$nombr eDi r ect or i o . $nombr eFi cher o) ;
}
el se
pr i nt ( " No se ha podi do subi r el f i cher o\ n" ) ;
Subida de ficheros al servidor
Ejercicio 4: subida de un fichero al servidor
Ilustra cmo subir ficheros a un servidor, cmo controlar su
tamao, cmo crear un nombre nico para el fichero y
cmo almacenarlo en el lugar deseado
Validacin de formularios
Toda la informacin proveniente de un formulario debe
considerarse por norma como contaminada, y hay que
validarla antes de darla por buena y procesarla
Lo ms eficiente es mostrar los errores sobre el propio
formulario para facilitar su correccin. Procedimiento:
si se ha envi ado el f or mul ar i o:
si hay er r or es:
Most r ar f or mul ar i o con er r or es
si no:
Pr ocesar f or mul ar i o
f si
si no:
Most r ar f or mul ar i o
f si
Validacin de formularios
Este procedimiento se puede resumir para que slo haya que
mostrar una vez el formulario, bien con los valores por defecto
o con los valores introducidos, y con los errores en su caso:
si se ha envi ado el f or mul ar i o:
val i dar dat os
f si
si se ha envi ado el f or mul ar i o y no hay er r or es:
Pr ocesar f or mul ar i o
si no:
Most r ar f or mul ar i o con val or es por def ect o o ya
envi ados
f si
Validacin de formularios
Esquema de funcionamiento:
a) b) c)
si se ha envi ado el f or mul ar i o:
val i dar dat os
f si
si se ha envi ado y no hay er r or es:
Pr ocesar f or mul ar i o
si no:
Most r ar f or mul ar i o
f si
La 1 vez que se carga la pgina se muestra el formulario (a)
La 2 y sucesivas veces se validan los datos
Si hay errores, se muestra de nuevo el formulario con los errores (b)
Si no hay, se procesa el formulario (c)
Validacin de formularios
Ejercicio 5: validacin de los datos introducidos en un
formulario
Ilustra cmo realizar una validacin de los datos
introducidos en un formulario en el propio formulario

También podría gustarte