|
|
Línea 240: |
Línea 240: |
| <input type="submit" value="Haz click" name="enviar"> | | <input type="submit" value="Haz click" name="enviar"> |
| <input type="hidden" name="accesos" value=<?php echo $accesos?> /> | | <input type="hidden" name="accesos" value=<?php echo $accesos?> /> |
− | <h3>Has realizado <?php echo $accesos ?> acceso<?php echo $accesos>1? "s": null; ?> </h3> | + | <h3>Has realizado<source lang=php> <?php echo $accesos ?> acceso<?php echo $accesos>1? "s": null; ?></source><source lang=html5> </h3> |
| </form> | | </form> |
| </body> | | </body> |
Revisión de 11:29 29 oct 2017
Redirigiendo páginas
- Imaginemos que queremos hacer una página donde pidamos al usuario nombre y password.
- El password va a ser 12345. Si el password es correcto iremos a otra página en la que le queremos dar la bienvenida con el nombre que introdujo.
- Pensemos en cómo podemos pasar ese nombre a la página.
</div>
- Analicemos las maneras de hacerlo, pero previamente veamos una función muy interesante.
- La usaremos en muchas ocasiones, y sirve para invocar a otras páginas en un momento dado
- header(....);
- header() se usa enviar encabezados HTTP sin formato.
- Con esta cabecera http, podemos invocar una determinada url que queremos cargar, así que es ahí donde podemos hacer referencia a la página que queremos ver.
- Por ahora la usaremos de dos maneras para un mismo cometido
- Cargar una página inmediatamente
header("Location:URL_de_la_página");
- Cargar una página con un tiempo de demora (por ejemplo para leer un mensaje)
header ("Refresh:5; url=URL_de_la_pagina");
- Ahora estamos en condiciones de probarlas con el ejemplo anterior.
- Como siempre recuerdo que es muy importante entender las acciones que se van haciendo.
- Después de ejecutar la función header con redirección, no tiene sentido que se ejecute el resto del script, por lo que es aconsejable y útil poner la función de finalización de script exist().
Referenciando la propia página
- A veces puede ser que en la propia página tengamos el código que queremos que se ejecute cuando hacemos un click en el botón submit.
- Esto simplifica el número de páginas que tenemos en nuestro desarrollo.
- En el desarrollo web, hay una tendencia llamada SPA Simple Page Application
https://juanda.gitbooks.io/webapps/content/spa/arquitectura_de_un_spa.html
- Esta sería la forma de conseguirlo desde el desarrollo php.
- En este caso tenemos la siguiente situación:
- En la imagen vemos una forma de proceder
- Creamos una página web con un formulario, donde el atributo action tiene como valor el nombre de la página actual. Este valor lo podemos escribir explícitamente o bien usar el valor de $_SERVER['PHP_SELF'] que contiene el nombre del archivo de script ejecutándose actualmente, relativa al directorio raíz de documentos del servidor.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action=""<?PHP echo $_SERVER['PHP_SELF']?> method="POST">
<input type="submit" value="enviar" name="enviar">
</form>
</body>
</html>
o bien poner el nombre del fichero o script, en este caso suponemos index.php.
<form action="index.php" method="POST">
- En el caso de index.php se puede poner un punto, por lo que se podría sustituir la etiqueta del form.
<form action="." method="POST">
<source>
*Dentro de la ejecución del script, tenemos que ver si es la primera vez que se carga la página o no.
*Es decir puede ser que esté cagando la página por que he escrito en la url la página o porque he realizado un click sobre el botón submit del formulario correspondiente.
*Dentro del código, esto lo podemos saber interrogando si existe la variable del formulario que corresponde al submit '''''$_POST['enviar']'''''
<source lang=php>
<?php
if isset($_POST['enviar']){
//En este caso estamos cargando este fichero
//por que hemos hecho click en el botón submit
}else{
//Lo que queramos que se ejecute si no hemos hecho click
//o nada si no queremos contemplar esta situación
}
*/?>
<!doctype html>
.........
Actividad
Haz una página de bienvenida que muestre los datos de usuario y pass al acceder al sistema
- Se tiene que hacer en una única página
Posible solución datos_acceso.php |
---|
<?php
/**
* Created by PhpStorm.
* User: manuel
* Date: 28/10/17
* Time: 23:44
*/
if (isset($_POST['enviar'])){
echo "hasd";
$nombre = $_POST['nombre'];
$pass= $_POST['pass'];
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<?php
if (isset($nombre)){
echo "<h1>Bienvenido a este sitio web</h1>";
echo "<h2>Nombre $nombre Password $pass</h2>";
}else{
?>
<!-- Esta parte html solo se muestra en el caso del else-->
<form action="datos_acceso.php" method="POST" >
Nombre <input type="text" name="nombre" id=""><br />
Password <input type="text" name="pass" id=""><br />
<input type="submit" value="enviar" name="enviar">
</form>
<?php }?><!-- Fin del else de php -->
</body>
</html>
|
- Formulario de acceso
- Una vez dado el botón enviar
|
Pasando información de una página a otra
- Partimos de dos puntos básicos e importantes:
- La programación web está basada en el protocolo http
- El protocolo http es un protocolo sin estado
|
- Cada vez que cargamos una página web, hay una solicitud ante la cual, el servidor web si se cumplen todas las condiciones, entrega al cliente la página solicitada.
- En caso de que la página ejecutada tenga código php (extensión del fichero), el servidor web ejecuta dicho código y entrega como parte de la página el resultado de la ejecución.
- El servidor no tiene en cuenta a quién entrega la página, no sabe si es la primera vez que te entrega la página o la enésima vez que lo hace.
- Si quiere mantener información entre diferentes páginas, se ha de gestionar por programación.
- Una manera ya le hemos visto usando la función de cabecera header
header (Location:url?variable1=valor&variable2=valor)
- Usando campos ocultos
- Otra manera es usando campos ocultos
- Veamos su funcionamiento
- Hay situaciones donde queremos recopilar además de la información que el usuario rellena, algún dato más.
- Supongamos que queremos saber las veces que una página se invoca a sí mismo
- Cualquiera pensaría en crear una variable, y cada vez que llamemos a la página incrementar en una unidad.
- Cada vez que llamemos a la página siempre que el usuario se haya identificado vamos a especificar las veces que ha invocado a la página.
- Para ello necesitamos enviar a la página del servidor la información de las veces que se ha invocado a la página.
- La idea es que en campo oculto contenga ese valor, el servidor lea este valor, lo incremente y lo vuelva almacenar en el campo oculto.
<input type="hidden" name="valorOcultoaRescatar" value="$variable">
Actividad
Implementa el programa anterior y verifica su funcionamiento
Posible solución |
---|
<?php
/**
* Created by PhpStorm.
* User: manuel
* Date: 29/10/17
* Time: 0:15
*/
$accesos = $_POST['accesos'];
$accesos++;
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="click_accesos.php" method="POST">
<h2>Haz click sobre el botón</h2>
<input type="submit" value="Haz click" name="enviar">
<input type="hidden" name="accesos" value=<?php echo $accesos?> />
<h3>Has realizado<source lang=php> <?php echo $accesos ?> acceso<?php echo $accesos>1? "s": null; ?> </h3>
</form>
</body>
</html>
|
|