【问题标题】:Undefined Index If I Do Not Check Checkbox如果我不选中复选框,则未定义索引
【发布时间】:2013-09-07 08:56:56
【问题描述】:

我似乎在这里发生了一件奇怪的事情。 如果我选中表单上的复选框,则 php 脚本运行完美。 如果我不选中该框 php 报告另一个变量的未定义索引。

这是使用 IIS 本地主机,正在检查。

在网络上发布的相同脚本无论如何都可以正常工作。 嗯,几乎一模一样。我在本地添加了一个变量'test' POST-ed 到 php 并与硬编码值进行比较。就是这样。

这里是复选框的 html:

<tr>
<td>Publish Comment?</td>
<td><input name="publishok" value="NO" type="checkbox"> Check Box For Do spanstyle="font-weight: bold;">Not</span> Publish</td>
</tr>
<tr>

这是变量 'publishok' 的 php:

$IP = $_SERVER["REMOTE_ADDR"];
$publishok = $_POST['publishok'];
$test = $_POST['test'];
if ($test != 'park') die ("Wrong input. Sorry. Go back, try again"); 

我怀疑我的编辑器 PSPad 添加了虚假(且不可见)的字符代码或其他内容,因此我升级到了最新版本。没有区别。

想不出是什么原因造成的。

谁能帮忙?

【问题讨论】:

  • 但是,这是 HTML/HTTP 标准中的一个怪癖,从过去人们开始关心 HTTP 请求的时间长度。有人想:“嘿,反正它是空白的,我们不需要告诉他们,我们可以通过不向他们发送这些信息来节省整个 3 个字节!”但你远不是第一个或最后一个被这个怪癖绊倒的人。

标签: php html checkbox undefined


【解决方案1】:

如果你没有勾选,checkbox不会将数据发送到服务器。

你必须使用isset($_POST['publishok'])来检查它是否在服务器端被检查。

【讨论】:

    【解决方案2】:

    我相信如果未选中/选中复选框和单选按钮,则不会发送获取/发布数据(您可以通过在 $_GET/$_POST 上执行 var_dump/print_r 来验证这一点),因此您应该执行以下操作:

    if(isset($_POST['publishok'])){
        $publishok = $_POST['publishok'];
    }else{
        $publishok = "";#default value
    }
    

    【讨论】:

    • Isset 没有告诉我价值是什么。只有一个。这是问题的核心吗?我应该像布尔一样测试吗?期望 null 作为“负”,(任何)值作为“正”?但这会引发我遇到的错误,并已使用“隐藏”变量修复。是不是很不整洁?我应该如何在 html 中设置框值以及如何在 php 中进行测试?还是我应该使用其他方法?
    • 谢谢,应该是公认的答案。按预期工作。
    • 感谢您的完整回答。这是帮助修复我的代码的那个。
    【解决方案3】:

    发生这种情况是因为如果未选中复选框的数据不会发送到服务器。 对此的一个小技巧是在复选框之前使用具有相同名称的隐藏输入字段,因此如果未选中复选框,则会发送该值。

    <input name="publishok" value="0" type="hidden">
    <input name="publishok" value="NO" type="checkbox">
    

    【讨论】:

    • 嗯,这就是我正在研究的答案;但我不知道你可以重复这个名字。我认为您必须使用 onSubmit 函数或类似的方法设置隐藏值...
    • 谢谢你。它让它工作了。但是让我不确定复选框。我以 html 的形式给它一个值 - 以前是“否”,但现在如果不检查,该值将是隐藏变量的零。正确的?所以这将是一个“零”。
    • @user577111 是的,它将是0,但您可以将其更改为您想要的任何内容。如果你愿意,也可以是NO
    【解决方案4】:
    <input class="form-check-input" type="hidden" id="" name="check_box" value="0"> 
    
    <input class="form-check-input" type="checkbox" id="gridCheck" name="check_box" value="1" 
    <?php if ($_POST['check_box'] == "1") {
      print "checked";
     } ?>>
    

    【讨论】:

    • 在这里我们像你一样用纯文本解释为什么你的代码可以解决问题。请带妈妈网查阅指南“如何写一个好的答案?”在这里stackoverflow.com/help/how-to-answer
    • 创建2个输入字段并隐藏一个...现在将值添加到输入字段这将解决问题..
    【解决方案5】:
    $_POST['wc_use_taxes'] = !isset($_POST['wc_use_taxes'])? "" : $_POST['wc_use_taxes'];
    

    此代码将在未设置的已发布变量中设置空值,如果已设置,这将使其等于已发布的值。所以我想这样做是个好主意。

    【讨论】:

      猜你喜欢
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      相关资源
      最近更新 更多