我知道有很多相似的问题,我已经搜索过,无法找到解决问题的答案。
我有一个包含多个textareas的表单来更新mysql条目,我希望PHP在更新条目之前确保textarea中有某些内容。当我只有一个条目被更新时,这种方法有效,但是当我一次只做一个条目时,只更新最后一个条目。我尝试使用else if,在这种情况下只更新第一个。如何更新所有输入文本的条目?
在我的代码中,表单输入名称与列名匹配。
$value = $_POST['titleLeft'];
$value2 = $_POST['textLeft'];
$value3 = $_POST['imgName'];
$value4 = $_POST['titleRight'];
$value5 = $_POST['textRight'];
if (strlen($value) > 0){
$sql = "UPDATE classesSpecial SET titleLeft = '$value' WHERE id = '1'";
}
if (strlen($value2) > 0){
$sql = "UPDATE classesSpecial SET textLeft = '$value2' WHERE id = '1'";
}
if (strlen($value3) > 0){
$sql = "UPDATE classesSpecial SET imgName = '$value3' WHERE id = '1'";
}
if (strlen($value4) > 0){
$sql = "UPDATE classesSpecial SET titleRight = '$value4' WHERE id = '1'";
}
if (strlen($value5) > 0){
$sql = "UPDATE classesSpecial SET textRight = '$value5' WHERE id = '1'";
}
答案 0 :(得分:2)
您每次都使用相同的变量$sql
,
$value = $_POST['titleLeft'];
$value2 = $_POST['textLeft'];
$value3 = $_POST['imgName'];
$value4 = $_POST['titleRight'];
$value5 = $_POST['textRight'];
if (strlen($value) > 0){
$sql1 = "UPDATE classesSpecial SET titleLeft = '$value' WHERE id = '1'";
}
if (strlen($value2) > 0){
$sql2 = "UPDATE classesSpecial SET textLeft = '$value2' WHERE id = '1'";
}
if (strlen($value3) > 0){
$sql3 = "UPDATE classesSpecial SET imgName = '$value3' WHERE id = '1'";
}
if (strlen($value4) > 0){
$sql4 = "UPDATE classesSpecial SET titleRight = '$value4' WHERE id = '1'";
}
if (strlen($value5) > 0){
$sql5 = "UPDATE classesSpecial SET textRight = '$value5' WHERE id = '1'";
}
答案 1 :(得分:2)
这是因为你继续覆盖$sql
。一种解决方案是为每个帖子请求执行此操作:
if((strlen($value) > 0) {
$sql[] = "UPDATE classesSpecial SET titleLeft = '$value' WHERE id = 1";
}
$sql[]
表示您正在向数组中添加值,稍后您可以使用该值来处理所有请求。然后,在脚本结束时,您将执行此操作来执行SQL:
foreach($sql as $query) {
mysqli_query($db, $query)or die(mysqli_error($db));
}
答案 2 :(得分:0)
你用每个if覆盖sql查询。 你还应该在if语句中执行命令。