#php #mysql #html
#php #mysql #HTML
Вопрос:
я хочу сохранить значение флажка в моей базе данных sql, в основном я хочу сохранить значение по умолчанию, если оно установлено или нет .. я не уверен, что это сохранит значение true или false?
<div><input type="checkbox" value="Yes" name="chk"/> Yes! I will come!</div>
должен ли я вставить в свою таблицу вот так?
'$_POST[chk]'
Спасибо
Ответ №1:
$_POST[chk]
в вашем случае вернет текст Yes
, если установлен флажок, и вообще не установит его, если нет. Зная это, вы можете настроить поле базы данных так, как вы хотите, скажем, 1
или 0
для типа tinyint:
$chk = isset($_POST['chk']) ? 1 : 0;
$sql = "update tbl set chk1 = $chk";
Комментарии:
1. Неправильный флажок приведет к отправке значения, если установлен флажок, или не отправке значения, если не установлен флажок. Однако ваш код может работать.
2. @Tadeck Да, спасибо за исправление. Мой ответ был полным бредом. Теперь это должно быть законно.
3. И Шреддер отредактировал свой ответ ……, Это будет работать, но не самое элегантное решение.
4. Должно быть просто ‘$ chk= 1;’ во ВТОРОЙ строке вашего кода, потому что isset($_POST[‘chk’]) вернет значение true только в том случае, если установлен флажок
5. @djaqeel А, слово за! 😉 Имеет смысл, хе-хе
Ответ №2:
Я бы рекомендовал использовать тип данных tinyint (1) для столбца, в котором вы планируете сохранять, был ли установлен флажок или нет.
ALTER table `my_table` ADD COLUMN `my_checkbox_col` tinyint(1) unsigned NOT NULL default 0;
Комментарии:
1. Если вы закончили с «планированием» базы данных для OP, не могли бы вы, пожалуйста, продвинуться вперед и пролить некоторый свет на реальную проблему OP?
2. Вау, это была просто рекомендация, поскольку фактическое решение уже было опубликовано.
Ответ №3:
ДА. И очистите входные данные перед вставкой.
Используйте
if(isset($_POST[chk]) ) {
$chk = (string) $_POST[chk];
}
Комментарии:
1. Вы сказали очистить ? Где вы его очищаете? Ваша часть кода очень небезопасна (чтобы быть более небезопасной, вам нужно было бы передать ее в
eval()
).2. Зачем нужна очистка записи с флажком? Это потому, что данные могут быть взломаны / изменены?
3. @Tadeck Я не стал его очищать. И почему это очень небезопасно ?
4. @Shredder: Вам не нужно быть хакером, чтобы иметь возможность изменять то, что отправляется в пределах значения любого флажка. Как разработчик вы должны очищать любой ввод, отправляемый пользователем (с помощью
GET
,POST
или любым другим способом).5. @Tadeck Понял. Ну, я думаю, что мой код защищен от этого.
Ответ №4:
Нет.
Вы должны сделать это следующим образом
if(isset($_POST['chk'])):
$chk = mysql_real_escape_string($_POST['chk']);
else:
$chk = 0;
endif;
$sql = "INSERT INTO table VALUES ('$chk')";
Затем вставьте поле как ‘$chk’.
Это самый безопасный метод, и лучше всего удалить часть переменной [»], поскольку это может повлиять на ваш СИНТАКСИС при добавлении ее в таблицу.
Комментарии:
1. Итак, вы либо вставляете ‘Yes’, либо ‘0’? Что, если данные каким-то образом будут изменены. Похоже, что это сломало бы систему.