Передача состояния флажка в PHP

<input type="hidden" name="check_box_1" value="0" /> <input type="checkbox" name="check_box_1" value="1" /> 

Это работает отлично, однако, когда вы нажимаете кнопку «Отправить», и галочка имеет галочку, она передает ОБОИХ скрытое значение и исходное значение флажка в переменную $ _POST в php, этого можно избежать?

У меня есть скрытое значение, поэтому флажки без привязки передаются переменной $ _POST, а также отмеченные.

Лучший подход – удалить скрытое поле и просто проверить на PHP:

 if ($_POST['check_box_1']=='1') { /*Do something for ticked*/ } else { /*Do something for unticked*/ } 

Вам не нужно скрытое поле. На самом деле вы не должны доверять ни одному из полей формы, отправленных в первую очередь. Это означает, что вы не можете сделать код, который принимает отправленные поля и доверять им, чтобы отправлять правильные данные (которые, как я полагаю, вы делаете сейчас).

То, что вы должны сделать, это обработать все поля, которые вы ожидаете получить. Таким образом, если вы не получите значение флажка, вы все равно сможете его обработать, как если бы он был невнимателен. Затем вы также получаете добавленную неотъемлемую особенность отбрасывания данных формы, которых вы не ожидаете в первую очередь.

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

Я имею в виду … почему вы добавляете скрытое поле для начала?

Ваш PHP получает два поля с именем check_box_1, и в прошлый раз, когда я проверял, не было никакого способа гарантировать, что параметры будут считываться в хэш REQUEST в том же порядке, что и вы их отправили, поэтому нет способа узнать, какой из них приходите последним (это тот, значение которого будет установлено). Итак … это неправильный подход к любой проблеме, которую вы пытаетесь решить здесь.

Добро пожаловать в Stack, кстати! Если вы найдете ответы полезными или полезными, обязательно отметьте их как правильные и проголосуйте за них.

Это нормально.

Они должны быть оба type="checkbox" чтобы передать только 1 значение.

Если вы хотите получить только 1 в любом случае, вы можете сделать:

 <input type="checkbox" style="display:none;" name="check_box_1" value="0"> 

Убедитесь, что первое поле ввода имеет тип Checkbox, иначе он не будет вести себя как один.

 <input type="checkbox" name="check_box_0" value="0" /> <input type="checkbox" name="check_box_1" value="1" /> 

До сих пор все работает нормально с вашим кодом.

Я предполагаю, что вы создаете скрытое поле, так что 0 передается на сервер, когда флажок не установлен. Проблема в том, что они оба передаются, когда флажок установлен .

Как сказал Смерть, способ, которым вы должны это делать, – это установить один флажок, а затем проверить, было ли это значение отправлено на сервер или нет. Вот как работают флажки.

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

Например:

 $myValue = ""; if(isset($_POST['check_box_1'])) { $myValue=$_POST['check_box_1']; } else { $myValue="0"; }