0

我的复选框有问题,我需要成为棒状表单的一部分,该复选框将通过会话记住,以便用户可以浏览不同的页面,并且在返回时仍然记住他们的复选框选择。

如果用户希望他们的交货详细信息与他们在表单顶部输入的帐单详细信息相同,则该复选框将由用户单击。无需担心我如何将交付详细信息分配给与帐单详细信息相同的内容,就像我在后面的页面中所做的那样。

注意:Javascript 完全不适合这个,无论如何都不需要它,只是提醒一下 :)。这是一种粘性表单,它会在满足所有条件之前发布到自身$flag == "ok",然后将用户发送到下一页。

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

PHP(这部分代码可能不相关,但正如我所见,我将其包括在内,$_SESSION['sameasbilling']在我将用户发送到下一页之前设置最终结果(order-confirm.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";
    }
}

HTML/PHP

<p>Same as billing address? &nbsp;&nbsp;&nbsp;
<input type="checkbox" id="sameasbilling" name="sameasbilling" value="1" 
<?php 
if (isset($_POST['sameasbilling'])) {
    print ' checked="checked"';
    $_SESSION['sameasbilling'] = "1";
} else {
    $_SESSION['sameasbilling'] = "";
}
?> />

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

PS 我已经一遍又一遍地重复了很多次,所以我在输入元素中的 IF 语句非常邋遢,但是当你停留在同一页面并收到错误但当你移动到下一页并返回您的选择不会被记住,我知道我根本没有任何代码可以真正做到这一点,但我希望有人能建议我如何实现这一点。

4

3 回答 3

1

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

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"';
    }
于 2013-02-08T11:18:33.190 回答
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"' : '';?> />
于 2013-02-08T11:24:26.787 回答
0

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

我想你的意思是

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

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

if (isset($_POST['sameasbilling'])){
于 2013-02-08T11:10:34.173 回答