Pregunta:
Fecha: 08-09-2015 11:26:31
(En Español)
Escriba un formulario que solicite nombres y los almacene en una sesión hasta que el usuario cierre la sesión.
El formulario contiene un campo para escribir un nombre (una o varias palabras).
El formulario muestra los nombres que se han escrito anteriormente.
La página contiene un enlace para cerrar la sesión.
Tengo hecha las siguientes partes.
Donde recibo el dato y vuelvo para el index.php
El problema es que no puedo mostrar los datos una abajo del otro, por que piso lo que hay en $_SESSION['nombre'].
Una idea que se me ocurrio es cuando mando el dato lo guardo en un array y se lo paso a $_SESSION['nombre']
Ejemplo asi
Pero no puedo realizarlo, espero su respuesta y desde ya gracias.
Votos: 1 - Respuestas: 11 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
Ejercicio PHP Sesiones.[Resuelta]
Buenas comunidad, tengo un problema para resolver este enunciadoEscriba un formulario que solicite nombres y los almacene en una sesión hasta que el usuario cierre la sesión.
El formulario contiene un campo para escribir un nombre (una o varias palabras).
El formulario muestra los nombres que se han escrito anteriormente.
La página contiene un enlace para cerrar la sesión.
Tengo hecha las siguientes partes.
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ejercicio</title> <meta http-equiv="Content-type" content="text/html;charset=UFT-8"> </head> <body> <form action="nombre.php" method="get"> <table align="center" border="0"> <tr> <th colspan="2">Ejercicio Sesiones</th> </tr> <tr> <td>Ingrese su nombre:</td> <td><input type="text" name="nombre" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Enviar" /></td> </tr> </table> </form> <?php if(!count($_SESSION)) { echo 'no hay nombres'; } else { foreach($_SESSION as $valor) { echo $valor.'<br />'; } } ?> </body> </html>
Donde recibo el dato y vuelvo para el index.php
<?php session_start(); ?> <html> <head> <title>Ejercicio</title> <meta http-equiv="Content-type" content="text/html;charset=UFT-8"> </head> <body> <?php $nombre = $_GET['nombre']; $_SESSION['nombre'] = $nombre; header("location: index.php"); ?> </body> </html>
El problema es que no puedo mostrar los datos una abajo del otro, por que piso lo que hay en $_SESSION['nombre'].
Una idea que se me ocurrio es cuando mando el dato lo guardo en un array y se lo paso a $_SESSION['nombre']
Ejemplo asi
<?php session_start(); $vector = array(2,3,4,5,6,7); $_SESSION['nombre'] = $vector; foreach($_SESSION['nombre'] as $valor) { echo $valor.'<br />'; } ?>
Pero no puedo realizarlo, espero su respuesta y desde ya gracias.
Votos: 1 - Respuestas: 11 - Vistas: 20 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 08-09-2015 12:14:57 Hola
Hiendo algo rapido.
Podrias hacerlo con un array multidimensional
por ejemplo
<?php $agenda['nombre'][] = "Pedro"; $agenda['nombre'][] = "Juan"; $agenda['nombre'][] = "Luis"; echo $agenda['nombre'][0]; // pedro echo ' '; echo $agenda['nombre'][1]; //Juan echo ' '; echo $agenda['nombre'][2]; // Luis echo '<br/><br/>'; for($posicion=0;$posicion<count( $agenda['nombre']);$posicion++) { echo 'Nombre: ' . $agenda['nombre'][$posicion] . '<br />'; }
Resulta algo como:
Pedro Juan Luis ---------------------------------------------------------------------------------------- Nombre: Pedro Nombre: Juan Nombre: Luis
Lo único que quedaría es Utilizar el array con las $_SESSION.
Algo que aun no lo he probado por falta de tiempo
Espero que te sirva como punto de partida
Link para visitar
count PHP (función). Recorrer arreglos o arrays uni o multidimensionales con for y foreach.
Arrays asociativas y multidimensionales
Arrays multidimensionales
Cualquier cosa nos decis
saludos Votos: 1 - Link respuesta -
Fecha: 08-09-2015 12:26:34 Con $_SESSION seria algo asi:
<?php session_start(); // CON SESSION echo '<hr/>'; echo 'Con $_SESSION'; echo '<br/>'; $_SESSION['nombre'][] = "Pedro"; $_SESSION['nombre'][] = "Juan"; $_SESSION['nombre'][] = "Luis"; echo $_SESSION['nombre'][0]; echo ' '; echo $_SESSION['nombre'][1]; echo ' '; echo $_SESSION['nombre'][2];
de todas maneras esperemos respuestas de otros usuarios que tienen mucho mas conocimientos que yo
Votos: 0 - Link respuesta -
Fecha: 08-09-2015 12:41:10 Hola Walter, gracias por responder usando un array bidimensional creiria que andaria $_SESSION['nombre'][] = $nombre; no piso los datos y se va guardando en la ultima posición.
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ejercicio</title> <meta http-equiv="Content-type" content="text/html;charset=UFT-8"> </head> <body> <form action="index.php" method="get"> <table align="center" border="0"> <tr> <th colspan="2">Ejercicio Sesiones</th> </tr> <tr> <td>Ingrese su nombre:</td> <td><input type="text" name="nombre" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" name="submit" value="Enviar" /></td> </tr> </table> </form> <?php $nombre = $_GET['nombre']; $_SESSION['nombre'][] = $nombre; print_r($_SESSION['nombre']); ?> </body> </html>
Pero tengo una duda antes de usar un array de session, uso otro array ejemplo
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ejercicio</title> <meta http-equiv="Content-type" content="text/html;charset=UFT-8"> </head> <body> <form action="index.php" method="get"> <table align="center" border="0"> <tr> <th colspan="2">Ejercicio Sesiones</th> </tr> <tr> <td>Ingrese su nombre:</td> <td><input type="text" name="nombre" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" name="submit" value="Enviar" /></td> </tr> </table> </form> <?php $nombre = $_GET['nombre']; $vector[] = $nombre; print_r($vector); ?> </body> </html>
Por que ahi los pisa, hay alguna lógica?
¡Saludos! Votos: 0 - Link respuesta -
Fecha: 08-09-2015 14:15:53 Gonzalo, Walter
Buenas noches:
¿Por qué no probar con un explode? y el resultado lo pones uno debajo de otro
Un saludo Votos: 0 - Link respuesta -
Fecha: 09-09-2015 04:14:36 Daniel, gracias por responder y por la idea lo voy aprobar.
¡Saludos! Votos: 0 - Link respuesta -
Fecha: 09-09-2015 15:07:42 Hola
En estos momentos no cuento con una pc, estoy desde el móvil y no puedo brindarte la ayuda que mereces. Es complicado escribir en el móvil y en el lugar en donde estoy internet anda mal.
Y al no tener pc no puedo hacer ninguna prueba de códigos
Hare lo posible en cooperar en lo que me sea posible.
Quería saber como va el ejercicio. Que has hecho.
Por otro lado te aconsejo que utilices en los formularios el método POST en vez de GET
PD\\ Para valorar nuestra contribución utiliza los votos ;)
Saludos Votos: 0 - Link respuesta -
Fecha: 09-09-2015 17:00:53 Hola Gonzalo, puedes resolver toda la lógica en una misma página, tienes la solución entre todos los comentarios, intenta resolverlo y luego nos cuentas (así obtendrás más provecho). Un comentario rapido para tu código, debes tener en cuenta es que la función header() de PHP no se puede ejecutar después de haber enviado html....
Saludos! Votos: 1 - Link respuesta -
Fecha: 09-09-2015 18:14:34 En realidad no se te estaría pisando los datos.
Sucede que:
El array de SESSION los valores se mantiene en memoria hasta que expire la SESSION.
Por eso es que al recargar la página se mantiene los datos.
El array sin SESSION los valores se mantiene disponible en esa única ejecución de página, al recargar la página se inicia todo de cero como si la hubieses ejecutado por primera vez.
La magia que se mantengan los datos no es el array sino la SESSION.
Si al array le quitas SESSION los datos se perderán, hace la aprueba.
Básicamente es eso lo que sucede.
No fui muy técnico que digamos en la explicación, aún así espero que se haya entendido.
Cualquier cosa nos decís.
Saludos Votos: 2 - Link respuesta -
Fecha: 10-09-2015 04:33:15 Walter, muy buena explicación, hay veces que hay que ser menos técnico para que se entienda de una forma más clara.
Ahora bien, voy a tratar de poner luz en el punto de "Donde se guardan los datos de SESSION", descubramos la magia detras.
Lo primero que hay que decir es que las sesiones en PHP por defecto se persiste en ficheros de texto a disco (filesystem).
La función session_save_path() devuelve la ruta del directorio usado para guardar la información de sesión.
Para setear el path donde queremos comenzar a guardar esos datos se puede utilizar la función session_save_path() y/o configurar la directiva del archivo 'php.ini' -> 'session.save_path'
Digo que "por defecto" la sesión se persiste en un fichero de texto porque también se puede persistir en la base de datos, esto es un poco más avanzado, aquí algunas ideas (mirar comentarios de la comunidad) http://php.net/manual/es/function.session-set-save-handler.php
Info extra:
El identificador de sesión se propaga por cookie o URL.
Cookie: se crea una cookie en el cliente, esta es enviada en cada petición del navegador. Nombre de la cookie 'PHPSESSID'.
URL: si la cookie no esta habilitada en el cliente, se puede enviar el parametro 'PHPSESSID' con el identificador de sesión y ser capturado por GET en el servidor, siempre y cuando PHP tenga habilitada la identificación por URL (session.use_cookies =1, la identificación por URL suele estar deshabilitada porque pueden producir robo de identidad de una forma muy sencilla).
Saludos,
Fernando Votos: 2 - Link respuesta -
Fecha: 10-09-2015 08:18:14 Excelentes muchachos, muchas gracias por responder y por toda la explicación se lo agradezco mucho.
Ya lo pude realizar, despues lo que hize fue agregar un checkbox alos nombres ingresados para poder seleccionarlos y borrarlos.
Index.php
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Ejercicio</title> <meta http-equiv="Content-type" content="text/html;charset=UFT-8"> </head> <body> <form action="nombre.php" method="post"> <table align="center" border="0"> <tr> <th colspan="2">Ejercicio Sesiones</th> </tr> <tr> <td>Ingrese su nombre:</td> <td><input type="text" name="nombre" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" name="submit" value="Enviar" /></td> </tr> </table> </form> <?php if(!count($_SESSION)) { echo 'No hay nombres'; } else { echo '<form action="borrar.php" method="post"> <ul>'; foreach($_SESSION['nombre'] as $clave => $valor) { echo '<li><input type="checkbox" name="c['.$clave.']" value="'.$valor.'" />'.$valor.'</li>'; } echo '<input type="submit" value="Enviar" />'; echo '</ul> </form> '; } ?> </body> </html>
Donde recibo los datos nombre.php
<?php session_start(); function recoge($var) { $tmp = (isset($_REQUEST[$var])) ? trim(htmlspecialchars($_REQUEST[$var], ENT_QUOTES, "ISO-8859-1")) : ""; return $tmp; } $nombre = recoge('nombre'); if($nombre != "") { $_SESSION['nombre'][] = $nombre; header("location:index.php"); } else { echo 'Error en el nombre'; } ?>
Archivo Borrar.php donde me llegan los datos del checkbox y despues lo borro.
<?php session_start(); function recogeMatriz($var) { $tmp = array(); if(isset($_REQUEST[$var]) && is_array($_REQUEST[$var])) foreach($_REQUEST[$var] as $indice => $valor) { $indiceLimpio = trim(htmlspecialchars($indice, ENT_QUOTES, "ISO-8859-1")); $valorLimpio = trim(htmlspecialchars($valor, ENT_QUOTES, "ISO-8859-1")); $tmp[$indiceLimpio] = $valorLimpio; } return $tmp; } $matriz = recogeMatriz('c'); if(is_array($matriz)) { foreach($matriz as $indice => $valor) { if(isset($_SESSION['nombre'][$indice])) { unset($_SESSION['nombre'][$indice]); } } header("location:index.php"); exit(); } else { echo 'Error en la Matriz'; } ?>
Cierro sesión
<?php session_start(); session_destroy(); header("location:index.php"); ?>
¡Saludos! Votos: 2 - Link respuesta -
Fecha: 11-09-2015 10:57:55 muchas gracias por compartir el codigo completo de la solución del problema, seguro que a alguien mas le servirá ;)
Todos aprendemos algo de todos
Por otro lado sugiero que si ya ha sido resuelto, pasar la pregunta al estado [RESUELTA] ;)
igualmente en el estado [RESUELTA] se puede seguir comentando.
Saludos Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión