PHP单一复选框粘性表单 - 会话

时间:2013-02-08 11:06:45

标签: php forms validation checkbox

我遇到了一个复选框的问题,我需要将其作为简介形式的一部分,这将通过会话记住,以便用户可以浏览不同的页面,并且仍然可以记住他们返回时的复选框选择。

如果用户希望其交付详细信息与他们在表单顶部输入的结算明细相同,则会单击该复选框。无需担心如何将交付详细信息分配给帐单明细,就像我在以后的页面上那样。

注意:Javascript完全是为了这个,不要认为它需要,但只是一个抬头:)。这是发布到自身的粘性表单之一,直到满足所有条件($flag == "ok"),然后将用户发送到下一页。

我现在将提供我认为相关的代码:

PHP(这部分代码可能不相关,但我可以看到它包含它,在我将用户发送到下一页之前设置最终的$_SESSION['sameasbilling']({{1 }})

order-confirm.php

HTML / PHP

if ($flag == "ok"){
    $sameasbilling = cleanString($_POST['sameasbilling']);
    $_SESSION['sameasbilling'] = $sameasbilling;

    if (!headers_sent()){
        //send user to next page
        header("Location: order-confirm.php");
    }else{
        echo "Not Sent";
    }
}

据我所知,最重要的一段代码在上面我尝试确定是否输出checked ='checked'以及是否重置/设置'sameasbilling'会话值。

PS我已经经历了这么多次,所以我在输入元素中的IF语句非常邋but,但是当你保持在同一页面并收到错误但是当你确实记得你的选择时移动到下一页并返回您的选择不会被记住,我知道我根本没有任何代码可以实际执行此操作,但我希望有人可以建议我如何实现这一点。

3 个答案:

答案 0 :(得分:1)

这仅适用于提交输入框时的第一页。要在返回页面后使其工作,您还需要检查已设置的$ _SESSION变量。您可以尝试在if语句中添加或部分,例如。

if (!isset($_POST['sameasbilling']) && $_SESSION['sameasbilling'] != "1") {
     $_SESSION['sameasbilling'] = "";
} else { 
print ' checked="checked"';
    $_SESSION['sameasbilling'] = "1";

}

**修改

if(isset($_POST['your_submit_button'])){
        if (isset($_POST['sameasbilling'])) {
            print ' checked="checked"';
            $_SESSION['sameasbilling'] = "1";
        } else {
            $_SESSION['sameasbilling'] = "";
        }
    }else if ($_SESSION['sameasbilling'] == "1") {
        print ' checked="checked"';
    }

答案 1 :(得分:0)

headers_sent()检查您的脚本是否已经向标题发送了一些内容,例如,如果您在询问它将返回true之前将一些文本转储到输出缓冲区。

我认为你的意思是

if ($_SESSION['sameasbilling']){
    header("Location: order-confirm.php");
    exit();
}

或者如果您再次发送复选框值,请跳过此处的会话位

if (isset($_POST['sameasbilling'])){

答案 2 :(得分:0)

为了使这更具逻辑性,假设$_POST['sameasbilling']是一个复选框,我会这样做:

if(isset($_POST['sameasbilling']) && !empty($_POST['sameasbilling']))
    $_SESSION['sameasbilling'] = 1;
else
    $_SESSION['sameasbilling'] = 0;

if (isset($_POST)) //or check if the submit has been sent or even the session
{
    //send user to next page
    header("Location: order-confirm.php");
    exit();
}
else
    die("Not Sent"); //or set the header location to the previous page with an error

<input type="checkbox" id="sameasbilling" name="sameasbilling" value="1" <?php echo $_SESSION['sameasbilling'] == 1 ? 'checked="checked"' : '';?> />