Diferencia entre revisiones de «Usuario:ManuelRomero/NewPHP/B2T1/formularios/ejercicios»

De WikiEducator
Saltar a: navegación, buscar
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 10:15 3 nov 2016






Contador de accesos



Icon activity.jpg

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

EjerccioAcceso1.png

  • 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
  1. Lea ese valor (los accesos que lleva, al principo valdrá 0)
  2. La incremente en una unidad
  3. 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)

EjerccioAcceso2.png

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>