>我有一个包含行和列的小表
<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表和第二列,除非选择没有更改<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();
}
如果 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->execute();
在更新中使用 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
在select
mysql 时,使用IFNULL(rd_warranty,0)
最好的练习!