我目前在给定的mysqli查询中有一个要更新的内容列表:
$insert = mysqli_query($db,"UPDATE `tbl_perms` SET
`1` ='" . mysqli_real_escape_string($db,$_POST['permsA_1']) . "',
`2` ='" . mysqli_real_escape_string($db,$_POST['permsA_2']) . "',
`3` ='" . mysqli_real_escape_string($db,$_POST['permsA_3']) . "',
`4` ='" . mysqli_real_escape_string($db,$_POST['permsA_4']) . "',
`5` ='" . mysqli_real_escape_string($db,$_POST['permsA_5']) . "',
`6` ='" . mysqli_real_escape_string($db,$_POST['permsA_6']) . "',
`7` ='" . mysqli_real_escape_string($db,$_POST['permsA_7']) . "',
`8` ='" . mysqli_real_escape_string($db,$_POST['permsA_8']) . "',
`9` ='" . mysqli_real_escape_string($db,$_POST['permsA_9']) . "',
`10` ='" . mysqli_real_escape_string($db,$_POST['permsA_10']) . "'
WHERE `userid` = '$id' ")or die(mysqli_error($db));
我如何重写这个以便我不必手动编写sql代码,这样当添加“权限”时,这会自动生成执行sql查询所需的sql?
感谢。
答案 0 :(得分:4)
foreach ($_POST as $key=>$value) {
if (preg_match('/^permsA/',$key)) {
list($tmp,$num)=explode('_',$key);
$perms[]="`$num` = " . (int)$value; //or some other method of sanitizing the $value
}
}
$sql="UPDATE tbl_perms SET " . implode(','$perms) . "WHERE userid = '$id'" ;
答案 1 :(得分:3)
其他人说的是什么,除非可能我做的有点不同 - 而不是必须使用$ i来控制循环,我会重命名表单,以便字段被称为:
<input type="checkbox" value="1" name="permsA[1]">
<input type="checkbox" value="1" name="permsA[2]">
等等。
然后你会得到一个你可以这样引用的帖子数组:
$_POST['permsA'][1];
$_POST['permsA'][2];
这样做的好处是你可以这样做:
$bits = array();
foreach ($_POST['permsA'] as $key=>$value) {
$bits[] = $key . " = '" . mysqli_real_escape_string($db, $value) . "'";
}
$sql = "UPDATE permissions SET " . implode(', ', $bits) . " WHERE userid = '$id' ")
or die(mysqli_error($db));
这样做的好处是,当您向系统添加更多权限并超过您用于$ 1的最大值时,您不会有一天会得到随机错误:)
感谢您可能无法更改表单,或者可能无法添加更多权限,在这种情况下,此解决方案不会更好。
答案 2 :(得分:0)
只是草稿:
$sql = "UPDATE `tbl_perms` SET ";
for ($i = 1; $i < 100; i++) {
if (isset($_POST['permsA_' . $i])) {
if ($i > 1) $sql .= ",";
$sql .= "`$i` ='" . mysqli_real_escape_string($db,$_POST['permsA_1']) . "'";
}
}
$sql .= " WHERE `userid` = '$id'";
请注意,100只是一个任意数字
答案 3 :(得分:0)
你走了:
$updaters = array();
for ($i = 1; $i <= 10; $i++)
{
if (isset($_POST['permsA_'.$i]))
$updaters[] = '`'.$i.'` = \''.mysqli_real_escape_string($db, $_POST['permsA_'.$i]).'\'';
}
$insert = mysqli_query($db,'UPDATE `tbl_perms` SET '.implode(',', $updaters).
'WHERE `userid` = '.$id)or die(mysqli_error($db));