2013-03-17 56 views
1

大約2個小時我正在努力解決這個問題。 我想將$ _POST變量插入$ _SESSION數組中,並將從表單發送的每個新數據附加到會話變量。 現在,當我將會話變量定義爲數組時,我是這樣說的嗎?
$ _SESSION ['name'];
或這樣
$ _SESSION [ '名稱'] =陣列();

我有兩個POST變量,我想插入每一個會話中的陣列。

這裏是形式:

<form action="action.php" method="POST" > 
<label>Moovie name: <input type="text" name="name" /></label><br /> 
<label>Price: <input type="text" name="price" /></label><br /> 
<input type="submit" value="Send" /> 
</form> 

這裏是action.php的

<?php 

session_start(); 

$_SESSION['name'] = array(); 
$_SESSION['price'] = array(); 

$name = $_POST['name']; 
$price = $_POST['price']; 

array_push($_SESSION['name'], $name); 
array_push($_SESSION['price'], $price); 

print_r($_SESSION['name']); 
echo "<br>"; 
print_r($_SESSION['price']); 

?> 

注: 如果我說

$_SESSION['name']; instead of $_SESSION['name'] = array(); 

我得到警告:array_push()預計參數1是數組,在action.php中給出null null同樣,$ _SESSION ['name']是從一開始的數組?

+0

檢查['is_array'](http://www.php.net/manual/en/function.is -array.php),如果沒有,那麼將它們設置爲數組並繼續,如果它已經被初始化,'= array()'代碼將不會被運行,所以你不會將它清空。 (或者,與PHP的工作方式一樣,你可以簡單地使用'$ _SESSION ['name'] [] = $ name;'etc等等,如果它不是一個數組,它將被設置爲一個。) – Jon 2013-03-17 11:38:18

+0

@Jon ''is_array()'仍然會觸發一個通知,這個鍵根本就不存在,同樣使用'isset()'來代替:if(!isset($ _ SESSION ['name'])){$ _SESSION [ 'name'] = array(); }' – DaveRandom 2013-03-17 11:42:29

回答

1

您每次運行腳本時都清空會話數組。

爲了避免這種情況,檢查是否陣列是已經存在於會話:

<?php 

session_start(); 


if (!isset($_SESSION['name'])) { 
    $_SESSION['name'] = array(); 
} 
if (!isset($_SESSION['price'])) { 
    $_SESSION['price'] = array(); 
}  


$name = $_POST['name']; 
$price = $_POST['price']; 

array_push($_SESSION['name'], $name); 
array_push($_SESSION['price'], $price); 

print_r($_SESSION['name']); 
echo "<br>"; 
print_r($_SESSION['price']); 

?> 
+0

謝謝,你爲我節省了大量的腦細胞 – 2013-03-17 11:47:15

相關問題