Diferencia entre revisiones de «Plantilla:PHP/FormulariosConceptosGenerales»
De WikiEducator
(→Validando valores en el servidor) |
|||
(28 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
+ | <div id=parrafo> | ||
<div class="slide"> | <div class="slide"> | ||
===Introducción=== | ===Introducción=== | ||
Línea 7: | Línea 8: | ||
#Leer valores del teclado | #Leer valores del teclado | ||
#Mostrar resultados en pantalla | #Mostrar resultados en pantalla | ||
− | [[Archivo:InteracutandoPrograma.png|300px]] | + | [[Archivo:InteracutandoPrograma.png|300px|center]] |
</div> | </div> | ||
Línea 19: | Línea 20: | ||
*Nos falta ver cómo podemos hacer que el cliente (a través del navegador) aporte valores al programa escribiéndolos por el teclado. | *Nos falta ver cómo podemos hacer que el cliente (a través del navegador) aporte valores al programa escribiéndolos por el teclado. | ||
*Hay que partir de la situación en la que estamos desarrollando nuestra aplicación '''''Aplicación web'''''. | *Hay que partir de la situación en la que estamos desarrollando nuestra aplicación '''''Aplicación web'''''. | ||
− | El script | + | El script lo ejecuta el servidor |
+ | (en nuestro caso el programa apache ejecutándose en un ordenador) | ||
+ | cuando un cliente (un navegador en un equipo) solicita una página o recurso que tiene código php. | ||
*No puedo detener el programa esperando que el usuario aporte un valor. Esto no es posible en una programación web. | *No puedo detener el programa esperando que el usuario aporte un valor. Esto no es posible en una programación web. | ||
{{Tip|Típico ejemplo que el programa me pide un nombre, y su ejecución espera a que introduzca el nombre y presione intro para continuar}} | {{Tip|Típico ejemplo que el programa me pide un nombre, y su ejecución espera a que introduzca el nombre y presione intro para continuar}} | ||
Línea 25: | Línea 28: | ||
*De alguna manera enviaremos parejas '''''variable, valor'''''. | *De alguna manera enviaremos parejas '''''variable, valor'''''. | ||
*El formulario será parte de la página del cliente, código '''''html'''''. | *El formulario será parte de la página del cliente, código '''''html'''''. | ||
− | [[image: | + | [[image:FormularioPHP.png |center]] |
+ | |||
</div> | </div> | ||
Línea 31: | Línea 35: | ||
<div class="slide"> | <div class="slide"> | ||
;Leyendo del usuario | ;Leyendo del usuario | ||
− | *En el formulario tendremos | + | *En el formulario tendremos elementos gráficos de entradas de valores '''''(input)''''' donde, en el navegador, el usuario podrá escribir contenido(text, ...), o de alguna forma aportarlo (radio, select, ...) |
*En los diferentes elementos de entrada de un formulario , como una texto, el usuario podrá escribir valores. | *En los diferentes elementos de entrada de un formulario , como una texto, el usuario podrá escribir valores. | ||
− | *Al darle el botón enviar '''''(submit del formulario)''', dichos valores irán al servidor para ser leídos y usados en un script; *Porteriormetne veremos | + | *Al darle el botón enviar (u otro elemento submit) '''''(submit del formulario)''', dichos valores irán al servidor para ser leídos y usados en un script; |
− | *Repasemos cómo crear formularios en el cliente y lo que más nos interesa, | + | *Porteriormetne veremos cómo leerlos en el servidor. |
+ | *Repasemos cómo crear formularios en el cliente y lo que más nos interesa, cómo leerlos en el servidor. | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 56: | Línea 61: | ||
*Etiqueta '''''form''''' con una serie de atributos, de los que '''ahora''' nos interesan dos principalmente: | *Etiqueta '''''form''''' con una serie de atributos, de los que '''ahora''' nos interesan dos principalmente: | ||
#'''''action''''': especifica el fichero que se invocará al servidor. Este fichero contendrá el código php que queremos que se ejecute. | #'''''action''''': especifica el fichero que se invocará al servidor. Este fichero contendrá el código php que queremos que se ejecute. | ||
− | #''''' | + | #'''''method''''': especifica el modo en el que se van a pasar los parámetros (valores introducidos a los diferentes objetos del formulario, o que tengan asignados por defecto). |
+ | ====El action==== | ||
+ | <br /> | ||
+ | {{MRM_Definicion|Title=Valor de action| | ||
+ | Establece el nombre del recurso, script o página | ||
+ | que se va a solictar al servidor | ||
+ | cuando realicemos un click en el submit del formulario | ||
+ | }} | ||
+ | ;Ejemplo | ||
− | {{MRM_Actividad|Title=Haciendo un pin-pon | + | {{MRM_Actividad|Title=Haciendo un pin-pon| |
− | + | Haz un proyecto que contenga dos páginas '''''ping.php''''' y '''''pon.php''''' | |
*Ambas tendrán un botón de tipo submit | *Ambas tendrán un botón de tipo submit | ||
<source lang=html5> | <source lang=html5> | ||
Línea 66: | Línea 79: | ||
</source> | </source> | ||
*La página pin me llevaré a pon py la página '''''pon''''' me ha de llevar a '''''pin''''' | *La página pin me llevaré a pon py la página '''''pon''''' me ha de llevar a '''''pin''''' | ||
− | {{plegable|hide| | + | {{plegable|hide|posible solución| |
<source lang=html5> | <source lang=html5> | ||
<!--PIN.PHP--> | <!--PIN.PHP--> | ||
Línea 73: | Línea 86: | ||
<head> | <head> | ||
<meta charset="UTF-8"> | <meta charset="UTF-8"> | ||
− | <meta name="viewport | + | <meta name="viewport"> |
− | + | ||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | <meta http-equiv="X-UA-Compatible" content="ie=edge"> | ||
<title>Document</title> | <title>Document</title> | ||
Línea 91: | Línea 103: | ||
<head> | <head> | ||
<meta charset="UTF-8"> | <meta charset="UTF-8"> | ||
− | <meta name="viewport | + | <meta name="viewport"> |
− | + | ||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | <meta http-equiv="X-UA-Compatible" content="ie=edge"> | ||
<title>Document</title> | <title>Document</title> | ||
Línea 108: | Línea 119: | ||
}} | }} | ||
}} | }} | ||
− | ====GET o POST==== | + | |
+ | |||
+ | ====El method: GET o POST==== | ||
+ | |||
+ | <br /> | ||
+ | {{MRM_Definicion|Title=Valor de method| | ||
+ | Establece la manera en la que van a enviar los datos al servidor | ||
+ | Se enviarán todas las parejas variable-valor que haya en el formulario | ||
+ | Estos datos se pueden enviar: | ||
+ | en la cabecera (método GET) | ||
+ | en el cuerpo del mensaje (método POST) | ||
+ | }} | ||
+ | |||
<source lang=html4strict style="width:50%"> | <source lang=html4strict style="width:50%"> | ||
− | <form action=" | + | <form action="datos.php" method="POST" |
+ | ...... | ||
+ | </form> | ||
+ | </source> | ||
+ | <source lang=html4strict style="width:50%"> | ||
+ | <form action="datos.php" method="GET" | ||
...... | ...... | ||
</form> | </form> | ||
</source> | </source> | ||
</div> | </div> | ||
− | * | + | |
− | * | + | *Este parámetro es opcional, si no se especifica por defecto toma el valor '''GET''' |
+ | |||
+ | *Cuando el método es '''GET''' las parejas se viaulizan en el URL, apareciendo como parte de él, separado por el signo interrogación con parejas '''variable=valor''', y separadas entre ellas, si hubiera varias, con el & | ||
+ | |||
{{MRM_Ejemplo| | {{MRM_Ejemplo| | ||
; Método GET | ; Método GET | ||
*HTML en el cliente: | *HTML en el cliente: | ||
*Vemos dos ''input'' de type text y con dos atributos asignados: '''''name''''' y '''''value''''': | *Vemos dos ''input'' de type text y con dos atributos asignados: '''''name''''' y '''''value''''': | ||
− | + | *1.- '''''name''''' es el que vamos a utilizar para recuperar el contenido del '''input''' en el servidor. | |
{{Tip|El '''name''' es al servidor lo mismo que el '''id''' es al cliente, con id podéis acceder a los valores de los elementos con javascript, con el ''name'' lo haremos en php}} | {{Tip|El '''name''' es al servidor lo mismo que el '''id''' es al cliente, con id podéis acceder a los valores de los elementos con javascript, con el ''name'' lo haremos en php}} | ||
− | + | *2.- '''''value''''' es el valor. Este valor se sustituye por el contenido del '''input''' del formulario. | |
<source lang=html5> | <source lang=html5> | ||
− | <form action=" | + | <form action="datos.php" method="GET"> |
Nombre | Nombre | ||
<input type=text name = 'nombre' value='maría'> | <input type=text name = 'nombre' value='maría'> | ||
Línea 141: | Línea 172: | ||
*Observamos como aparece el texto después de la url: | *Observamos como aparece el texto después de la url: | ||
<br /> | <br /> | ||
− | [[Imagen: | + | [[Imagen:form_maria_ruiz.png]] |
}} | }} | ||
Línea 149: | Línea 180: | ||
<div class="slide"> | <div class="slide"> | ||
;Atributos | ;Atributos | ||
− | *En este caso estamos indicando que cuando se envíe el formulario, se | + | *En este caso estamos indicando que cuando se envíe el formulario, se solicita al servidor un fichero (página, recurso o script) llamado '''''datos.php'''''. |
− | *La ubicación del fichero, como no se especifica, se busca en la misma ubicación donde está el fichero que actualmente está viendo el cliente. | + | *La ubicación del fichero, en este caso, como no se especifica, se busca en la misma ubicación donde está el fichero que actualmente está viendo el cliente. |
+ | *No obstante se puede especificar una ruta absoluta en lugar de relativa | ||
+ | <source lang=html5> | ||
+ | <form action="http://localhost/pruebas/datos.php" method="GET"> | ||
+ | .... | ||
+ | </source> | ||
+ | {{Tip| Tienes claro la diferencia entre ruta relativa y ruta absoluta?}} | ||
*También se especifica que los valores enviados con el formulario; irán en el cuerpo de documento usando el protocolo http, y no en el URI con el signo ? como sucede si se especificara GET. | *También se especifica que los valores enviados con el formulario; irán en el cuerpo de documento usando el protocolo http, y no en el URI con el signo ? como sucede si se especificara GET. | ||
</div> | </div> | ||
− | |||
<!--3 --> | <!--3 --> | ||
<div class="slide"> | <div class="slide"> | ||
{{MRM_Puntos clave| | {{MRM_Puntos clave| | ||
− | Tan inseguro es usar '''''GET''''' como '''''POST'''''. si queremos garantizar seguridad debemos usar '''''https''''' en lugar de '''''http'''''}} | + | |
+ | Tan inseguro es usar '''''GET''''' como '''''POST'''''. si queremos garantizar seguridad debemos usar '''''https''''' en lugar de '''''http''''' | ||
+ | ;En el caso de GET | ||
+ | <source lang=html5> | ||
+ | <form action="http://localhost/pruebas/datos.php" method="GET"> | ||
+ | .... | ||
+ | </source> | ||
+ | |||
+ | [[image:form_maria_ruiz.png]] | ||
+ | <br /> | ||
+ | ;En el caso de post | ||
+ | <source lang=html5> | ||
+ | <form action="http://localhost/pruebas/datos.php" method="POST"> | ||
+ | .... | ||
+ | </source> | ||
+ | |||
+ | Si vamos a las herramientas de diseño en el navegador, en la solapa de red o network, podemos ver: | ||
+ | [[image:form_maria_ruiz_post.png]] | ||
+ | |||
+ | }} | ||
*Por supuesto hay más atributos, el id es importante para poder acceder a ese elemento con javascript. | *Por supuesto hay más atributos, el id es importante para poder acceder a ese elemento con javascript. | ||
*Tanto '''''method''''' como '''''action''''' son necesarios para la programación web. | *Tanto '''''method''''' como '''''action''''' son necesarios para la programación web. | ||
Línea 179: | Línea 234: | ||
===Creando formularios=== | ===Creando formularios=== | ||
− | Es interesante ojear esta | + | Es interesante ojear esta página que te informa de cómo hacer formularios usando html5. |
− | + | https://developer.mozilla.org/es/docs/Learn/Forms | |
;Elemento '''''input''''' | ;Elemento '''''input''''' | ||
*Como ya hemos comentado, es un elemento de entrada de texto que se rellena en la página web que tiene el cliente, y se envía al servidor donde se puede recuperar esta información para el script a ejecutar (se recuperará durante la ejecución). | *Como ya hemos comentado, es un elemento de entrada de texto que se rellena en la página web que tiene el cliente, y se envía al servidor donde se puede recuperar esta información para el script a ejecutar (se recuperará durante la ejecución). | ||
Línea 297: | Línea 352: | ||
*La respuesta es que tiene el valor null | *La respuesta es que tiene el valor null | ||
}} | }} | ||
+ | <br /> | ||
*Esto puede crear confusiones que debemos aclarar. '''''null''''', cuando una variable tiene valor null vamos a considerar que no tiene valor, o que no ha sido delcarada. | *Esto puede crear confusiones que debemos aclarar. '''''null''''', cuando una variable tiene valor null vamos a considerar que no tiene valor, o que no ha sido delcarada. | ||
*Para comprobar probamos el siguiente código | *Para comprobar probamos el siguiente código | ||
Línea 387: | Línea 443: | ||
<head> | <head> | ||
<meta charset="UTF-8"> | <meta charset="UTF-8"> | ||
− | <meta name="viewport | + | <meta name="viewport"> |
− | + | ||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | <meta http-equiv="X-UA-Compatible" content="ie=edge"> | ||
<title>Document</title> | <title>Document</title> | ||
Línea 492: | Línea 547: | ||
<!--3 --> | <!--3 --> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
===Validando valores en el servidor=== | ===Validando valores en el servidor=== | ||
*Indistintamente de que se validen valores en el cliente, es muy importante validarlos en el servidor | *Indistintamente de que se validen valores en el cliente, es muy importante validarlos en el servidor | ||
Línea 498: | Línea 554: | ||
http://php.net/manual/es/ref.var.php | http://php.net/manual/es/ref.var.php | ||
*Cuando leemos un valor de un formulario, siempre lo vamos a leer como una cadena de caracteres, pero podremos verificar algunos valores por conversión implícita | *Cuando leemos un valor de un formulario, siempre lo vamos a leer como una cadena de caracteres, pero podremos verificar algunos valores por conversión implícita | ||
− | {{MRM_Ejemplo|Title=Algunas | + | {{MRM_Ejemplo|Title=Algunas conversiones| |
* "754" y miramos a ver si es un número, nos va a decir que sí | * "754" y miramos a ver si es un número, nos va a decir que sí | ||
*"false" o "true" si miramos a ver si es booleano, nos va a decir que no | *"false" o "true" si miramos a ver si es booleano, nos va a decir que no | ||
Línea 541: | Línea 597: | ||
*Dirección de correo electrónico. | *Dirección de correo electrónico. | ||
*Estudios realizados entre ESO, BACHILLER, CICLO FORMATIVO, GRADO UNIVERSITARIO (select) | *Estudios realizados entre ESO, BACHILLER, CICLO FORMATIVO, GRADO UNIVERSITARIO (select) | ||
+ | <!-- | ||
{{Plegable|hide|Posible solución index.php| | {{Plegable|hide|Posible solución index.php| | ||
+ | --> | ||
+ | |||
<source lang=php> | <source lang=php> | ||
<!DOCTYPE html> | <!DOCTYPE html> | ||
Línea 681: | Línea 740: | ||
}} | }} | ||
− | + | ||
</div> | </div> | ||
Línea 756: | Línea 815: | ||
<!--3 --> | <!--3 --> | ||
<div class="slide"> | <div class="slide"> | ||
+ | </div> |
Última revisión de 18:18 20 nov 2023
- Este parámetro es opcional, si no se especifica por defecto toma el valor GET
- Cuando el método es GET las parejas se viaulizan en el URL, apareciendo como parte de él, separado por el signo interrogación con parejas variable=valor, y separadas entre ellas, si hubiera varias, con el &
Ejemplo
| |
Tip: El name es al servidor lo mismo que el id es al cliente, con id podéis acceder a los valores de los elementos con javascript, con el name lo haremos en php
<form action="datos.php" method="GET"> Nombre <input type=text name = 'nombre' value='maría'> Apellido <input type=text name = 'apellido' value='Ruiz'> <br /> <input type=submit value=enviar> </form>
Dos cajas de texto y el botón submit
|
Tip: No se recomienda por temas de seguridad leer de la superglobal $_REQUEST
Nota: Las variables en $_REQUEST se proporcionan al script a través de los mecanismos de entrada GET, POST, y COOKIE y por lo tanto pueden ser manipulados por el usuario remoto y no debe confiar en el contenido...)