选中HTML复选框

时间:2012-07-30 11:09:55

标签: php html

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

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

其中{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);

}

5 个答案:

答案 0 :(得分:1)

根据W3C,选中的值为boolean值。因此,如果未选中,则将其设置为false而不是''。

  

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

     

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

答案 1 :(得分:1)

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

if(isset($_POST['checkboxname'])){
$status=1;
}else {
$status=0;
}

答案 2 :(得分:1)

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

尝试设置类似

的内容
$_POST['theCheckbox'] = isset($_POST['theCheckbox']);

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

答案 3 :(得分:1)

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

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

尝试以下操作:添加行

$present->show_products = 0;

之前

$present->set($form_data);

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

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

答案 4 :(得分:0)

尝试使用checked="checked"或根本不使用任何属性来取消选中check-box