Diferencia entre revisiones de «Usuario:ManuelRomero/NewPHP/B2T1/formularios/ejercicios»
De WikiEducator
Línea 6: | Línea 6: | ||
* [[Usuario:ManuelRomero/PHP/Ejercicios/ejercicio3| Recorrer un array complejo]] | * [[Usuario:ManuelRomero/PHP/Ejercicios/ejercicio3| Recorrer un array complejo]] | ||
}} | }} | ||
+ | === Contador de accesos=== | ||
+ | <br /> | ||
+ | {{Actividad| | ||
+ | *Con lo que hemos visto hasta ahora (sin usar cookies, ni sesiones, ni ficheros) | ||
+ | Haz un programa que cuente cuantos accesos hacemos a una página en una misma conexión}} | ||
+ | |||
+ | *Usa campos ocultos para pasar información | ||
+ | ====Planteando una posible solución ==== | ||
+ | La idea es la siguiente | ||
+ | *Cada vez que yo cargo una página php, el servido la ejecuta como si fuera la primera vez que la solicito. | ||
+ | *No hay memoria entre una llamada y otra. | ||
+ | *Las solicitudes al servidor son solicitudes usando el protocolo http. | ||
+ | *Este hecho deja patente y clara la idea de que '''''http''''' es un protocolo sin estado. | ||
+ | *En el ejemplo vemos como cada acceso es como si fuera el primero. Cada vez que se ejecuta el script en el servidor es como se se ejecuta la primera vez | ||
+ | [[Archivo:EjerccioAcceso1.png]] | ||
+ | *El siguiente código no tiene sentido | ||
+ | <source lang=php> | ||
+ | .... | ||
+ | $acceso ++ | ||
+ | ... | ||
+ | echo "Actualmente llevamos $acceso accesos"; | ||
+ | </source> | ||
+ | *Cada vez que se ejecute $accesos valdrá 0. | ||
+ | SOLUCION | ||
+ | *Debemos mantener un histórico de cada acceso | ||
+ | *El servidor lee la información que le envía el cliente de los input de su formulario | ||
+ | *Debemos ir poniendo en un campo oculto esa información y que el servidor | ||
+ | #Lea ese valor (los accesos que lleva, al principo valdrá 0) | ||
+ | #La incremente en una unidad | ||
+ | #La vuelva a enviar al cliente, y así el cliente la próxima vez se la envía al servidor (Un efecto de pelota contra la pared) | ||
+ | [[Archivo:EjerccioAcceso2.png]] | ||
+ | ====Un posible código==== | ||
+ | ;Código | ||
+ | <source lang=php> | ||
+ | <!DOCTYPE html> | ||
+ | <html> | ||
+ | <head> | ||
+ | <meta charset="ISO-8859-1"> | ||
+ | <title></title> | ||
+ | </head> | ||
+ | <body> | ||
+ | <?php | ||
+ | |||
+ | //Esta parte del código solo quiero que se ejecute | ||
+ | //Si se ha cargado el formulario | ||
+ | if ( isset($_POST['enviar'] ) ) { | ||
+ | $accesos = $_POST[ 'accesos' ]; | ||
+ | }else | ||
+ | $accesos=0; | ||
+ | //Visualizo los accesos si los hay | ||
+ | echo "Accesos : $accesos"; | ||
+ | $accesos ++; | ||
+ | |||
+ | ?> | ||
+ | <form action="." method=POST> | ||
+ | <input type="submit" value="Acceder al sitio web" name="enviar" /> | ||
+ | <input type="hidden" value="<?php echo $accesos ?>" name="accesos" /> | ||
+ | </form> | ||
+ | </body> | ||
+ | </html> | ||
+ | </source> |
Revisión de 11:15 3 nov 2016
Contador de accesos
- Usa campos ocultos para pasar información
Planteando una posible solución
La idea es la siguiente
- Cada vez que yo cargo una página php, el servido la ejecuta como si fuera la primera vez que la solicito.
- No hay memoria entre una llamada y otra.
- Las solicitudes al servidor son solicitudes usando el protocolo http.
- Este hecho deja patente y clara la idea de que http es un protocolo sin estado.
- En el ejemplo vemos como cada acceso es como si fuera el primero. Cada vez que se ejecuta el script en el servidor es como se se ejecuta la primera vez
- El siguiente código no tiene sentido
.... $acceso ++ ... echo "Actualmente llevamos $acceso accesos";
- Cada vez que se ejecute $accesos valdrá 0.
SOLUCION
- Debemos mantener un histórico de cada acceso
- El servidor lee la información que le envía el cliente de los input de su formulario
- Debemos ir poniendo en un campo oculto esa información y que el servidor
- Lea ese valor (los accesos que lleva, al principo valdrá 0)
- La incremente en una unidad
- La vuelva a enviar al cliente, y así el cliente la próxima vez se la envía al servidor (Un efecto de pelota contra la pared)
Un posible código
- Código
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title></title> </head> <body> <?php //Esta parte del código solo quiero que se ejecute //Si se ha cargado el formulario if ( isset($_POST['enviar'] ) ) { $accesos = $_POST[ 'accesos' ]; }else $accesos=0; //Visualizo los accesos si los hay echo "Accesos : $accesos"; $accesos ++; ?> <form action="." method=POST> <input type="submit" value="Acceder al sitio web" name="enviar" /> <input type="hidden" value="<?php echo $accesos ?>" name="accesos" /> </form> </body> </html>