【问题标题】:Running user input PHP validation results in empty SESSION array运行用户输入 PHP 验证会导致空的 SESSION 数组
【发布时间】:2014-12-13 19:34:50
【问题描述】:

我正在做一个简单的购物车。我不确定如何描述我的问题。我有两页。第一个在每个项目旁边都有复选框。第二次在会话中创建一个空数组,然后在循环中,将所有选中的项目推送到会话数组并打印出项目数。第二页还有一个用于输入用户详细信息的表单,该表单使用 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

第二页(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"/>

第三页(Validation.php):

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

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

谢谢

【问题讨论】:

    标签: php validation session shopping-cart


    【解决方案1】:

    你的代码有很多问题。

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

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

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

    当您想查看某个表单是否已被使用时,请使用隐藏输入 &lt;input type='hidden' name='form1' value='1'&gt;

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

    另外,sizeof($_SESSION['cart']) 应该是 count($_SESSION['cart'])

    【讨论】:

    • 感谢您的快速回复。是的,我正在使用 session_start()。我尝试在 Validation.php 中也使用它,但它说会话已经开始。我删除了数组,现在我的代码变得更好了。如果我添加 "&& !isset($_SESSION['cart'])" 它不会按预期工作,所以我删除并替换了 array_push 但会话没有更新到新的选中复选框!
    • 如果我返回第一页并取消选中复选框,它不会更新 SESSION
    • 而不是 !isset 尝试 empty($_SESSION['cart')。你也不想包含Validation.php,因为你想在“购买”按钮之后去那里。两个代码都可以在同一页面上,因为它由if (isset($_POST["buy"])) 分隔
    • 当您返回第 1 页时,您必须向用户展示他们选择的内容。因此,您将使用会话中的值在表单中回显所选值。要让这个表格发挥作用,你需要学习很多东西。
    • 现在会话工作正常。每当用户返回第一页时,我都会取消设置它。由于我想在第二页中显示有关验证的错误消息,因此我不想转到验证页面。当用户输入正确时,Validation.php 具有指向第 4 页 Confirmation.php 的 header()。我刚刚发现 POST 只处理一个变量,即购物车。因此,当我点击购买时,“if(isset($_POST['inCart'])){...}” 不会执行。如果我添加 "if(isset($_POST['inCart']) || isset($_POST['purchase']) ){..}" 我在 $_POST['cart'] 上得到未定义的索引错误:s
    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多