На сервер отправляются только значения отмеченных флажков.Это HTML / браузер дизайн и не имеет ничего общего с PHP.Как еще можно надежно отличить отмеченный флажок от не отмеченного?
... тогда как мне узнать, не удалось ли сценарию передать значение или флажок был просто не установлен?
Вы можете довериться браузеру и PHP, чтобы сделать это правильно.Если он не установлен, флажок не был отмечен.Если вы используете Javascript, который отправляет форму и может ошибиться, вы несете ответственность за отладку скрипта.
Относительно "это плохой дизайн":
Это эффективный дизайн.Есть только две другие возможности, учитывая ограничение, что значения отправляются только в виде текста:
- Отправка значения и состояния по отдельности, например
checkbox:state=checked&checkbox:value=myvalue
.Давайте на секунду притворимся, что это не вызовет больших головных болей и неясностей в том, что разрешено для имен входных элементов, а что нет. - Используйте магическое значение, чтобы обозначить «не проверено»:
checkbox=false
.Это означает, что я не могу установить флажок, подобный следующему: <input type="checkbox" name="checkbox" value="false" />
Давайте представим, что будет использовано любое из указанных выше решений, и проблемы, связанные с ними, будут решены.Это будет означать, что для каждого флажка на странице будет отправлено значение POST.Обычно это не имеет большого значения, но давайте представим страницу с 50 флажками.Не слишком нереально, я бы сказал.Как насчет одного с 200?Это - 200 * ~10+
символов в заголовках HTTP для каждого POST, вероятно, большинство из них просто говорит вам, что пользователь не делает.
Поскольку этот метод был изобретен, когда пропускная способность была очень ценной,наиболее эффективно просто не отправлять значения непроверенных флажков.