【问题标题】:How to remember checkbox input in PHP Forms如何记住 PHP 表单中的复选框输入
【发布时间】:2010-03-21 22:14:42
【问题描述】:

出于可用性目的,我喜欢这样设置表单字段:

<?php

$username = $_POST['username'];
$message  = $_POST['message'];

?>

<input type="text" name="username" value="<?php echo $username; ?>" />

<textarea name="message"><?php echo $message; ?></textarea>

这样如果用户验证失败,他之前输入的表单输入仍然存在,不需要从头开始。

我的问题是我似乎无法使用用户之前选择的选项保持选中复选框(当验证失败后页面刷新时)。如何做到这一点?

【问题讨论】:

    标签: php validation forms


    【解决方案1】:

    我的第一个建议是首先使用一些客户端验证。可能是在继续之前执行验证检查的 AJAX 调用。

    如果这不是一个选项,那么试试这个:

    <input type="checkbox" name="subscribe" <?php echo (isset($_POST['subscribe'])?'checked="checked"':'') ?> />
    

    所以如果subscribe = 1,那么它应该为您选择该框。

    【讨论】:

    • 已选中="checked" 未选中
    • 已修复,抱歉。我在想
    • 如果未选中复选框,这将产生数组索引未定义警告。
    • @Asaph,好点,我把它改成了 isset。如果该值是通过 POST 发送的,则它必须为 1(表示已检查)。因此,我们可以只检查密钥是否存在。
    • @Johnson 你知道你也可以在复选框中使用 value="" 属性吗?所以它不一定是 1,但不管值是什么,如果它被选中,那么它至少是 set 。所以 isset() 是一个很好的方法
    【解决方案2】:

    例如,考虑下面的复选框代码:-

    <label for="course">Course:</label>
    PHP<input type="checkbox" name="course[]" id="course" <?php if ((!empty($_POST["course"]) && in_array("PHP", $_POST["course"]))) {
    echo "checked";
    } ?> value="PHP" />
    

    然后,它会记住“PHP”的复选框,如果它被选中,即使页面验证失败等等“n”个复选框,如下所示:-

    <label for="course">Course:</label>
            PHP<input type="checkbox" name="course[]" id="course" <?php if ((!empty($_POST["course"]) && in_array("PHP", $_POST["course"]))) {
    echo "checked";
    } ?> value="PHP" />
            HTML<input type="checkbox" name="course[]" id="course" <?php if     ((!empty($_POST["course"]) && in_array("HTML", $_POST["course"]))) {
    echo "checked";
    } ?> value="HTML" />
            CSS<input type="checkbox" name="course[]" id="course" <?php if ((!empty($_POST["course"])     && in_array("CSS", $_POST["course"]))) {
    echo "checked";
    } ?> value="CSS" />
            Javascript<input type="checkbox" name="course[]" id="course" <?php if     ((!empty($_POST["course"]) && in_array("Javascript", $_POST["course"]))) {
    echo "checked";
    } ?> value="Javascript" />
    

    最重要的是,不要忘记在代码开头将“course”变量声明为数组,如下所示:-

    $course = array();
    

    【讨论】:

    • 这是一个简洁的解决方案,但您实际上并没有使用数组 $course,因此无需担心声明它!
    【解决方案3】:

    我一直在研究如何创建粘性复选框(在您访问页面时能够记住选中的项目)。最初,我从数据库表中获取我的值。这意味着我的复选框值被输入到我的 db 表的列中。

    我创建了以下代码,它工作得很好。我不想经历整个 CSS 和深度编码,所以...

    PHP 中的代码

    $arrival = ""; //focus here.. down
    if($row['new_arrival']==1) /*new_arrival is the name of a column on my table that keeps the value of check box*/
    {$arrival="checked";}// $arrival is a variable
    else
    {$arrival="";};
    echo $arrival;
    
    <b><label for ="checkbox">New Arrival</label></b>&nbsp;&nbsp;&nbsp;
    <input type="checkbox" name ="$new_arrival" value="on" '.$arrival.' /> &nbsp;(Tick box if product is new) <BR><BR>
    

    【讨论】:

      【解决方案4】:
      <input type="checkbox" name="somevar" value="1" <?php echo $somevar ? 'checked="checked"' : ''; ?>/>
      

      另外,请考虑清理您的输入,而不是:

      $somevar = $_POST['somevar'];
      

      ...最好使用:

      $somevar = htmlspecialchars($_POST['somevar']);
      

      【讨论】:

      • 我不得不问为什么这么多反对意见。这是一个很好的答案,但只是缺少解释和代码标签。 (使用四个空格或`s 开始代码语法)
      • 我认为这是因为我不得不多次编辑它。我只是在没有预览的情况下快速敲出一些东西,并且不得不纠正它大约 3 次。 >_
      • 为什么要在检查值是否存在时进行清理?不需要。
      【解决方案5】:

      当浏览器提交带有选中复选框的表单时,它会发送一个变量,其名称来自name 属性,值来自value 属性。如果复选框选中,则浏览器不会为该复选框提交任何内容。在服务器端,您可以使用array_key_exists() 处理这种情况。例如:

      <?php
      $checkedText = array_key_exists('myCheckbox', $_POST) ? ' checked="checked"' : '';
      ?>
      <input type="checkbox" name="myCheckbox" value="1"<?php echo $checkedText; ?> />
      

      使用array_key_exist() 可以避免在尝试访问$_POST['myCheckbox'] 并且它不存在时发出的潜在数组索引未定义警告。

      【讨论】:

      • 您可以改用 isset,因为它是一种语言结构而不是函数,所以速度更快。您需要 array_key_exist 而不是 isset 的唯一情况是,如果该键处的数组值为“null”,这将永远不会在 POST/checkbox 数据中发生。
      【解决方案6】:

      您可以将其添加到您的表单中:

      <input type="checkbox" name="mycheckbox" <?php echo isset($_POST['mycheckbox']) ? "checked='checked'" : "" ?> />
      

      isset 检查变量是否已设置且不为空。所以在这段代码中,只有当对应的$_POST 变量有值时,checked 才会被添加到您的复选框中。..

      【讨论】:

      • -1 与我的答案相同。并且 checked 不是 XHTML 有效的。需要checked="checked"
      • 已更正 checked 以符合 xhtml。免责声明:我一开始并不关心 xhtml 合规性,因为答案是为了直接回答这个问题。相同意味着你解释了 isset 做了什么,你没有
      【解决方案7】:

      我的数组分别有name="radioselection"value="1"value="2"value="3",并且是一个单选按钮数组...如何检查是否使用此代码选择了单选值 我试过了:

      <?php echo (isset($_POST['radioselection']) == '1'?'checked="checked"':'') ?> />
      

      【讨论】:

        猜你喜欢
        • 2013-07-02
        • 1970-01-01
        • 2013-05-15
        • 2023-04-02
        • 2011-07-08
        • 2014-09-24
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        相关资源
        最近更新 更多