未定义的索引如果我不检查复选框

时间:2013-09-04 01:09:22

标签: php html checkbox undefined

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

那是使用IIS localhost,检查事情。

在网络上,无论如何,已发布的相同脚本都可以正常工作。 好吧,几乎完全相同。我在本地添加了一个变量'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>

这里是变量的php,'publishok':

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

我怀疑我的编辑器PSPad正在添加虚假(和不可见)字符代码或其他东西,所以我升级到了最新版本。没有区别。

想不到会导致这种情况的原因。

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:11)

当你没有检查时,

复选框不会将数据发送到服务器。

您必须使用isset($_POST['publishok'])检查它是否在服务器端进行了检查。

答案 1 :(得分:6)

这是因为如果未选中复选框的数据,则不会将其发送到服务器。 有点破解是在复选框之前使用具有相同名称的隐藏输入字段,因此如果取消选中该复选框,则会发送该值。

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

答案 2 :(得分:0)

我相信复选框和单选按钮如果没有选中/选中则不发送获取/发布数据(你可以通过在$ _GET / $ _ POST上执行var_dump / print_r来验证这一点)所以你应该做类似的事情:

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

答案 3 :(得分:0)

<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";
 } ?>>

答案 4 :(得分:0)

$_POST['wc_use_taxes'] = !isset($_POST['wc_use_taxes'])? "" : $_POST['wc_use_taxes'];

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