Foros del Web » Programando para Internet » PHP »

vaciar sesiones en cada iteración

Estas en el tema de vaciar sesiones en cada iteración en el foro de PHP en Foros del Web. Buenos días. Estoy trabajando con sesiones desde el php en el que la defino, hasta otros .php en los que utilizo dicha sesión. Todo parte ...
  #1 (permalink)  
Antiguo 26/08/2014, 01:05
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 9 meses
Puntos: 0
vaciar sesiones en cada iteración

Buenos días.

Estoy trabajando con sesiones desde el php en el que la defino, hasta otros .php en los que utilizo dicha sesión. Todo parte de una búsqueda por nombre de empresa, lo que hace es mostrarme información tantas veces como dispositivos pertenezcan a cada empresa.

Lo que sucede es que necesitaría vaciar la sesión en cada iteración, ya que me almacena el último valor escrito para la siguiente vez que hago una búsqueda.

He buscado información y tengo dudas sobre lo que utilzar (apenas he utilizado sesiones antes):

setcookie(session_name(), 0, 1 , ini_get("session.cookie_path")); // Eliminar la cookie
session_destroy(); // Destruir la sesión

Utilizo ambas funciones? Ninguna?

Espero haberme explicado bien, muchas gracias, un saludo.
  #2 (permalink)  
Antiguo 26/08/2014, 01:27
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: vaciar sesiones en cada iteración

Muy buenas,

¿has probado unset($_SESSION['ejemplo'])?

A cada vuelta, la vacías, y debería funcionar.

Un saludo!
__________________
diseño web | Clan Rol
  #3 (permalink)  
Antiguo 26/08/2014, 01:55
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: vaciar sesiones en cada iteración

unset no borra las variables de sesión?? Es que en cada información que busco me aparece una cosa... =S

Otra cosa, dónde debe ir esta función? en el .php en el que defino la sesión o en aquellos .php en los que la utilizo?

Gracias!
  #4 (permalink)  
Antiguo 26/08/2014, 02:32
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: vaciar sesiones en cada iteración

Muy buenas,

Unset() literalmente destruye una variable, y podría servirte como opción. Es decir, llegas a tu formulario para hacer una búsqueda, lo pasas a una sesión, buscas los resultados en la base de datos, los muestras y luego lo destruyes.

Aunque si tu script hace sólo eso y no necesitas que tus datos tengan una persistencia grande entre distintas páginas, sería mejor idea pasar las cosas con variables más accesibles para este tipo de cosas, como $_GET o $_POST.

¿Puedes ponernos la página del formulario y la que muestra los resultados? A ver si podemos proponerte algo más específico.

Un saludo!
__________________
diseño web | Clan Rol
  #5 (permalink)  
Antiguo 26/08/2014, 03:22
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: vaciar sesiones en cada iteración

He utilizado el unset pero no se si lo he puesto en el lugar correcto; lo que hace es ir almacenando y mostrando el resultado de ntodas las consultas que voy haciendo...

El código del .php en el que defino la sesión es este:

Código PHP:
Ver original
  1. <?php
  2.         session_start();
  3. ?>
  4.  
  5. <html>
  6.  
  7. <HEAD>
  8.     <LINK REL="stylesheet" HREF="css.css" TYPE="text/css">
  9.     <meta charset="utf-8"/>
  10. </HEAD>
  11.  
  12. <H2 align = "center">Insertar contenido por nombre de empresa</H2>
  13. <form align = "center" name = "form1" method = "post" action = "buscadorgrupo.php">
  14. <br><br>
  15. Empresa:
  16. <input align = "center" name = "busca" type = "text" autocomplete = 'off'>
  17. <input type = "submit" name = "submit" value = "Buscar">
  18. <br><br>
  19. <br><br>
  20. </form>
  21.  
  22. <body>
  23.  
  24. <?php
  25.  
  26.     //recogemos el valor que se mete en el campo de texto mediante post
  27.     $busca = $_POST['busca'];
  28.  
  29.         //Aquí va la conexión a la BBDD
  30.            
  31.     if($busca!=""){
  32.  
  33.         $busqueda = "SELECT * FROM dispositivos WHERE nombre_de_la_empresa LIKE '%$busca%'";
  34.         $result = mysql_query($busqueda);
  35.  
  36.             echo "<table align = 'center' cellspacing='10' cellpadding='10' border='3'>";
  37.             echo "<tr>";
  38.    
  39.                 echo "<td>";
  40.                 echo "<table align = 'center' cellspacing='2' cellpadding='2' border='1'>";
  41.                 echo "<TH>Id</TH>";
  42.             echo "<TH>Dispositivos</TH>";
  43.             echo "<TH>Fecha de creación</TH>";
  44.  
  45.             while($fila = mysql_fetch_array($result)){
  46.  
  47.                 echo "<tr>";
  48.  
  49.                 echo "<td align = 'center'>$fila[id]</td>";
  50.                 echo "<td align = 'center'>$fila[Dispositivos]</td>";
  51.                 echo "<td align = 'center'>$fila[nombre_de_la_empresa]</td>";
  52.  
  53.                 echo "</tr>";
  54.  
  55.             }
  56.                
  57.                 echo "</table>";
  58.             echo "</td>";
  59.  
  60.  
  61.             echo "<td>";
  62.                 echo "<table align = 'center' cellspacing='2' cellpadding='2' border='1'>";
  63.                 echo "<TH>Grupos</TH>";
  64.                
  65.                 include("grupos.php");
  66.                 $Con = new grupos();
  67.                 $Con -> hacer_grupos();        
  68.                
  69.                 echo "</table>";
  70.             echo "</td>";  
  71.  
  72.             echo "</tr>";
  73.             echo "</table>";
  74.  
  75.             $_SESSION['buscar'] = $busca;
  76.  
  77.     }
  78.  
  79. //unset($_SESSION['buscar']);
  80.  
  81. ?>
  82.  
  83.  
  84. </body>
  85. </html>

El código del .php grupos.php, al que apunta el include es el siguiente:

Código PHP:
Ver original
  1. <?php
  2.         session_start();
  3. ?>
  4. <html>
  5. <head>
  6. <LINK REL="stylesheet" HREF="css.css" TYPE="text/css">
  7. <meta charset = "utf-8"/>
  8. </head>
  9. <body>
  10.  
  11. <?php
  12.     class grupos{
  13.         function hacer_grupos(){
  14.  
  15.             //Aquí va la conexion a la BBDD
  16.  
  17.             $busca = $_SESSION['buscar'];
  18.            
  19.             $busqueda = "SELECT * FROM dispositivos WHERE nombre_de_la_empresa LIKE '%$busca%'";
  20.             $result = mysql_query($busqueda);
  21.  
  22.             $busqueda2 = "SELECT nombre_grupo FROM grupos WHERE nombre_de_la_empresa LIKE '%$busca%'";
  23.             $result2 = mysql_query($busqueda2);
  24.    
  25.             while($fila = mysql_fetch_array($result)){
  26.  
  27.                 while($fila2 = mysql_fetch_array($result2)){
  28.  
  29.                     echo "<tr>";
  30.                     echo "<td align = 'center'>$fila2[nombre_grupo]</td>";
  31.                     echo "</tr>";
  32.                 }
  33.                
  34.             }
  35.         }
  36.     }
  37.  
  38. ?>
  39.  
  40. </body>
  41. </html>

Muchas gracias de nuevo!
  #6 (permalink)  
Antiguo 26/08/2014, 03:38
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: vaciar sesiones en cada iteración

Muy buenas,

Corrígeme si me estoy equivocando:
Quieres sacar todos los dispositivos y grupos que pueda tener una empresa concreta... ¿No?

Si esto es así, puedes hacerlo todo sin necesitar sesiones, sólo con un par de cambios. A ver si te sirve esto:

1. En la línea 27 del primer script haces:
Código PHP:
Ver original
  1. $busca = $_POST['busca'];
Pues bien, con esto ya puedes tener lo que quieres.

2. Ya un poco más abajo, hacia la línea 67 haces esto:
Código PHP:
Ver original
  1. include("grupos.php");
  2. $Con = new grupos();
  3. $Con -> hacer_grupos();

Pues a lo que haces la función, ya pásale el argumento que quieres buscar:
Código PHP:
Ver original
  1. $Con -> hacer_grupos($busca);

3. En el segundo script, la función habría que retocarla para que cogiese el argumento de entrada:
Código PHP:
Ver original
  1. function hacer_grupos($getvalue){
  2.  
  3.            
  4.             $busqueda = "SELECT * FROM raspberries WHERE nombre_de_la_empresa LIKE '%$getvalue%'";
  5.             $result = mysql_query($busqueda);
  6.  
  7.             $busqueda2 = "SELECT nombre_grupo FROM grupos WHERE nombre_de_la_empresa LIKE '%$getvalue%'";
  8.             $result2 = mysql_query($busqueda2);
  9.    
  10.             while($fila = mysql_fetch_array($result)){
  11.  
  12.                 while($fila2 = mysql_fetch_array($result2)){
  13.  
  14.                     echo "<tr>";
  15.                     echo "<td align = 'center'>$fila2'[nombre_grupo']</td>";
  16.                     echo "</tr>";
  17.                 }
  18.                
  19.             }
  20.         }

Y ya debería funcionar. Si todo esto es así, ya podrías despreocuparte de esa sesión. Eso si, recuerda que cuando haces un include, a efectos del script que estás generando es COMO SI ESTUVISIE AHÍ, por lo que todo lo que hay encima de la definición de la clase y las funciones... Lo que viene siendo html no es necesario. Al hilo de las sesiones, ten en encuenta que la sesión la estabas definiendo por debajo del include, la creación del objeto, la llamada a la función...

Espero que te sea de ayuda!

Un saludo!
__________________
diseño web | Clan Rol
  #7 (permalink)  
Antiguo 26/08/2014, 05:07
 
Fecha de Ingreso: junio-2014
Mensajes: 101
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: vaciar sesiones en cada iteración

Funciona a la perfección! =) pero quería comentarte una cosa con respecto a lo que me dices de las sesiones:

"Al hilo de las sesiones, ten en encuenta que la sesión la estabas definiendo por debajo del include, la creación del objeto, la llamada a la función... "

No entiendo qué implicación tiene esto... si me lo puedes aclarar. Muchisimas gracias!!
  #8 (permalink)  
Antiguo 26/08/2014, 05:15
Avatar de toledo_nocturno  
Fecha de Ingreso: agosto-2011
Ubicación: Under the northen star
Mensajes: 86
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: vaciar sesiones en cada iteración

Muy buenas,

me alegro de que funcione :D :D :D

Sobre lo de las sesiones, te explico con un ejemlo:

Código PHP:
Ver original
  1. $a = 1;
  2. $c = $a+$b;
  3. $b = 3;
  4. echo $c; //Será 1, y no 4

En tu función llamabas a la sesión, pero esta no había sido definida hasta DESPUÉS de ese código. Lo suyo es que la declarases ANTES, para que tu función pudiera manipularla. No es que tenga relevancia, ya que las hemos quitado de en medio, pero era una simple apreciación. Espero que te valga para tus futuros scripts ;)

Un saludo!
__________________
diseño web | Clan Rol

Etiquetas: cada, sesiones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:34.