2017-06-22 42 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']); 
相關問題