我有一个包含行和列的小表
<tr>
<td>Warranty</td>
<td><?php echo ($admrmadetrow['rd_warranty'] == 1 ? "YES" : ' '); ?></td>
<td><select name="rd_warranty" data-placeholder="rd_warranty" class="form-control">
<option></option>
<option value="1">YES</option>
<option value="0">NO</option>
</select></td>
</tr>
第一列显示的只是一个名称,第二列是我的mysql表中的值,最后一列你可以选择一个值Yes(1)和No(0),并且在提交表单时它必须更新mysql表和带有新值的第二列,除非select没有更改<option></option>
。
我遇到的问题是当第二列为Yes
且必须更改为No
时才会更新。我知道0
与NULL
相同,但您如何管理此问题并将1
更改为0
我没有收到任何错误,但保留为是(1)。
有人可以帮我吗?
编辑:
这是我更新数据库的代码
foreach (array_filter($_POST) as $key => $value){
$update_rma_detail_stmt = $dbh->prepare("UPDATE rma_detail SET $key = ? WHERE r_nr = ? AND rd_artikel_code = ?");
$update_rma_detail_stmt->bindParam(1, $value);
$update_rma_detail_stmt->bindParam(2, $getadmrmaid);
$update_rma_detail_stmt->bindParam(3, $artcode);
$update_rma_detail_stmt->execute();
}
答案 0 :(得分:0)
在更新中使用CASE,因为在选择0时基本上需要更新NULL。像
这样的东西$update_rma_detail_stmt = $dbh->prepare("UPDATE rma_detail SET $key = CASE WHEN ? = 0 then NULL else ? END WHERE r_nr = ? AND rd_artikel_code = ?");
注意:这里的答案是使用CASE语句,我不确定上面100%的代码,因为你使用占位符(?)来表示值,我对此并不十分熟悉。
有关CASE的详细信息,请访问:http://dev.mysql.com/doc/refman/5.0/en/case.html
答案 1 :(得分:0)
如果HTML代码中的字段值为空,则将使用空字符串值(例如'')生成POST请求。 要在预准备语句中设置NULL,必须使用bindValue函数,您的代码将如下所示:
foreach ($_POST as $key => $value){
$update_rma_detail_stmt = $dbh->prepare("UPDATE rma_detail SET $key = ? WHERE r_nr = ? AND rd_artikel_code = ?");
/*you can use "empty($value)" or "$value==''" condition*/
if(empty($value)){
$update_rma_detail_stmt->bindValue(1, null);
}else{
$update_rma_detail_stmt->bindParam(1, $value);
}
$update_rma_detail_stmt->bindParam(2, $getadmrmaid);
$update_rma_detail_stmt->bindParam(3, $artcode);
} $ update_rma_detail_stmt-&GT;执行();
答案 2 :(得分:0)
在select
上进入mysql,使用IFNULL(rd_warranty,0)
最佳做法!