运行用户输入PHP验证会导致空SESSION数组

时间:2014-12-13 19:34:50

标签: php validation session shopping-cart

我正在做一个简单的购物车。我不确定如何描述我的问题。我有两页。 1st每个项目旁边都有复选框。第二个在SESSION中创建一个空数组,然后在循环中,将所有选中的项目推送到会话数组并打印出项目数。第二页还有一个用于输入用户详细信息的表单,该表单使用PHP而不是JS进行验证。问题是当提交该表单时,第二页被重新加载,会话数组变为空,因为$ _SESSION ['cart'] = array();被触发了。提交第一页在第二页中给出了正确的结果,但是在第二页中提交表单时这些结果变为0。两个页面都有:session_start();在顶部。

以下是第一页的关键代码:

<form name="form" method="POST" id="form" action="cart.php">
<input type=checkbox name=cart[item1]>
<input type=checkbox name=cart[item2]>…etc

第2页(cart.php):

include "Validation.php";
$_SESSION['cart']=array();
if(isset($_POST['cart'])){
    foreach($_POST['cart'] as $checkboxID => $checkboxVal){
        array_push($_SESSION['cart'], $checkboxID);
    }
}
echo "<p>number of items in the cart = ".sizeof($_SESSION['cart'])."</p>";


<form name="form" method="POST" id="form" action="">
<input type="text" name="userEmail" id="userEmail" placeholder="e.g. me@me.com"/>
<input type="submit" class="buttun" name="buy" value="buy"/>

第3页(Validation.php):

if (isset($_POST["buy"])){
//some validation code
}

有没有办法解决这个问题?我试图在if语句中创建空数组,但结果不好。我认为使用JS验证可以解决问题,但更喜欢php验证。

谢谢

1 个答案:

答案 0 :(得分:0)

您的代码中存在很多问题。

希望您在其他地方使用session_start();,当您的页面重新加载/转到下一页时,您将丢失会话数据。

在第2部分中,您不需要声明变量。

if(isset($_POST['cart']) && !isset($_SESSION['cart']))
    foreach($_POST['cart'] as $checkboxID => $checkboxVal)$_SESSION['cart'][$checkboxID]=$checkboxVal;

如果要查看是否已使用表单,请使用隐藏的输入 <input type='hidden' name='form1' value='1'>

然后你可以使用 if(isset($_POST['form1']))...

另外,sizeof($_SESSION['cart'])应该算一算($ _ SESSION [&#39; cart&#39;])