我有一個會話,我用它來保存用戶積累的表單中的項目,直到用戶想要結賬。它有點像購物車,可以從表單中添加項目。
的代碼邏輯分解:
- 頁面加載時,會議開始
- 如果$ _SESSION [ '設置']沒有設置然後將其設置爲TRUE。
- 顯示頁面和表單的其餘部分。
- 用戶點擊「添加另一個項目」按鈕。
- 頁面數據自動發佈
- 頁面檢查是否設置了$ _SESSION ['set'] = True和$ _POST ['add_item']。
- Page在數組中創建一個會話變量,並向這些會話添加發布的值。
- 頁爲單位$ _SESSION [「tariff_count」]如果要添加更多的需求
的問題是,我的代碼是不是表現爲它應該。當我第一次點擊「添加新的關稅」按鈕時,它不會被我的if功能所捕獲。這應該立即被捕獲。但是,當我再次按下按鈕時,它終於可以工作,並將一個項目添加到我的會話中。
下面是代碼:
//start a session to remember tariff items
session_start();
//testing the session array
print_r($_SESSION);
//destroy session if this character is found in URL string
$des = $_GET['d'];
if($des == 1)
{
session_destroy();
}
//checks to see if session data has been set
//if a session variable count is set then
if ($_SESSION['set'] == TRUE)
{
//perform a check to ensure the page has been called by the form button and not been accidently refreshed
if(isset($_POST['add_tariff']))
{
//if user clicks Add another tariff button then increase tariff count by one
//temp variable set to the current count of items added
$count = $_SESSION['tariff_count'];
$_SESSION['tariff_name'][$count] = $_POST['tariff_name'];
$_SESSION['tariff_net'][$count] = $_POST['tariff_net'];
$_SESSION['tariff_inclusive'][$count] = $_POST['tariff_inclusive'];
$_SESSION['tariff_length'][$count] = $_POST['tariff_length'];
$_SESSION['tariff_data'][$count] = $_POST['tariff_data'];
//increment tariff count if more data needs to be added to the sessions later.
$_SESSION['tariff_count']++;
}
}
//if no session data set then start new session data
else
{
echo "session set";
$_SESSION['set'] = TRUE;
$_SESSION['tariff_count'] = 0;
}
的代碼似乎是捏造我Sesssion數據的陣列。我在會議中添加的所有項目都顯示在一個表格中。
但是,如果我的表顯示六個項目,如果我做了會話的print_r,它只顯示數組中有4個項目?我測試了它,以確保我不重印數組中的相同實例。
這是數組的print_r,顯示六行,但這個數組中只有四行?
[tariff_count] => 5 [tariff_name] => Array (
[0] => STREAM1TARIFF [1] => STREAM1TARIFF [2] => CSS [3] => CSS [4] => CSS
)
我有采取截圖,以及展現這個奇怪的問題
注意我已經迴應了「真值= 6」,但在會議的print_r它只有5 ,所以我的代碼丟失了一個實例(n-1)。
這是我的代碼打印會話數組中的所有實例,我有一種感覺是不匹配問題的一部分是由「< =」比較造成的? PHP頁面的
if(isset($_SESSION['tariff_count']))
{
for ($i = 0; $i <= $count; $i++)
{
echo "<tr>";
echo "<td>".$_SESSION['tariff_name'][$i]."</td>";
echo "<td>".$_SESSION['tariff_net'][$i]."</td>";
echo "<td>".$_SESSION['tariff_inclusive'][$i]."</td>";
echo "<td>".$_SESSION['tariff_length'][$i]."</td>";
echo "<td>".$_SESSION['tariff_data'][$i]."</td>";
echo "</tr>";
}
}
粘貼斌 - http://pastebin.com/petkrEck
任何想法,爲什麼當用戶按下「添加其他關稅」按鈕,它按下第一次我的if語句沒有捕獲事件,但隨後檢測之後呢?
感謝您的時間
聖誕快樂!
請你能也顯示形式與它有關被提交的方式,HTML和任何JavaScript? – DaveRandom 2011-12-21 14:08:07
@DaveRandom - pastebin鏈接http://pastebin.com/petkrEck – kaleeway 2011-12-21 14:11:44
@loosebruce:這不是你要找的答案,而是你的數組有一個從零開始的索引。如果仔細觀察,發佈'[tariff_count] => 5'(從您的print_r)時,實際上有5個項目(0,1,2,3,4)。 – netcoder 2011-12-21 14:42:25