0

这是我的问题:我有一个带有复选框的 html 模板。当 php 脚本运行时,它会将一个值传递给复选框的“checked”属性,如下所示:

<input type="checkbox" name="form_data[show_products]" {SHOW_PRODUCTS} />

where{SHOW_PRODUCTS}可以是'checked="true"''',具体取决于数据库列中的数据是 1 还是 0。因此,换句话说,根据从数据库传递的数据,复选框是选中还是未选中。

现在,由于这是编辑表单的模板,我需要收集“checked”属性的值并将其传递给数据库。但是,如果我取消选中在页面加载时自动选中的复选框并尝试保存更改,脚本仍会将 1 而不是 0 写入数据库。我该如何更改?

编辑

这些是处理数据的 php 部分:

else if (isset($_POST['edit']))
{   
    $form_data = $_POST['form_data'];
    $present_id = $form_data['present_id']; 
    $present=new Present();
    $present->load($present_id); 

    if (isValidForm())
        {       
        $present->set($form_data);
        $present->update();
        }
    else
        {
        $errors=$formValidator->getErrors();
        $page_content_HTML=edit_form_HTML($form_data, $errors);
        }
}

function set($data){
    $keys=array_keys($data);
    foreach($keys as $key)
    {
        $this->$key=$data[$key];
    }   
}

function update(){
        global $db;
        $date_from = format_datetime($this->date_from, "%Y.%m.%d. %H:%M:%S");
        $date_to = format_datetime($this->date_to, "%Y.%m.%d. %H:%M:%S");
        $sql="UPDATE presents SET present_name='".$this->present_name."', description='".$this->description."', present_image='".$this->present_image."', date_from='".$date_from."', date_to='".$date_to."', short_description='".$this->short_description."', show_products='".$this->show_products."' WHERE present_id='$this->present_id'";
        $db->query($sql);

}
4

5 回答 5

1

根据W3C,检查的值是一个boolean值。因此,如果未选中它,请将其设置为false而不是 ''。

选中 [CI](CI 表示不区分大小写)

当 type 属性的值为“radio”或“checkbox”时,此布尔属性指定按钮处于打开状态。对于其他控件类型,用户代理必须忽略此属性。

于 2012-07-30T11:13:54.170 回答
1

检查复选框的另一种方法是使用isset

if(isset($_POST['checkboxname'])){
$status=1;
}else {
$status=0;
}
于 2012-07-30T11:24:39.323 回答
1

这是一个模型-视图-控制器范式吗?我想您的问题是您只更新查询中发布的字段。因此该复选框未选中,未发送,因此也未更新。

尝试设置类似

$_POST['theCheckbox'] = isset($_POST['theCheckbox']);

如果已设置,则将其设置为 true,如果未设置,则设置为 false。所以现在你的输入总是有一个真或假的值,所以它会被你的模型更新。

于 2012-07-30T11:40:42.983 回答
1

问题不在于表单/复选框,而在于您如何处理 PHP 脚本中的请求数据。正如我之前评论过的:未选中的复选框不是 POST 或 GET 请求的一部分(它不仅是空的,而且不存在)。

因此,$this->show_products未选中该框时不存在。

尝试以下操作:添加行

$present->show_products = 0;

就在之前

$present->set($form_data);

这使得show_products默认为“关闭”(“0”),并且只有在选中复选框时才会被覆盖。

(顺便说一句:我也认为,如果检查 CB,该值将是“on”而不是“1”。将属性添加value="1"到复选框标记以使其改为“1”)。

于 2012-07-30T11:50:18.467 回答
0

尝试checked="checked"对 unchecked 使用或根本不使用属性check-box

于 2012-07-30T11:12:27.400 回答