女士們,先生們,PHP會議似乎並沒有保持提交的表單值
我發現了一個很奇怪的行爲,我無法解釋:
假設你有
- 多個表單元素的頁面,可能由php提供
- 每個表單都有一個唯一名稱的輸入字段
- 在該頁面的開始會話將開始
- 你存儲在$ _SESSION變量
這樣每貼的輸入值:
<?php
session_start();
$_SESSION["Test"] = "Hello";
foreach ($_POST as $name => $value) {
//echo "_POST: " . $name . ":" . $value . "<br>";
$_SESSION[$name] = $value;
//session_commit();
}
for ($i = 0; $i < 10; $i++) {
echo "<form action=\"multiform.php\" method=\"post\">Value for input $i: <input type=\"text\" name=\"input".$i."\"></form>\n";
}
print_r($_SESSION);
?>
如果使用上面的代碼中,只有「測試」 =「你好」會後的持續刷新頁面。無論哪個輸入值已由foreach發佈並存儲到會話中,它將在刷新後消失。
現在最有趣的部分:
如果名稱添加到這樣的形式...
echo "<form name=\"form$i\" action=\"multiform.php\" method=\"post\">Value for input $i: <input type=\"text\" name=\"input".$i."\"></form>\n";
...張貼的值將被保存即可。
但是爲什麼? 表單名稱與$ _SESSION的持久性有什麼關係?
編輯:如果輸入的名稱僅包含數字,這個問題似乎arraise:
<input type=\"text\" name=\"$i\">
感謝clarifyng這一點。 揚
EDIT2:
如果$ _SESSION數組存取密鑰僅包含數字,PHP顯然不堅持的價值觀,所以這樣的事情,也不會被保存:
<?php
session_start();
for ($i = 1; $i < 10; $i++)
{
$_SESSION[$i] = "Hello $i";
}
?>
混亂的部分是,如果你只是在for循環,該宏將會做一個
print_r($_SESSION)
升展1-10囉1..10 ...... 雖然,刷新之後就不見了......
嗯。也許,它是以表單形式存儲值的瀏覽器。 'session_start'可以在每次重新加載時清除會話(不確定,從未使用會話)。嘗試在不同的瀏覽器中測試。 – kirilloid 2012-03-14 11:08:57
我做到了。全部都一樣。 但我剛剛發現,如果輸入名稱只包含數字,它們將不會持續在會話中! – janhamburg 2012-03-14 11:15:47
multiform.php中有什麼?我通過將表單直接發送回自我來測試它,並且它工作正常。 – budwiser 2012-03-14 11:18:27