отправить значение 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>
 
да и если значение вообще не приходит, то можно так:

<?php
if(!IsSet($_POST['mycheckbox'])) $_POST['mycheckbox'] = 0;
//а дальше делайте что хотите
?>
 

А если использовать дополнительно поля типа "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>