使用Checkbox中的PHP更新MySQL数据库

时间:2012-03-14 18:47:58

标签: php mysql

我从MySQL表中提取数据并将其加载到用于编辑(更新)记录的表单中。一切都很好,直到我来复选框。表单中的复选框准确反映了db中相应列中的值。但是当编辑人员更改编辑表单中的复选框时,它不会将数据传递给数据库。我已经阅读了大量关于堆栈溢出的Q& A复选框,但似乎找不到我要找的东西。对不起,如果这是一个多余的问题。这是代码。

<label for="amenities-beach">
<input class="choose" name="amenitiesB" id="amenities-beach" type="checkbox" 
value="<?php echo $row1["amenitiesB"]; ?>" 
<?php echo $row1["amenitiesB"] ? 'checked="checked"' : ''; ?> /> 
&nbsp;Close to Beach</label>

其中的设施B:

value="<?php echo $row1["amenitiesB"]; ?>

是使用SELECT语句从DB返回的内容:

 $row1 = mysql_fetch_array($result); 

但是当我更改表单中的值并提交它时,没有任何内容传递给UPDATE语句中的变量。知道我错过了什么吗?我有6个这样的复选框,设施B,设施K,设施S,设施P,设施F,并且首选所有具有相同的代码。任何帮助,将不胜感激。 谢谢, 戴夫

这里是代码:表单中的其他所有内容都可以更新。我试图将其传递给:     $ amenitiesB = $ _POST ['amenitiesB'];
然后我把它放入更新声明中     Hotels.amenitiesB = ' “$ amenitiesB”。', 我的UPDATE声明是,     $ query =“更新酒店     JOIN surfcup_Rates ON Hotels.id = surfcup_Rates.hotelid     SET Hotels.hotel ='“。$ hotel。”', 更多列,然后

Hotels.amenitiesB='".$amenitiesB."', 
Hotels.amenitiesB='".$amenitiesK."',
Hotels.amenitiesB='".$amenitiesS."',
Hotels.amenitiesB='".$amenitiesP."',
Hotels.amenitiesB='".$amenitiesF."',
Hotels.amenitiesB='".$preferred."',    

然后更多列:

WHERE Hotels.id='".$id."'";

2 个答案:

答案 0 :(得分:0)

编辑:我想我遇到了问题。当最初未选中该框时,输入具有空值,然后当您检查它时,它会传递一个空值...它将永远不会填充您想要检查的值。所以,你需要这样的东西:

<input class="choose" name="amenitiesB" id="amenities-beach" type="checkbox" value="amenity B Selected" <?php echo $row1["amenitiesB"] ? 'checked="checked"' : ''; ?> />

...不要将“value”属性设置为动态,否则一旦变为空,它将始终为空。

原始答案:

我假设当您说“更改表单中的值”时,您的意思是取消选中复选框...未选中复选框,在您提交表单时永远不会发送任何数据。通过检查表单变量是否已通过来检查“未检查”状态。

例如:

if (isset($_GET['amenitiesB'])) {
    // process with the knowledge that "amenitiesB" was checked
}
else {
    // process with the knowledge that "amenitiesB" was unchecked
}

如果您的意思是以某种方式动态地将复选框的“值”更改为其他内容,那么我需要查看完成该操作的代码。

复选框输入中“value”属性的主要用途是当您将变量作为数组传递时:

<label for="amenities-beach">
    <input class="choose" name="amenities[]" id="amenities-beach" type="checkbox" value="<?php echo $row1["amenitiesB"]; ?>" <?php echo $row1["amenitiesB"] ? 'checked="checked"' : ''; ?> />
    &nbsp;Close to Beach
</label>

...特别注意我已将“names”属性从“amenitiesB”更改为“amenities []”,如果通过所有便利设施复选框,则会在处理过程中为您提供访问权限脚本通过$ _GET ['amenities']数组(或$ _POST,如果适用)。否则,没有太多理由使用复选框输入的“value”属性,因为只要知道$ _GET ['amenitiesB']被检查(并因此与表单一起发送)或未选中(而不是),您就可以获得所需的一切。随表格发送)。

答案 1 :(得分:0)

您遇到的问题是因为取消选中复选框时,默认情况下其数据不会传输到您的PHP,这就是您将UPDATE查询参数设置为空的问题。 因此,在您的更新声明之前,您应该:

$fieldenabled=(bool)(isset($_POST['CHECKBOXNAME']) ? TRUE : FALSE;

用它调用你的UPDATE查询。

编辑:当然你可以用$ _GET改变$ _POST,具体取决于<form>的发送方法