Хранение данных флажка - PullRequest
       18

Хранение данных флажка

1 голос
/ 29 августа 2009

В настоящее время я пишу сценарий, в котором массив флажков отображается с помощью:

<?
  while($i = mysqli_fetch_array($get_perms)){

  $pname = $i[pname];
  $id = $i[id];
?>
  <div>
    <input type="checkbox" tabindex="1" name="<? echo("$id");?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo(" $pname");?>
  </div>
<? } ?>     

Тем не менее, у меня также есть другая часть, делающая аналогичную вещь, но для Sget_perms это другой sql для получения других данных.

Теперь, очевидно, когда дело доходит до отправки данных обратно в форму / сценарий, возникает проблема между различием двух бит данных в форме.

Это SQL для обновления данных, указанных в форме:

$insert = mysql_query("UPDATE `perms` SET
    `title`='$_POST[title]',
    `1` ='$_POST[1]',
    `2` ='$_POST[2]',
    `3` ='$_POST[3]',
    `4` ='$_POST[4]',
    `5` ='$_POST[5]',
    `user` ='$_POST[username]'
     WHERE `userid` = '$valued_user_show[id]'
")

Так как же я правильно различаю эти два, и можно ли правильно вводить SQL?

Схема таблицы в основном:

7 столбцов, ИД пользователя, пользователь, 1, 2, 3, 4, 6 ID пользователя - это ID пользователя, который был отправлен в скрипт перед формой. пользователь это имя. Номера являются номерами разрешений.

$ get_perm - это sql для загрузки текущей информации о пользователе из таблицы в массиве.

Ответы [ 2 ]

2 голосов
/ 29 августа 2009

Первое: никогда включает пользовательские данные в оператор SQL, не экранируя его! Злоумышленник может использовать это для того, чтобы забить ваши данные, получить данные без разрешения и причинить любой вред. Всегда используйте mysql_real_escape_string(), чтобы избежать отправки значений, входящих в запрос.

К вашему актуальному вопросу: чтобы различать два одинаковых набора полей, просто дайте им разные имена. Возможно, первое будет называться permsA, а второе permsB. Затем вы получите HTML, как это:

<input type="checkbox" tabindex="1" name="permsA_<? echo $id;?>" value="1" <? if($permissionid[$id] == '1') {echo ' checked="checked" ';}?> /><?echo htmlspecialchars($pname);?>

Обратите внимание, что я также включил вызов htmlspecialchars() для правильного экранирования значения $pname для использования в HTML, и я опустил ненужные кавычки вокруг "$id" (помещение переменной в кавычки, подобное тому, просто заставляет PHP делать дополнительные обработка для анализа строки; вы можете просто отобразить саму переменную без кавычек).

Тогда в вашем SQl утверждении:

$insert = mysql_query("UPDATE `perms` SET
    `title`='" . mysql_real_escape_string($_POST[title]) . "',
    `1` ='" . mysql_real_escape_string($_POST['permsA_1'] . "',
    `2` ='" . mysql_real_escape_string($_POST['permsA_2'] . "',
    `3` ='" . mysql_real_escape_string($_POST['permsA_3'] . "',
    `4` ='" . mysql_real_escape_string($_POST['permsA_4'] . "',
    `5` ='" . mysql_real_escape_string($_POST['permsA_5'] . "',
    `user` ='" . mysql_real_escape_string($_POST['username']) . "'
     WHERE `userid` = '$valued_user_show[id]'
")

Здесь единственным изменением является добавление префикса permsA_ и корректное экранирование всех пользовательских значений.

1 голос
/ 29 августа 2009

Создать массив с вашими флажками:

<input type="checkbox" name="mycheckbox[]"/>

И «mycheckbox» будет доступен в виде массива в ваших данных _POST.

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