这是我的问题:我有一个带复选框的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);
}
答案 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
。