отправить значение unchecked checkbox?
Как известно, если у checkbox свойство checked = false то его значение просто не отправляется на сервер.
Как сделать чтобы оно отравлялось? нужно потому что, я отправляю массивы, и их размеры должны соответствовать, а в данном случае так не выходит.
Как сделать чтобы оно отравлялось? нужно потому что, я отправляю массивы, и их размеры должны соответствовать, а в данном случае так не выходит.
1 ответов
Не заморачивайтесь:
<input type="hidden" name="chkbx" value="0" />
<input type="chekbox" name="chkbx" />
Если чекбокс не отмечен - отправится 0 из хиддена. Если отмечен - отправится 1 из чекбокса.
И будет вам счастье.
Для недоверчивых предлагаю погонять на валидаторе:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Validator test</title>
</head>
<body>
<div>
<form action="#">
<div>
<input type="hidden" name="chkbx" value="0" />
<input type="checkbox" name="chkbx" />
</div>
</form>
</div>
</body>
</html>
да и если значение вообще не приходит, то можно так:
А если использовать дополнительно поля типа "hidden" и отправлять массив этих полей, а чекбоксы использовать только в качестве тригеров для значений hidden-полей?
А чем вас не устраивает обычный способ передачи массивов input'ов?
На форме:
<input type="checkbox" name="ch_box[key_01]" value="key__01">
<input type="checkbox" name="ch_box[key_02]" value="key__02">
<input type="checkbox" name="ch_box[key_03]" value="key__03">
А потом в php-скрипте:
$box=$_POST['ch_box'];
while (list ($key,$val) = @each ($box)) {
//использование;
}
А если нужно определить все элементы массива, то можно сделать цикл сбросив все допустимые элементы, а потом проверять установлен ли данный checkbox или нет, меняя элемент в массиве-результате.
UPD. Вот как-то так
<html>
<body>
<hr>
<form action="test.php">
<?php
$arr = array ('k1'=> 'v1', 'k2'=> 'v2', 'k3'=> 'v3', 'k4'=> 'v4','k5'=> 'v5');
foreach ($arr as $k => $v)
{
echo '<input type="checkbox" name="ch_box['.$k.']" value="'.$v.'">'.$v.'</input>';
}
?>
<input type="submit">
</form>
<hr>
<?php
$box = $_REQUEST['ch_box'];
while (list ($key, $val) = each($box))
{
echo "<p>received : ".$key." : ". $val." :</p>";
}
echo "<hr>";
foreach ($arr as $key => $val)
{
if (isset($box[$key]))
echo "<p>: ".$key." : ". $val." : set</p>";
else
echo "<p>: ".$key." : ". $val." : unset</p>";
}
?>
<hr>
</body>
</html>