Tengo la primera página PHP llamada session1.php con el siguiente código:

<?php
session_start();

.....mysql connection...

$sql = "SELECT name1, brand, price  FROM products WHERE name1='cuvette' ORDER BY 'name1' ASC,'desc1' ASC";
$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result)) {
$_SESSION['tag'] = $row;
print_r($_SESSION['tag']);
}

Emite:

Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 9.00 [price] => 9.00 ) 
Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 8.00 [price] => 8.00 )

Luego configuré la segunda página PHP llamada session2.php con el siguiente código:

<?php
session_start();
print_r($_SESSION['tag']);
?>

Pero session2.php solo sale:

Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 8.00 [price] => 8.00 ) 

Espero que los resultados sean los mismos con session1.php (2 matrices). ¿Alguien tiene la explicación para esto?

1
P. Lau 22 jun. 2017 a las 05:58

3 respuestas

La mejor respuesta

Llama al print_r () en el bucle while del primer archivo php, que puede ejecutarse muchas veces, y el valor de la sesión ha sido anulado.

Cambie su código a esto, estará bien.

$_SESSION['tag'] = [];
while($row = mysqli_fetch_array($result)) {
$_SESSION['tag'][] = $row;

}
print_r($_SESSION['tag']);
1
Kris Roofe 22 jun. 2017 a las 03:30

$_SESSION['tag'] no es una matriz sino una variable. Usted ve dos matrices porque ejecuta print_r dos veces.

Puede comparar los siguientes dos códigos:

while($row = mysqli_fetch_array($result)) {
    $_SESSION['tag'] = $row;   //This is the assignment of variable
}
print_r($_SESSION['tag']);

Y la otra es :

while($row = mysqli_fetch_array($result)) {
    $_SESSION['tag'][] = $row;  //This is appending the variable to the array
}
print_r($_SESSION['tag']);
0
uhowep 22 jun. 2017 a las 04:08

Su primera página está asignando a $_SESSION['tag'] desde un bucle while :

while($row = mysqli_fetch_array($result)) {
  $_SESSION['tag'] = $row;
}

Debido a que está asignando a una variable, en lugar de presionar a una matriz, cada vez que realiza la asignación, sobrescribe cualquier contenido existente almacenado dentro de la variable de sesión.

Para resolver esto, puede asignar una matriz directamente a una variable $_SESSION, como:

$_SESSION['tag'] = [];
while($row = mysqli_fetch_array($result)) {
  $_SESSION['tag'][] = $row;
}

La salida parece correcta en la primera página, porque su declaración print está dentro de el ciclo while. La variable se escribe, se imprime, luego se sobrescribe y se imprime nuevamente.

¡Espero que esto ayude! :)

1
Obsidian Age 22 jun. 2017 a las 03:35