43

HTML フォームがあります。PHP を使用して、フォームのデータを MySQL データベースに送信しています。フォームの質問への回答には、チェックボックスが付いているものがあります。明らかに、ユーザーは 1 つの質問に対してすべてのチェックボックスをオンにする必要はありません。また、その他の質問 (ラジオ グループを含む) をオプションにしたいと考えています。

しかし、空のボックスやラジオ グループなどを含むフォームを送信すると、それぞれの「未定義のインデックス」エラー メッセージの長いリストを受け取りました。

どうすればこれを回避できますか? ありがとう。

4

8 に答える 8

100

私は時々このテクニックを使用しました:

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

注:これはサーバー側の言語によって解釈が異なるため、必要に応じてテストと調整を行ってください。ヒントをくれたSimonSimCityに感謝します。

于 2009-01-24T20:05:22.647 に答える
43

チェックされていないラジオまたはチェックボックス要素は、成功したと見なされないため送信されません。issetそのため、 orempty関数を使用して送信されているかどうかを確認する必要があります。

if (isset($_POST['checkbox'])) {
    // checkbox has been checked
}
于 2009-01-24T18:18:04.097 に答える
7

チェックされていないチェックボックスは、POST データで送信されません。空かどうかを確認する必要があります。

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

PHP ではempty()isset()通知を生成しません。

于 2009-01-24T18:20:14.933 に答える
5

以下は、JavaScript を使用した簡単な回避策です。

チェックボックスを含むフォームが送信される前に、「オフ」のものを 0 に設定し、それらが送信されることを確認します。これは、たとえばチェックボックス配列で機能します。

///// 例 //////

id="formId" のフォームが与えられた

<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>
于 2009-12-06T08:43:45.250 に答える
3

fmsfのコードに追加するには、チェックボックスを追加するときに、名前に[]を付けて配列にします

<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">

于 2009-01-24T23:00:34.167 に答える
2

これを使って

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

または、0の代わりに値がないものを使用します

于 2009-01-24T20:10:55.133 に答える
2

どちらがチェックされたかどうかを検出するのに苦労しています。

for ループでフォームに入力する場合は、値プロパティをデータ ホルダーとして使用してください。

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

フォームを送信すると、チェックされたチェックボックスの注文番号が表示されます (この場合、3 番目と 4 番目のチェックボックスをチェックしました)。

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

ループでフォーム データを処理している場合、たとえば post.php で、次のコードを使用して、関連する行が選択されているかどうかを検出します。

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

テスト用の最終コード:

    <?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>
于 2012-03-23T10:39:41.717 に答える