3

複数のチェックボックスを備えたフォームがあり、それを配列に入れたいと思います。ここで提供されている例を参照してください:http ://www.kavoir.com/2009/01/php-checkbox-array-in-form-handling-multiple-checkbox-values-in-an-array.html

だから私はファイルを準備しました:

チェックボックス.php:

<form action="checkboxes2.php" method="post">
<input type="checkbox" name="tags[]" value="1" />1<br>
<input type="checkbox" name="tags[]" value="2" />2<br>
<input type="checkbox" name="tags[]" value="3" />3<br>
<input type="checkbox" name="tags[]" value="4" />4<br>
<input type="submit" value="Send" />
</form>

checkboxes2.php:

<?php
print_r($_POST["tags"]);
?>

非常に単純です...これらのテキストボックスの値のみを取得する必要があり、選択されているかどうかは取得しないでください。しかし、私はまだこのエラーを受け取ります:

Undefined index: tags in checkboxes2.php on line 2

ここで何を間違えたのか全くわかりません。上記のリンクの例を見て、すべてをまったく同じように実行しました(主に、送信ボタンの追加など、一部の部分のコピー/貼り付けと変更)が、例に示すような出力が得られません。少なくとも、これらの各チェックボックスの値を取得する必要がありますよね?

やりたいこと:チェックボックスの配列をチェックし、どのチェックボックスが選択されているかを確認して、次のように2番目の配列に「はい」または「いいえ」を追加します。

<?php
  $number1 = $_POST["tags"];
  $number2 = array();

  foreach($number1 as $number1_output)
  {
    if(isset($number1_output))
    {
      $number2[] = "yes";
    }
    else
    {
      $number2[] = "no";
    }
  }

  print_r($number2);
?>

まあ...それは半分しか機能しません。選択されたチェックボックスのみがアレイに追加されます。したがって、「3」と「4」を選択すると、次のようになります。

Array ( [0] => yes [1] => yes )

配列のチェックボックスを処理して検証するための最良の方法は何ですか?

4

4 に答える 4

4

フォームの送信時に何も送信しないように選択されていないチェックボックス。つまり、これらのチェックボックスのどれも選択されていない場合、$_POST配列に属性はtagsありません。tags

そのため、コードは次のようになります。

<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   if (isset($_POST['tags'])) {
      print_r($_POST['tags']);
   }
}
?>

1行目は、POSTが実際に行われたことを確認し、2行目は、ダンプするデータが実際にあることを確認します。

コードの残りの部分では、issetはかなり無意味です...チェックボックスは選択されている場合にのみPOSTデータに存在するため、foreachループ内でisset()を実行しても意味がありません。チェックボックスがない場合はforeachがオンになるため、定義上、foreachのすべてがisset()==trueになります。

yesそのため、foreachループは値のみを生成し、。は生成しませんno

より良い回避策は、フォーム内で配列キーを指定することです。

<input type="checkbox" name="tags[1]" value="1" />
<input type="checkbox" name="tags[2]" value="2" />
etc...

その後、

<?php
if (b blah blah blah verify post stuff) {
    for ($i = 1; $i <= $max_tags_allowed; $i++) {
      if (isset($_POST['tags'][$i])) {
          $message2[] = 'yes';
      } else {
          $message2[] = 'no';
      }
    }
}
于 2012-10-18T14:57:51.290 に答える
2

または、チェックボックスがオンになっていない場合に値を送信するチェックボックスが必要な場合は、チェックボックスの前に非表示の入力フィールドを追加できます。

<input type="hidden" name="tag[1]" value="off" />
<input type="checkbox" name="tag[1]" value="on />

チェックボックスは設定されている場合にのみ送信されますが、HTMLの後半にあるように非表示を上書きするため、チェックボックスがtag[1]オンになっているかどうかに応じて、常に「オフ」または「オン」のいずれかで設定されます。

于 2012-10-18T15:06:15.367 に答える
0

チェックボックス.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>My form</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" languaje="javascript">
$(document).ready(function() {
  $('.checkbox').click(function(){
    var values="";
    $('.checkbox:checked').each(function(index) {           
        values+=$(this).val();
        $('#tagsVal').val(values);
    });
  });
});
</script>
</head>
<body>
  <form action="checkboxes2.php" method="post">
   <input type="checkbox" name="tags1" value="1" class="checkbox"/>1<br><!--Notice the class="checkbox" attribute is important for the jquery function-->
   <input type="checkbox" name="tags2" value="2" class="checkbox"/>2<br>
   <input type="checkbox" name="tags3" value="3" class="checkbox"/>3<br>
   <input type="checkbox" name="tags4" value="4" class="checkbox"/>4<br>
   <input type="hidden" name="tagsVal" id="tagsVal" value="" />
   <input type="submit" value="Send" />
  </form>
</body>
</html>

したがって、$ _ POST ['tagVal']で取得するものは、値を取得します。チェックボックス1、3、および4をオンにすると、文字列134が表示されます。checkboxes2.phpでは、必要な場合にのみ文字列を配列に分割する必要があります。

$arr1 = str_split($_POST['tagVal']);

よろしくルイス

于 2012-10-18T15:42:02.200 に答える
0

まず、次のように、可能なすべてのキーで「no」を保持する配列を作成します。

$no = array(0 => "no", 1 => "no"); // or array("no", "no");

次に、次のような目的の配列を取得できます。

$checkValues = array_flip($_POST["tags"]) + $no;

このようにして、$ _ POST ["tags"]の値がキーになり、+演算子は、キーを保持したまま2つの配列をマージし、最初の配列に値が存在する場合は2番目の配列からも値を省略します。このようにして、次のように確認できます。

$fourthChecked = $checkValues[4] !== "no";

他の答えよりもずっと簡単だと思いました。幸運を!

于 2012-10-18T15:04:45.617 に答える