1

テキストフィールドから値を出力するのと同じ方法で、チェックボックスの値を出力したいと思います。チェックボックスには複数の入力を含めることができるため、そのために配列を使用していますが、値の配列を循環させようとしてもうまくいきませんでした。foreach($type as $item) を試し、私が持っている PHP の本にあるように HTML 内で $item をエコーし​​ましたが、うまくいきませんでした。どうすればいいですか、コードはどこにありますか? 何らかの理由で HTML 内で PHP を使用することもできません。それがなぜなのか、または echo<<<_END と関係があるのか​​ どうかはわかりません。助けていただければ幸いです。

<?php // formtest.php
if (isset($_POST['game'])) $game = $_POST['game'];
else $game = "(Not entered)";
if (isset($_POST['genre'])) $genre = $_POST['genre'];
else $genre = "(Not entered)";
if (isset($_POST['type'])) $type = $_POST['type'];
else $type = "(Not entered)";
echo <<<_END
<html>
<head>
    <title>Form Test</title>
</head>
<body>
Your game is: $game in the $genre genre and of the type<br />
<form method="post" action="formtest.php">
    What is your game?
    <input type="text" name="game" />
    <br />
    What is your genre?
    <input type="text" name="genre" />
    <br />
    Type?
       Retail <input type="checkbox" name="type[]" value="Retail" />
Downloadable <input type="checkbox" name="type[]" value="Downloadable" />
Free <input type="checkbox" name="type[]" value="Free" />
<br />
    <input type="submit" />
</form>
</body>
</html>
_END;

?>

4

3 に答える 3

1

現在のフォームでは、$_POST['type']ラジオではなくチェックボックス (および適切な名前) を使用しているため、配列になります。ここでは、表示のために内破するだけですが、他の配列と同じようにループすることができます。フォームが何を提供しているのか疑問に思っているときはいつでも、データがどこから来ているかによって、var_dump($_POST)またはそれに応じてできることに注意してください。var_dump($_GET)デバッグに大いに役立ちます。

これが私が得たものです。ヒアドキュメントから切り替えましたが$type、どこかに追加し直せばヒアドキュメントは正常に機能するはずです。元のコードでは気づきませんでした:

<?php // formtest.php
if (isset($_POST['game'])) $game = $_POST['game'];
else $game = "(Not entered)";
if (isset($_POST['genre'])) $genre = $_POST['genre']; //Edit: Fixed line, oops
else $genre = "(Not entered)";
if (isset($_POST['type'])) $type = implode(', ',$_POST['type']);
else $type = "(Not entered)";

//Normally I'd specify a charset, but for simplicity's sake I won't here.
$type = htmlspecialchars($type);
$game = htmlspecialchars($game);
$genre = htmlspecialchars($genre);

?>
<html>
<head>
    <title>Form Test</title>
</head>
<body>
Your game is: <?php echo $game; ?> in 
the <?php echo $genre; ?> genre and of the type <?php echo $type; ?><br />
<form method="post" action="">
    What is your game?
    <input type="text" name="game" />
    <br />
    What is your genre?
    <input type="text" name="genre" />
    <br />
    Type?
       Retail <input type="checkbox" name="type[]" value="Retail" />
Downloadable <input type="checkbox" name="type[]" value="Downloadable" />
Free <input type="checkbox" name="type[]" value="Free" />
<br />
    <input type="submit" />
</form>
</body>
</html>

補遺:次のような無線を切り替えて使用した場合

<input type="radio" name="type" value="Downloadable" />

$_POST['type']セットの 1 つしか選択できないため、単純な文字列になります。

于 2012-08-27T17:00:24.440 に答える
0

まず、html 出力全体をエコーする必要はありません。2番目の質問にはラジオボタンがありますが、htmlにはチェックボックスが表示されます。ラジオ フィールドは 1 つの結果しか生成しないため、名前の後に [] は必要ありません。[] で名前を付けると、チェックボックスは配列を返します。したがって、チェックボックスを使用している場合は、結果を配列として処理する必要があります。フィールドをラジオに変更すると、正常に動作するはずです。

<?php // formtest.php
if (isset($_POST['game'])) {
    $game = $_POST['game'];
}
else { $game = "(Not entered)"; }
if (isset($_POST['genre'])) {
    $genre = $_POST['genre'];
}
else { $genre = "(Not entered)"; }
if (isset($_POST['type'])) {
    $type = $_POST['type'];
}
else { $type = "(Not entered)"; }
?>
<html>
  <head>
    <title>Form Test</title>
  </head>
  <body>
    Your game is: <?php echo $game; ?> in the <?php echo $genre; ?> genre and of the type <?php echo $type; ?><br />
    <form method="post" action="test.php">
      What is your game?
      <input type="text" name="game" <?php if ($game != "(Not entered)") { echo "value='" . $game . "'"; } ?> />
      <br />
      What is your genre?
      <input type="text" name="genre" <?php if ($genre != "(Not entered)") { echo "value='" . $genre . "'"; } ?> />
      <br />
      Type?
      Retail <input type="radio" name="type" value="Retail" <?php if ($type == "Retail") { echo "checked"; } ?> />
      Downloadable <input type="radio" name="type" value="Downloadable" <?php if ($type == "Downloadable") { echo "checked"; } ?> />
      Free <input type="radio" name="type" value="Free" <?php if ($type == "Free") { echo "checked"; } ?> />
      <br />
      <input type="submit" />
    </form>
  </body>
</html>
于 2012-08-27T16:50:37.053 に答える
0

投稿するファイルには、type[] が配列として保存されます。例えば

$a=$_POST['タイプ'];

ラジオボタンに対してこれを行う意味はありませんが、それらの目的は1つの値のみを渡すことです(特に必要がない限り)。

于 2012-08-27T16:59:44.510 に答える