Boş Onay kutularını bir HTML form gönderin

7 Cevap php

Ben bir HTML formu var - PHP ile MySQL veritabanına form verilerini gönderiyorum. Formdaki soruların cevaplarını Bazı onay kutularını var. Açıkçası, kullanıcı bir soru için tüm onay kutularını işaretleyin zorunda değildir. Ben de (radyo grupları dahil) diğer sorular isteğe bağlı yapmak istiyorum.

Ben boş kutular, radyo vb gruplar ile formu göndermek Ancak, onlardan her biri için 'Undefined index' hata mesajlarının uzun bir listesini aldı.

Bunu nasıl etrafında alabilirsiniz? Teşekkürler.

7 Cevap

Onlar successful olarak kabul edilmez olarak denetlenmeyen bir radyo veya onay kutusu elemanları teslim edilmez. Yani onlar isset veya empty fonksiyonu kullanılarak gönderilen olup olmadığını kontrol etmelisiniz.

if (isset($_POST['checkbox'])) {
    // checkbox has been checked
}

Ben zaman zaman bu tekniği kullandım:

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

note: Bu farklı sunucu tarafı dillerde differently yorumlanır, yani testi ve gerekirse ayarlayın alır. Bahşiş için SimonSimCity teşekkürler.

An unchecked checkbox doesn't get sent in the POST data. You should just check if it's empty:

if (empty($_POST['myCheckbox']))
     ....
else
     ....

PHP empty() and isset() bildirimlerini üretemeyen.

İşte javascript kullanarak basit bir geçici çözüm:

kutularını içeren form gönderilmeden önce, 0 "kapalı" olanları belirlemek ve emin onlar teslim olmak için bunları kontrol edin. Bu örnek için onay kutusu diziler için çalışıyor.

/ / / / / Örneği / / / / / /

id = "formID" ile bir form verilen

<form id="formId" onSubmit="return formSubmit('formId');" method="POST" action="yourAction.php">

<!--  your checkboxes here . for example: -->

<input type="checkbox" name="cb[]" value="1" >R
<input type="checkbox" name="cb[]" value="1" >G
<input type="checkbox" name="cb[]" value="1" >B

</form>
<?php


if($_POST['cb'][$i] == 0) {
    // empty
} elseif ($_POST['cb'][$i] == 1) {
    // checked
} else {
    // ????
}

?>


<script>

function formSubmit(formId){

var theForm = document.getElementById(formId); // get the form

var cb = theForm.getElementsByTagName('input'); // get the inputs

for(var i=0;i<cb.length;i++){ 
    if(cb[i].type=='checkbox' && !cb[i].checked)  // if this is an unchecked checkbox
    {
       cb[i].value = 0; // set the value to "off"
       cb[i].checked = true; // make sure it submits
    }
}

return true;

}

</script>

Kutularını eklerken fmsf koduna eklemek için, ben adı [] alarak onları bir dizi yapmak

<FORM METHOD=POST ACTION="statistics.jsp?q=1&g=1">
    <input type="radio" name="gerais_radio" value="primeiras">Primeiras Consultas por medico<br/>
    <input type="radio" name="gerais_radio" value="salas">Consultas por Sala <br/>
    <input type="radio" name="gerais_radio" value="assistencia">Pacientes por assistencia<br/>
    <input type="checkbox" name="option[]" value="Option1">Option1<br/>
    <input type="checkbox" name="option[]" value="Option2">Option2<br/>
    <input type="checkbox" name="option[]" value="Option3">Option3<br/>
    <input type="submit" value="Ver">

Bunu kullanın

$myvalue = (isset($_POST['checkbox']) ? $_POST['checkbox'] : 0;

Ya da hiçbir değer 0'a için ne olursa olsun yerine

Biz bir kontrol ya da kendısı üzerinde sorun vardır.

Eğer döngü için bir biçim doldururken, bir veri sahibi olarak değer özelliğini kullanın lütfen:

    <?php for($i=1;$i<6;$i++):?>
    <input type="checkbox" name="active[]" value="<?php echo $i ?>"
    <?endfor;?>

Formu göndermek Eğer (bu durumda ben 3 ve 4 kutularını kontrol) kontrol onay kutularını sipariş numaralarını alırsınız:

   array(1) {       
       ["active"]=>
          array(2) {
            [0]=>       
             string(1) "3"
            [1]=>
             string(1) "4"
          }
   }

Eğer döngü içinde form verilerini işlerken, ilgili satır seçili olup olmadığını tespit etmek için aşağıdaki kodu kullanabilirsiniz, en post.php içinde diyelim:

    if(in_array($_POST['active'] ,$i)) 
            $answer_result = true;
        else 
            $answer_result = false;

Testi için son kodu:

    <?php if (isset($_POST) && !empty($_POST)):
        echo '<pre>';
        var_dump($_POST);
        echo '</pre>';
    endif;
    ?>
    <form action="test.php" method="post">
    <?php for($i=1;$i<6;$i++):?>
    <input type="checkbox" name="active[]" value="<?php echo $i; ?>" />
    <?php endfor;?>
    <button type="submit">Submit</button>
    </form>