Diferencia entre revisiones de «ManuelRomero/DAW/distancia/tutorias/Tutoria2»
De WikiEducator
(→Cómo pasar varios valores en una sola variable) |
|||
Línea 1: | Línea 1: | ||
+ | |||
{{:Usuario:ManuelRomero/DAW/distancia/tutorias/nav}} | {{:Usuario:ManuelRomero/DAW/distancia/tutorias/nav}} | ||
+ | __NTOC__ | ||
<br/> | <br/> |
Revisión de 10:22 14 nov 2014
__NTOC__
|
Agenda
- Sobre la agenda hemos comentado tres conceptos
- Cómo ejecutar código php en un solo fichero
- Cómo pasar información en input de tipo hidden
- Cómo pasar varios datos de información usando una sola variable que sería un array
Ejecutar php en un solo fichero
- Muchas ocasiones queremos que el código php se ejecute en la misma página php.
- Esto implica que de alguna manera el servidor tiene que saber si esta página es la primera vez o sea que se pide por que un usuario ha tecleado el url de la página en el navegador
- O bien se solicita la página por que se ha invocado la ejecución del fichero como resultado de hacer un submit en un forfmulario.
- En la página index.php tendrá que haber un formulario p.e.
<form action=”index.php” method=”POST”> ….. <intput type=submit value=”enviar datos” name=”enviar” </form>
El código necesario dentro de la página sería
<?php if ($_POST['enviar']){ …... } ?>
- De esta forma vemos si se ha enviado el formulario.
- Por su puesto hay varias maneras pero esta es una de ellas
- Cuando se quiere invocar al mismo fichero se puede ver en el elemento form lo siguiente
- O bien escribier el nombre del fichero
<form action=”index.php” method=”POST”>
- También odemos escribir un punto
<form action=”." method=”POST”>
- Podemos tomar el valor de la variable superglobal $_SERVER, escribiendo un código php
<form action=<?php echo $_SERVER['PHP_SELF']; ?> method=”POST”>
- Aquí ponemos un ejemplo que es uno de los que vimos en la tutoría
<!DOCTYPE html> <html> <head> <title>Formulario de datos </title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <!-- Aqui empieza el código php --> <?php //Si es la primera vez que se ejecuta el formulario if (!(isset($_POST['enviar']))){ //Primera vez $usuario=""; $pass=""; } else{ if (errores()){ //Segunda o siguientes veces con error $usuario=""; $pass=""; }else{ //Todo ok y no es la primera vez que se carga la página $usuario=$_POST['usuario']; $pass=$_POST['pass']; } } /*Esta función analiza los datos de usuario y passoword para ver si hay algún error En caso de error muestra un mensaje y retorna un booleano con valor true En caso de que no haya error retorna el booleano false */ function errores(){ $usuario = $_POST['usuario']; $pass = $_POST['pass']; if ((empty($usuario))||(empty($pass))){ echo "Los campos de usuariio y pass no pueden estar vacíos"; return true; } if (strlen($usuario)<=7){ echo "La cadena de usuario debe tener más de 7 caracteres y no ".strlen($usuario); return true; } //Establemcesmos la expresión regular de números $expresion='/[0-9]/'; //Con esta función analizamos a ver si el texto $pass tiene la expresión regular $expreson if (preg_match($expresion,$pass)!=true){ echo "La pass debe tener al menos un dígito y no lo tienen ".($pass); return true; } return false; } ?> <form action=<?php echo $_SERVER['PHP_SELF'] ?> method="POST"> Inserta un numero <br> <!--Observar que el valor de las cajas de texto la obtengo ejecutando php --> usuario : <input type="text" name="usuario" value="<?php echo "$usuario"; ?>"/> Pass: <input type="text" name="pass" value="<?php echo "$pass" ;?>"/> <br> <input type="submit" value="Enviar" name="enviar"/> </form> </body> </html>
|
- Para pasar información entre el cliente y el servidor puedo usar un input de tipo hidden.
- Esto puede ser muy interesante en muchas ocasiones.
- Es muy importante recordar que http es un protocolo sin estado
- Por eso en determinadas ocasiones para recordar cosas del úlimo envío puedo usar esta sencilla estrategia
- Lógicamente hay muchas más y mas sofisticadas que iremos viendo como Bases de datos, ficheros cookies, sesiones o usar Ajax para recargar solo parte de la página manteniendo intacta el resto de información.
- Cada vez que hago una solicitud a un servidor , este me atiende como si fuera la primera vez, aunque sea la solicitud 300 y todas seguidas.
- Si por ejemplo me he validado y quiero pasar al servidor mi nombre de usuario y no volverlo a escribir se lo puedo pasar en un input de tipo hidden.
- El hecho de enviarlo en un hidden es por que sólo dentro de los formularios podemos enviar información al servidor
- Sobre este tema no pongo ejemplo, ya que lo hago en el siguiente sobre la agenda.
Cómo pasar varios valores en una sola variable
- Esto se consigue poniendo a los diferentes input el mismo nombre con corchetes.
- Cuando el servidor lea esa variable de $_POST leeré todo en un array
Hacer un programa que lea 10 enteros de 10 cajas de texto y me visualice la media <!DOCTYPE html> <html> <head> <title>Medias de notas</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width"> </head> <body> <form method="POST" action="medias.php"> Valores de notas<br/> Nota 1<input type="text" name ="notas[]"/><br/> Nota 2<input type="text" name ="notas[]"/><br/> Nota 3<input type="text" name ="notas[]"/><br/> Nota 4<input type="text" name ="notas[]"/><br/> Nota 5<input type="text" name ="notas[]"/><br/> Nota 6<input type="text" name ="notas[]"/><br/> Nota 7<input type="text" name ="notas[]"/><br/> Nota 8<input type="text" name ="notas[]"/><br/> Nota 9<input type="text" name ="notas[]"/><br/> Nota 10<input type="text" name ="notas[]"/><br/> <input type=submit value="enviar datos" name="enviar"/> </form> <?php if (isset($_POST['enviar'])){ $notas = $_POST['notas']; $suma = 0; foreach ($notas as $nota) { $suma = $suma + $nota; } echo "nota media = ".($suma / 10); } ?> </body> </html>
|
- En el caso de la agenda, fijaros que tenemos la siguiente situación.
- Al principio tengo la agenda sin valores
- Ahora inserto un nombre y teléfono(En la imagen manolo y 1111).
- En el servidor es fácil leer ese nombre y teléfono que están en las cajas de texto
- y visualziar ahora que tengo ese nombre y teléfono
<?php .... $nombre=$_POST['nombre'] $telefono = $_POST['telefono'] .... echo (" CONTACTOS ACTUALES : 1<br>"); echo "<ul>"; echo "<li>". $nombre.': '.$telefono."</li>"; echo"</ul>"; ?>
- Pero claro cuando vuelva a enviar otro nombre y teléfono perderé lo anterior
- Para evitar esto ya sabemos que podemos poner input de tipo hidden.
- Pero claro tendré que poner tantos input como contactos tenga, y se me presenta el problema de qué nombres les pongo a cada uno y cómo lo recupero luego
- La solución, como hemos visto antes es usar un array asociativo
- Mirad la idea
- Cada vez que lea el nombre y teléfono, además de leerlo en las variabes, lo guardo en un array asociativo
<?php //Esta variable son los input hidden descritos más abajo $agenda = $_POST['agenda']; .... //Los valores que acaba de insertar el usuario de la aplicación $nombre=$_POST['nombre']; $telefono = $_POST['telefono']; //Ahora los guardo en el array asociativo $agenda[] $agendda[$nombre]=$telefono; ....
- Y Lo cargo en input de tipo hidden
foreach ($agenda as $nom => $tel) { echo'<input type="hidden" name="agenda[\'$nom\']" value=\'$tel\'/>'; echo "<br>"; }
- Cualquier duda os invito a que escribáis en el foro que hay una entrada de la tutoría