4

将不胜感激这方面的一些帮助:

我有一组复选框,鼓励用户选择至少一个选项。我想使用 PHP 将所有这些选项存储在一个变量中,然后将此变量附加到电子邮件正文的末尾,以使用电子邮件发送到站点主机。但是,我似乎只能检索用户选择的最后一个选项。我曾尝试使用数组语法(例如 name="instrument[]"),但似乎找不到从该数组中检索值的方法。我使用了 'implode' 方法来存储 post 值,但我一直收到一条错误消息,上面写着“警告:implode(): Invalid arguments pass in C:\xampp\htdocs\academy\contact-process.php 在线8"。

我的代码如下:

联系方式.html

<tr>
    <td>
        <label id="checkbox">Piano</label>
        <input id="piano" type="checkbox" name="instrument[]" value="Piano" class="required" title="Please check at least one option.">
    </td>
    <td>
        <label id="checkbox">Flute</label>
        <input id="flute" type="checkbox" name="instrument[]" value="Flute">
    </td>
    <td>
        <label id="checkbox">Singing</label>
        <input id="singing" type="checkbox" name="instrument[]" value="Singing">
    </td>
</tr>


<tr>
    <td>
        <label id="checkbox">Violin</label>
        <input id="violin" type="checkbox" name="instrument[]" value="Violin">
    </td>

联系-process.php:

<pre><?php


$title = $_POST["title"];
$forname = $_POST["firstname"];
$surname = $_POST["lastname"];
$phone = $_POST["phone"];
$instrument = implode(' ', $_POST["instrument"]);
$hear = $_POST["method"];       
$enrole = $_POST["child"];
$dob = $_POST["date"];
$message = $_POST["enquiry"];




$email_body = "";
$email_body = $email_body . "Title: " . $title . "\n";
$email_body = $email_body . "Forname: " . $forname . "\n";
$email_body = $email_body . "Surname: " . $surname . "\n";
$email_body = $email_body . "Telephone Number: " . $phone . "\n";
$email_body = $email_body . "Heard About You From: " . $hear . "\n";
$email_body = $email_body . "Interested In Learning: " . $instrument . "\n";
$email_body = $email_body . "Would Like To Enrole A(n): " . $enrole . "\n";
$email_body = $email_body . "Child's Date of Birth: " . $dob . "\n";
$email_body = $email_body . "Message: " . $message;

echo $email_body; 

?></pre>

目前,这会生成如上所述的错误消息。

有人知道解决方案吗?

非常感谢您的回复!!

罗伯特。

4

5 回答 5

3

下面是您现在的数组输入类型。

 <input id="singing" type="checkbox" name="instrument[]" value="Singing">

你必须像这样循环处理它

 foreach($_POST['instrument'] as $instrument)
{
    echo $instrument.'<br>';
}
于 2013-06-24T11:56:15.117 回答
2

尝试这个,

$instrument = (is_array($_POST["instrument"])) ? implode(' ', $_POST["instrument"]) : '';
于 2013-06-24T11:51:01.330 回答
0

我有一个类似的问题,我正在使用这段代码,它可以工作:

$var = nl2br(implode(', ', $_POST['var']));

要输出邮件中的值,我使用:

$msg .= "<p><strong>Var:</strong> ".$var."</p>\r\n";

并以我使用的形式:

<input type="checkbox" name="var[]" ... />

我现在遇到的唯一问题是,如果用户未选中所有复选框,PHP 会发送邮件但返回警告“implode():传递的参数无效”

于 2013-10-07T13:41:57.680 回答
0

您也可以使用该json_encode方法解决此问题。

json_encode($_POST['instrument']);

它将数组转换为 json 字符串,即{'piono','Flute','Singing','Violin'}

下次在显示您可以使用的已选择的时

json_decode({'piono','Flute','Singing','Violin'});

它将json字符串转换为数组,并且这个json字符串的权重也很低。您可以将此 json 字符串直接存储在 DB 中。

于 2013-06-24T11:53:02.277 回答
0

您是否尝试过像这样浏览 $intrument 数组?

$email_body .= "Interested In Learning: ";
foreach($_POST['instrument'] as $value){
    $email_body .= $value;
}
$email_body .= "\n";

顺便说一句,我更喜欢使用 "$email_body .=" ,它等同于 "$email_body = $email_body 。" (但更短:P)。

于 2013-06-24T11:48:41.480 回答