Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: тег input checkbox всегда возвращает значение ON строкового типа?
 
 автор: ДацкыйКот   (20.04.2009 в 16:24)   письмо автору
 
 

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

Возможны ли случаи, когда этот тег будет возвращать данные другого типа - например INT(1) или BOOL(true)? Может разные браузеры по-разному себя ведут? Кто что слышал?

  Ответить  
 
 автор: ddhvvn   (20.04.2009 в 16:40)   письмо автору
 
   для: ДацкыйКот   (20.04.2009 в 16:24)
 

другого типа - нет. тут все хито преобразуется. да и зачем Вам это?

  Ответить  
 
 автор: ДацкыйКот   (20.04.2009 в 18:02)   письмо автору
 
   для: ddhvvn   (20.04.2009 в 16:40)
 

Как зачем? Чтобы распознавать значение конечно же.

Просто проверка ниже не работает:
if($checkboxResult)


Потому что такая проверка предполагает значение переменной $checkboxResult INT(1) или BOOL(TRUE), а строку "on" такой код воспринимает как ноль.

Проверил на разных браузерах. Вроде все возвращают "on"/NULL.

Так что сейчас проверку веду по равенству значения строке "on". Но если какой-нить новый браузер будет иначе возвращать значение (((

  Ответить  
 
 автор: sim5   (20.04.2009 в 17:21)   письмо автору
 
   для: ДацкыйКот   (20.04.2009 в 16:24)
 

<input type="checkbox" value="1" onclick="alert(this.value)">

  Ответить  
 
 автор: PAT   (20.04.2009 в 18:01)   письмо автору
 
   для: sim5   (20.04.2009 в 17:21)
 

Хе-хе...
<input type="checkbox" value="1" onclick="alert(typeof (this.value))">

Атрибут VALUE тега <INPUT> (любого типа), а также тегов <BUTTON>, <TEXTAREA> и <OPTION> всегда возвращает строку (переменную типа String).

И только лишь у тега <LI> атрибут VALUE всегда возвращает число (тип Number), и всегда - целое (Integer). Причём вернёт вам целое число ВСЕГДА - вне зависимости от того, что вы туда сами написали:
<ol>
<li onclick="alert (typeof (this.value) + '=' + this.value)">first [nothing]</li>
<li value="bla-bla-bla" onclick="alert (typeof (this.value) + '=' + this.value)">second [bla-bla-bla]</li>
<li value="123" onclick="alert (typeof (this.value) + '=' + this.value)">third [123]</li>
<li value="0" onclick="alert (typeof (this.value) + '=' + this.value)">fourth [0]</li>
<li value="4.567" onclick="alert (typeof (this.value) + '=' + this.value)">fifth [4.567]</li>
</ol>

  Ответить  
 
 автор: sim5   (20.04.2009 в 18:22)   письмо автору
 
   для: PAT   (20.04.2009 в 18:01)
 

Спасибо, но я знаю об этом.

  Ответить  
 
 автор: ДацкыйКот   (20.04.2009 в 18:07)   письмо автору
 
   для: sim5   (20.04.2009 в 17:21)
 

Спасибо, думаю, внедрю ваше решение.

Прикрутив атрибут value="1" получаю значение:

string(1) "1"


А такое уже можно обрабатывать вышеприведенным кодом. Да и наверное добавится уверенности, что именно это значение буду получать в будущем.

  Ответить  
 
 автор: sim5   (20.04.2009 в 18:21)   письмо автору
 
   для: ДацкыйКот   (20.04.2009 в 18:07)
 

Вам где это надо обрабатывать, как я понимаю в РНР? И в чем проблемы? Вам нужны значения на сервере или типы их?

  Ответить  
 
 автор: ДацкыйКот   (20.04.2009 в 21:34)   письмо автору
 
   для: sim5   (20.04.2009 в 18:21)
 

Ну да.. Установка флажка приводит к ряду действий. Поэтому и необходимо определять установлен он или нет.

Значения и типы здесь идут вместе - см. выше
"проверка предполагает значение переменной $checkboxResult INT(1) или BOOL(TRUE), а строку "on" такой код воспринимает как ноль."

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

  Ответить  
 
 автор: ddhvvn   (20.04.2009 в 22:29)   письмо автору
 
   для: ДацкыйКот   (20.04.2009 в 21:34)
 

ну чтобы проверить отмечен ли чекбокс надо примерно следующее
<?php
if (isset($_POST['cb']))
//отмечен

но "грубо говоря" можно и так
<?php
if ($_POST['cb'])//можно засунуть @ для подавления ошибки
//отмечен

  Ответить  
 
 автор: ДацкыйКот   (21.04.2009 в 19:04)   письмо автору
 
   для: ddhvvn   (20.04.2009 в 22:29)
 

if ($_POST['cb'])


Нет, такой вариант не пройдет по-моему. Поскольку если $_POST['cb'] = "on", то if(), будет видеть 0.

Так что только иссетом проверять.

  Ответить  
 
 автор: sim5   (21.04.2009 в 05:51)   письмо автору
 
   для: ДацкыйКот   (20.04.2009 в 21:34)
 

<?
//для атрибута value равного числовому значению
//достаточо на сервере проверки
//и любое отличное будет равно неотмеченному чекбоксу
$check = isset($_POST['check']) ? intval($_POST['check']) : 0;
if (
$check) { 
  
//действия
}

  Ответить  
 
 автор: ДацкыйКот   (21.04.2009 в 19:00)   письмо автору
 
   для: sim5   (21.04.2009 в 05:51)
 

хм.. ну по сути оба ваших решения проверяют, не является ли переданное значение равным NULL, т.е. методом от противного..

тоже в принципе вариант..

  Ответить  
 
 автор: sim5   (21.04.2009 в 20:18)   письмо автору
 
   для: ДацкыйКот   (21.04.2009 в 19:00)
 

Где тут два решения?

  Ответить  
 
 автор: ДацкыйКот   (21.04.2009 в 21:05)   письмо автору
 
   для: sim5   (21.04.2009 в 20:18)
 

мда.. ну по сути у вас обоих одно решение - isset($_POST(

  Ответить  
 
 автор: sim5   (21.04.2009 в 21:10)   письмо автору
 
   для: ДацкыйКот   (21.04.2009 в 21:05)
 

А вы по щучьему велению хотите?

  Ответить  
 
 автор: ДацкыйКот   (22.04.2009 в 00:36)   письмо автору
 
   для: sim5   (21.04.2009 в 21:10)
 

сорри, не понял вашего стеба..

повторюсь - мне в принципе подходит 2 варианта из вышеописанных. Реализовал более ранний: задавать значение в атрибуте value, в частности = 1. Но в принципе на будущее могу реализовать и проверку на NULL.

Непосредственно код указанный выше использовать не буду, поскольку работаю в ZF и доступ к $_POST буду получать через специальные методы контроллера. Но идеи ваши были понятны и полезны. Спасибо.

  Ответить  
 
 автор: sim5   (22.04.2009 в 05:08)   письмо автору
 
   для: ДацкыйКот   (22.04.2009 в 00:36)
 

Вот я точно ничего не понимаю - если нужно просто узнать отмечен или нет чекбоск, то какая разница чего он там присылает, если нужно именно значения, то при чем тут NULL....

  Ответить  
 
 автор: ДацкыйКот   (22.04.2009 в 08:50)   письмо автору
 
   для: sim5   (22.04.2009 в 05:08)
 

вы прикидываетесь?

еще раз...

отмеченный чекбокс присылает по умолчанию строку "on" или значение, заданное в атрибуте value.
неотмеченный чекбокс присылает NULL.

Поэтому проверка включения чекбокса возможна:

1) или путем проверки значения, заданного в атрибуте value например if($checkboxResult == "1")

2) или проверкой на NULL, т.е. оператором isset().

  Ответить  
 
 автор: sim5   (22.04.2009 в 09:00)   письмо автору
 
   для: ДацкыйКот   (22.04.2009 в 08:50)
 

Для того чтобы проверить включение чекбокса, достаточно if (isset(GET/POSTимячебокса)). А вот кто прикидывается....

  Ответить  
 
 автор: ddhvvn   (22.04.2009 в 09:59)   письмо автору
 
   для: ДацкыйКот   (22.04.2009 в 08:50)
 

неотмеченный чекбокс не присылает НИЧЕГО! а значит, смотрите мой первый в этой теме пост.
Чего Вы тут всем мозг парите и себе может быть тоже? Неужели так трудно проверить 4 строчки кода?!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования