Получение списка элементов в запросе MySQL - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть список вещей, которые нужно обновить в данном запросе 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?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 09 ноября 2009
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'" ;
3 голосов
/ 09 ноября 2009

То, что сказали другие, за исключением, если возможно, я бы сделал это немного по-другому - вместо того, чтобы использовать $ 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:)

Примите во внимание, что вы, возможно, не сможете изменить форму, или, возможно, никогда не добавите больше разрешений, и в этом случае это решение не лучше.

0 голосов
/ 09 ноября 2009

Вот, пожалуйста:

$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));
0 голосов
/ 09 ноября 2009

Просто черновик:

$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 это просто произвольное число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...