我试图变得懒惰(或聪明):我有7个复选框,与MySQL表中的7列相关联。
复选框以数组形式发布:
$can = $_POST['can'];
我创建了以下循环来转储MySQL插入的变量:
for($i=1;$i<8;$i++){
if($can[$i] == "on"){
${"jto_can".$i} = 'Y';
}
else{
${"jto_can".$i} = 'N';
}
}
print_r($jto_can1.$jto_can2.$jto_can3.$jto_can4.$jto_can5.$jto_can6.$jto_can7);
这正确输出:
YYNYYYY
但是,当我尝试在MySQL更新中使用这些变量时,它不接受更改。
mysqli_query($db, "UPDATE jto SET jto_can1 = '$jto_can1', jto_can2 = '$jto_can2', jto_can3 = '$jto_can3', jto_can4 = '$jto_can4', jto_can5 = '$jto_can5', jto_can6 = '$jto_can6', jto_can7 = '$jto_can7' WHERE jto_id = '$id'")or die(mysqli_error($db));
有人可以解释为什么print_r显示变量而MySQL更新没有?
答案 0 :(得分:2)
坚持使用数组,并动态形成查询:
$sql = 'UPDATE jto SET ';
$cols = array();
foreach( range( 1, 7) as $i) {
$value = $_POST['can'][$i] == 'on' ? 'Y' : 'N'; // Error check here, $_POST['can'] might not exist or be an array
$cols[] = 'jto_can' . $i . ' = "' . $value . '"';
}
$sql .= implode( ', ', $cols) . ' WHERE jto_id = "' . $id . '"';
现在执行var_dump( $sql);
查看新的SQL语句。
答案 1 :(得分:1)
这不是mysql问题。 mysql只会看到你放入该字符串的内容。例如在执行mysql_query之前转储查询字符串。我猜你在其他地方做了这个查询,并且遇到了范围问题。是的,这很懒惰。不,它不“聪明”。你只是为自己做更多工作。做什么错误
INSERT ... VALUES jto_can1=$can[0], jto_can2=$can[1], etc...