2

私はざっと目を通しただけですが、具体的で類似した例/問い合わせが見つからなかったので、ここで最初の質問を出したいと思いました。

私はサイトの「最初のページ」にさまざまな会社の多くのグループを持っています。各グループには1〜20程度のチェックボックスが付いた入力フィールドがあるため、クライアントは以下のフォームを送信した後、さまざまな情報を送信する必要があります。phpスクリプトのみを実行する別のページで、フォームをホスト会社に電子メールで送信します。メッセージは次のように表示されます:(そして私はコンテンツを変更しました...)

読んでもらいたい:

            *Favorite Animals: Dog, Cat, Bird*

しかし、私はそれを読んでいます:

            Favorite Animals: Dog,
            Favorite Animals: Cat,
            Favorite Animals: Bird,

私のコード:

最初のページには、明らかに異なる値を持つ同じ配列内の異なるチェックボックスのリストがあります...以下に示すように:

<input type="checkbox" name="animals[]" value="Dogs" class="cb">
 Dogs<br>
<input type="checkbox" name="animals[]" value="Cats" class="cb">
 Cats<br>
<input type="checkbox" name="animals[]" value="Birds" class="cb">
 Birds<br>
<input type="checkbox" name="animals[]" value="Dragons" class="cb">
 Dragons<br>

次に、上記のコードが(投稿を介して)別のphpドキュメントに送信されます。

この2ページ目の関連コードは次のとおりです。

$animals = $_POST['animals'];

下...

    foreach ($animals as $an) {
$email_message .= "Favorite Animals: ".clean_string($an)." ,\n";
    }

何が起こっているのかはわかりますが、foreachステートメントを実行して、「お気に入りの動物」が1回表示され、その後に前のページで選択されたものの可能な配列が表示されるようにする方法がわかりません。

エラーはなく、望まない方法で情報を取得するだけです。どんな助けでもいただければ幸いです!

4

5 に答える 5

1

foreach余分なコンマを自分で使用して処理する代わりに、を使用しますimplode

$email_message = implode(', ', array_map('clean_string', $animals);
于 2012-10-08T17:56:47.747 に答える
0

ここで起こっていることは、フォームは選択されたものだけを投稿し、選択されなかったものは投稿しないということです。おそらくあなたが望むのは、動物のすべての可能な値のリストをそれらの選択とともに表示することです。これを行うには、送信フォームを変更して、すべての値を付けて投稿します。

<input type="checkbox" name="animals['Dogs']" onclick="this.value='yes'" value="no" class="cb">
 Dogs<br>
<input type="checkbox" name="animals['Cats']" onclick="this.value='yes'" value="no" class="cb">
 Cats<br>
<input type="checkbox" name="animals['Birds']" onclick="this.value='yes'" value="no" class="cb">
 Birds<br>
<input type="checkbox" name="animals['Dragons']" onclick="this.value='yes'" value="no" class="cb">
 Dragons<br>

そして、電子メールの印刷機能を更新して、配列にキーを含める必要があります。

$email_message = "Favorite Animals:";
foreach ($animals as $key=>$val) {
  $email_message .=".clean_string($key). "=" . clean_string($val) . " ,\n";
}

つまり、すべての値が渡されますが、誰かがそれらをクリックすると、それらは「no」から「yes」に変化します。これは回避策であり、他の方法で処理できますが、フォーム以外の更新が必要になる場合があります。

于 2012-10-08T17:08:28.157 に答える
0

他の答えははるかに優れていますが、次のような条件付きステートメントを使用してこれを達成することもできます。

$animals = array('Animal 1', 'Animal 2', 'Animal 3');
$email_message = "";
$firstTime = true;
foreach ($animals as $an) {
    if ($firstTime === true) {
        $email_message .= "Favorite Animals: ".$an." ,\n";
        $firstTime = false;
    } else {
        $email_message .= $an." ,\n";
    }
}

$email_message = substr($email_message, 0, -3);
echo $email_message;
于 2012-10-08T17:16:15.677 に答える
0

文字列$email_message「FavoriteAnimals:」で初期化し、配列の残りの部分をループに追加するだけです

$email_message = "Favorite Animals: ";
 foreach ($animals as $an) {
$email_message .= clean_string($an)." , ";
    }
于 2012-10-08T17:01:45.523 に答える
0

静的な部分をループの外側に持っていくだけです。それはそれをする必要があります。

 $email_message .= "Favorite Animals: ";

 foreach ($animals as $an) {
   $email_message .= clean_string($an)." ,";
 }
  $email_message = rtrim ($email_message, ",");

 $email_message .= "\n";

 // Continue appending rest of the email message
于 2012-10-08T17:09:36.127 に答える