Как вставить значение из флажка в MySQL? - PullRequest
3 голосов
/ 05 июня 2011

MySQL

`field1` tinyint(1) NOT NULL default '1',
`field2` tinyint(1) NOT NULL default '1',
`field3` tinyint(1) NOT NULL default '1',
`field4` tinyint(1) NOT NULL default '1',
`field5` tinyint(1) NOT NULL default '1',

HTML

<form method="post">
<input type="hidden" name="blah" value="blah">

<input type="checkbox" name="field1" value="1">
<input type="checkbox" name="field2" value="1">
<input type="checkbox" name="field3" value="1">
<input type="checkbox" name="field4" value="1">
<input type="checkbox" name="field5" value="1">

<button type="submit">Submit</button>

</form>

PHP

mysql_query("UPDATE `table` SET `field1` = '$_POST[field1]', .......");

Итак, я хочу сделать следующее:

a) Если флажок установлен, я хочу обновить соответствующее поле с помощью 1

b) Если флажок снят, яхотите обновить поле с помощью 0

А теперь, пожалуйста, скажите мне, что я не должен делать это так, и что есть более хороший способ сделать это:

$field1 = isset($_POST['field1']) ? 1 : 0;
$field2 = isset($_POST['field2']) ? 1 : 0;
$field3 = isset($_POST['field3']) ? 1 : 0;
$field4 = isset($_POST['field4']) ? 1 : 0;
$field5 = isset($_POST['field5']) ? 1 : 0;

mysql_query("UPDATE `table` SET `field1` = '$field1', `field2` = '$field2' ....");

Ответы [ 6 ]

3 голосов
/ 05 июня 2011

Вы можете использовать field[]

<input type="checkbox" name="field[0]" value="1">
<input type="checkbox" name="field[1]" value="1">

Так что вы можете сделать простой цикл:

for($i=0;$i<5;$i++)
   $field[$i] = isset($_POST['field'][$i]) ? 1 : 0;

И затем построить свой SQL

Если вы хотитепропустите часть isset, в которой вы можете использовать тип радиостанции, поэтому вы всегда можете установить либо значение 1, либо значение 0.

2 голосов
/ 05 июня 2011

У вас есть отверстие для SQL-инъекции:

enter image description here ужас кодирования

mysql_query("UPDATE `table` SET `field1` = '$_POST[field1]', .......");

Измените его на:

$field1 = mysql_real_escape_string('$_POST[field1]');
....
mysql_query("UPDATE `table` SET `field1` = '$field1', .......");
/*                                         ^       ^ these quotes are vital */

Не забудьте поставить одинарные кавычки вокруг $ vars в вашем запросе.

1 голос
/ 05 июня 2011

Вы можете иметь скрытый ввод перед каждым из флажков, например

<input type="hidden" name="field1" value="0">
<input type="checkbox" name="field1" value="1">
<input type="hidden" name="field2" value="0">
<input type="checkbox" name="field2" value="1">

Таким образом, когда флажок не установлен, будет отправлено предыдущее значение (предоставленное скрытым вводом), поэтому выполучит 0 для непроверенных флажков.

Однако вам все равно придется фильтровать / проверять / дезинфицировать ваши входные данные в PHP, прежде чем вставлять их в SQL-запрос (как наименее вредный пример, представьте, что я изменил флажокиспользуя Firebug для value="2" и затем отправьте форму)

0 голосов
/ 05 июня 2011

Думаю, вам нужно избегать написания такого количества строк кода для проверки значений флажков.
Может быть, вы можете попробовать это (я еще не пробовал):

$field = 'field';

for(int i=1; i<=5, ++i){
    $($field.1) = isset($_POST['field'.i]) ? 1 : 0;

}
0 голосов
/ 05 июня 2011

Если флажок не установлен, он не отправляется вместе с формой, поэтому его нет в массиве $ _POST.

Вы можете использовать скрытый ввод и небольшой JavaScript, но это меньше кода, если вы делаете часть PHP.

0 голосов
/ 05 июня 2011

К сожалению, другого пути нет.

Вы должны проверить значение и присвоить 1 или 0 переменной, которая используется в запросе для передачи ответа флажка.

Это так, потому что если флажок не установлен PHP $_POST var не содержит этот флажок в качестве переменной

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