根据复选框值在MySQL中插入Yes或No

时间:2011-11-15 05:24:24

标签: php mysql arrays checkbox insert

我有一个复选框列表,如下所示,数字416,419等表示页码。它们用于2组字段,一组是“likebutton”,另一组是“sendbutton”。

 <input type="checkbox" name="likebutton[]" value="416" />
 <input type="checkbox" name="likebutton[]" value="417" />
 <input type="checkbox" name="likebutton[]" value="418" />
 <input type="checkbox" name="likebutton[]" value="419" />
 ...more checkboxes
 <input type="checkbox" name="sendbutton[]" value="416" />
 <input type="checkbox" name="sendbutton[]" value="417" />
 <input type="checkbox" name="sendbutton[]" value="418" />
 <input type="checkbox" name="sendbutton[]" value="419" />
 ...more checkboxes

我想要实现的是当这些复选框被选中时,我能够为MySQL中的likebutton和sendbutton字段更新每行(页面)和Yes(Checked)或No(Unchecked)数据。目前我的mysql查询如下所示。这似乎只有当我有一个foreach函数并且如果我勾选一个或多个复选框时才有效,但如果我保留下面所述的代码或者如果我没有取消选中所有内容,则会出现foreach函数的错误。

 foreach($_POST["likebutton"] as $pagenumberL)
 $YesNoL = isset($_POST["likebutton"]) ? 'Yes' : 'No';
 mysql_query("UPDATE pages SET likebutton='".$YesNoL."' WHERE page_id='".$pagenumberL."'");

 foreach($_POST["sendbutton"] as $pagenumberS)
 $YesNoS = isset($_POST["sendbutton"]) ? 'Yes' : 'No';
 mysql_query("UPDATE pages SET sendbutton='".$YesNoS."' WHERE page_id='".$pagenumberS."'");

关于我的问题的任何指针或关于我应该如何进行的更好的建议?

1 个答案:

答案 0 :(得分:3)

复选框的问题(正如您所注意到的)是未经检查的问题是不提交任何数据。

解决这个问题的标准技巧是......

<input type="hidden" name="field_name" value="0">
<input type="checkbox" name="field_name" value="1">

选中该复选框后,其值将按文档稍后显示的方式提交。如果未选中,则提交隐藏的输入值。

然后您可以简单地按名称检查值

$field = isset($_POST['field_name']) ? $_POST['field_name'] : false;
$dbFlag = $field ? 'Yes' : 'No';

在您的特定情况下,请在输入名称中包含page_id,例如

<input type="hidden" name="likebutton[416]" value="0">
<input type="checkbox" name="likebutton[416]" value="1">

在PHP中

foreach ($_POST['likebutton'] as $pageId => $likeFlag) {
    $dbFlag = $likeFlag ? 'Yes' : 'No';

    // update DB
}