我从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"' : ''; ?> />
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."'";
答案 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"' : ''; ?> />
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>
的发送方法