php / mysql флажок против True против 1 - PullRequest
0 голосов
/ 30 марта 2012

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

Я отправляю сообщение с галочкой на форме. Когда я смотрю на строку запроса в окне браузера, когда замораживаю вывод, он показывает, что имена переменных = on. Точно так же, когда я повторяю опубликованные значения, они отображаются как на. Проблема заключается в том, что при вставке в базу данных, хотя ввод ИСТИНА работает, он не работает. Тип поля - tinyint (1). Нужно ли конвертировать все дополнения в ИСТИНЫ? Я чувствую, что это никогда не было проблемой раньше.

<form action="processform.php" method="post">
<input type = "checkbox" name="var1" CHECKED>
<input type = "checkbox" name="var2" CHECKED>
<input type="submit" name="submit" value="submit"></form>

скрипт на другом конце.

$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
echo $var1; //echoes "on"

$sql = "INSERT into table (var1,var2) VALUES (TRUE,TRUE)"; //works
$sql = "INSERT into table (var1,var2) VALUES ($var1,$var2)"; //does not work.
$sql = "INSERT into table (var1,var2) VALUES ('$var1','$var2')"; //does not work.

mysql_query($sql);

Это опечатка? Не могу представить, что вам действительно нужно изменить пустое значение на ИСТИНА или ЛОЖЬ для каждой переменной

Ответы [ 7 ]

4 голосов
/ 30 марта 2012

Вам необходимо включить поле value="", если вы хотите вернуть значение, отличное от ON

<input type = "checkbox" name="var2" value="1" CHECKED>
1 голос
/ 30 марта 2012

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

$var1 = isset($_POST['var1']) ? 1 : 0;
$var2 = isset($_POST['var2']) ? 1 : 0;
echo $var1; //echoes "on"

$sql = "INSERT into table (var1,var2) VALUES (TRUE,TRUE)"; //works
$sql = "INSERT into table (var1,var2) VALUES ($var1,$var2)"; //should work.
$sql = "INSERT into table (var1,var2) VALUES ('$var1','$var2')"; //should also work.

mysql_query($sql);
1 голос
/ 30 марта 2012

Вы можете добавить value="TRUE" к каждому флажку в своем HTML.

Или, ваши назначения на $var1 и $var2 могут установить их на TRUE / FALSE или 1/ 0 в зависимости от того, установлены $_POST['var1'] и $_POST['var2'] или нет.Мое воспоминание о флажках в HTML заключается в том, что они присутствуют в $_POST[], если установлены, и отсутствуют, если не установлены.

$var1 = isset($_POST['var1']);
$var2 = isset($_POST['var2']);

Я надеюсь, что вы на самом деле не используете код в своем вопросе, этопрекрасное открытие для атаки SQL-инъекцией.

0 голосов
/ 02 февраля 2015

Вот как я это делаю:

var myVal = ( $('#myCheckbox').is(':checked') ) ? 1 : 0;

alert('myVal is: ' +myVal); //alerts 1 if checked, 0 if not checked

jsFiddle Demo

0 голосов
/ 30 марта 2012

TRUE работает, потому что PHP не является строго типизированным, и что-либо «правдивое» преобразуется в строку «1», что происходит при создании этого оператора SQL Самое простое решение - сделать атрибут value вашего input = "1". Когда вы извлекаете его из массива $ _GET, это будет строка «1», которая будет работать в вашем поле tinyint в базе данных.

<input type="checkbox" name="var2" value="1" />

Вы определенно захотите предварительно обработать его, чтобы избежать внедрения SQL, как уже упоминали другие

$var2 = $_GET['var2'] === '1' ? '1' : '0';

Я бы специально установил $ var2 в строку '1' или '0', чтобы было понятнее, что вы действительно ожидаете эти значения для поля tinyint.

0 голосов
/ 30 марта 2012

Поле является tinyint (1).Вы не можете поместить строку «on» в целочисленное поле!

Таким образом, вы можете использовать TRUE / FALSE или 1 / 0.

Не было бы много работы, чтобы написать маленькоефункция, которая возвращает TRUE или 1, если переданное значение равно "on", и возвращает FALSE или 0 в противном случае ... что-то вроде

function ConvertCheckboxValue($value) {
    return $value == "on" ? 1 : 0;
}
0 голосов
/ 30 марта 2012

TRUE логическое значение равно 1, = int
Остальные 2 являются строками либо «on» фактического текста $ var1, но тип поля int, поэтому в этом нет смысла

.просто установите значение ввода на 1 и покончите с этим.

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