非常感谢你的帮助:
我有一组复选框,鼓励用户选择至少一个选项。我想使用PHP将所有这些选项存储在单个变量中,然后将此变量附加到电子邮件正文的末尾,以使用电子邮件发送到站点主机。但是,我似乎只能检索用户选择的最后一个选项。我已经尝试使用数组语法(例如name =“instrument []”)但我似乎找不到从这个数组中检索值的方法。我使用'implode'方法来存储post值,但我继续收到一条错误消息,说“Warning:implode():在C:\ xampp \ htdocs \ academy \ contact-process.php中传递的无效参数在线8" 。
我的代码如下:
Contact.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>
此时会生成如上所述的错误消息。
任何人都知道解决方案吗?
非常感谢任何回复!!
罗伯特。
答案 0 :(得分:3)
现在是您的数组输入类型。
<input id="singing" type="checkbox" name="instrument[]" value="Singing">
你必须像这样循环来处理它
foreach($_POST['instrument'] as $instrument)
{
echo $instrument.'<br>';
}
答案 1 :(得分:2)
试试这个,
$instrument = (is_array($_POST["instrument"])) ? implode(' ', $_POST["instrument"]) : '';
答案 2 :(得分:0)
您是否尝试过像这样浏览$ instrument数组?
$email_body .= "Interested In Learning: ";
foreach($_POST['instrument'] as $value){
$email_body .= $value;
}
$email_body .= "\n";
顺便说一句,我更喜欢使用“$ email_body。=”,相当于“$ email_body = $ email_body”。 (但更短:P)。
答案 3 :(得分:0)
您也可以使用json_encode
方法解决此问题。
json_encode($_POST['instrument']);
它会将数组转换为json字符串{'piono','Flute','Singing','Violin'}
下次显示已选择的时间时,您可以使用
json_decode({'piono','Flute','Singing','Violin'});
它将json字符串转换为数组,此json字符串权重也很低。您可以将此json字符串直接存储在DB中。
答案 4 :(得分:0)
我遇到了类似的问题,而且我正在使用此代码,它可以正常运行:
$var = nl2br(implode(', ', $_POST['var']));
输出邮件中的值,我使用:
$msg .= "<p><strong>Var:</strong> ".$var."</p>\r\n";
并以我使用的形式:
<input type="checkbox" name="var[]" ... />
我现在唯一的问题是,如果用户未选中所有复选框,PHP会发送邮件但会返回警告“implode():传递的参数无效”