2017-06-22 40 views
1

我已经1 PHP页面命名为下面的代码session1.php:

<?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']); 
 
}

它输出:

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) 

然后我用下面的代码设置名为session2.php的第二个PHP页面:

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

但session2.php只有ouputts:

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

我期待的结果应该是一样与session1.php(2列)。任何人都有这个解释?

+0

其实你不用2个阵列。你用第二个覆盖第一个数组。 – Dinei

+0

我也想知道:$ _SESSION ['tag'] [] = $ row中这个[]是什么意思; ?我不知道这就是为什么不使用它的意思。我在哪里可以学到这些? –

回答

1

您可以在第一个php文件的while循环中调用print_r(),该文件可能会执行很多次,并且会话值已被修改。

将您的代码更改为此,即可。

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

} 
print_r($_SESSION['tag']); 
+0

我试过了。我首先工作。但是,如果我刷新页面,阵列得到双倍,再次刷新,它得到三倍..为什么? –

+0

您可以在while循环之前将其设置为空数组。 –

+0

现在,它的工作。只是一个问题,Dreamweaver在这行红色标记红色的语法errot:$ _SESSION ['tag'] = [];但仍然有效。为什么? –

1

你的第一页是从内部分配$_SESSION['tag']一个循环:

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

因为你是分配给一个变量,而不是推到一个数组,每次你做的您将覆盖存储在会话变量中的所有现有内容。

要解决这个问题,你可以直接将数组分配到$_SESSION变量,如:

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

输出似乎是正确的第一页,因为你的打印语句是之内的while循环。变量被写入,打印出来,然后被覆盖,然后再打印出来。

希望这会有所帮助! :)

+0

我试过了。我首先工作。但是,如果我刷新页面,阵列得到双倍,再次刷新,它得到三倍..为什么? –

+0

您需要事先**清除阵列。在将查询结果添加到数组之前,通过将其设置为空数组,您不会复制数据。我已经更新了我的答案来解决这个问题。 –

+0

我也想知道:这个[]在$ _SESSION ['tag'] [] = $ row中是什么意思; ?我不知道这就是为什么不使用它的意思。我在哪里可以学到这些? –

0

$_SESSION['tag']不是一个数组而是一个variable.You看到两个阵列,因为你运行print_r两次。

您可以比较下面两个代码:

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

,另一个是:

while($row = mysqli_fetch_array($result)) { 
    $_SESSION['tag'][] = $row; //This is appending the variable to the array 
} 
print_r($_SESSION['tag']); 
相关问题