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>

然后将上面的代码提交(通过 post)到一个单独的 php 文档。

第二页中的相关代码是:

$animals = $_POST['animals'];

以下...

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

我意识到发生了什么,但我还没有想出一种方法来处理 foreach 语句,以便显示一次“最喜欢的动物”,然后显示上一页上选择的任何可能的数组。

我没有错误,只是以我不希望的方式获取信息。任何帮助,将不胜感激!

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

所以发生的事情是所有的值都被传递了,但是当有人点击它们时,它们会从“否”变为“是”。这是一种解决方法,还有其他处理方法,但它们可能需要更新的不仅仅是您的表单。

于 2012-10-08T17:08:28.157 回答
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 回答
0

$email_message“Favorite Animals:”初始化字符串,然后在循环中追加数组的其余部分

$email_message = "Favorite Animals: ";
 foreach ($animals as $an) {
$email_message .= clean_string($an)." , ";
    }
于 2012-10-08T17:01:45.523 回答
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 回答