我有一个会话,我用它来保存用户累积的表格中的项目,直到用户想要结账。它有点像购物车,可以从表格中添加项目。
代码的逻辑细分:
问题是我的代码行为不正常。当我第一次单击“添加新资费”按钮时,它不被我的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
)
我也截了屏幕来显示这个奇怪的问题
注意我已经回显了“True Value = 6”,但是在会话的print_r中它只有5,所以我的代码缺少一个实例(n-1)。
这是我的代码打印会话数组中的所有实例,我感觉不匹配问题的一部分是由“< =”比较引起的?
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>";
}
}
php页面的粘贴框 - http://pastebin.com/petkrEck
任何想法,为什么当用户在第一次按下“添加另一个资费”按钮时,我的If语句没有捕获事件,但之后会检测到它?
感谢您的时间
圣诞快乐!
答案 0 :(得分:3)
问题在于您的代码流程。在简化的伪代码中,你这样做:
if (session is not initialized) {
set = true
count = 0;
} else {
add posted data to session
}
在第一个“添加项目”调用中,未设置会话,因此您设置了会话。然后忽略了发布的数据。
代码流应该是:
if (session is not initialized) {
set = true;
count = 0;
}
if (posting data) {
add data to session
}