PHP 多个复选框数组未发送所有值
PHP Multiple Checkbox Array Not Sending All Values
我阅读了关于 Whosebug 的一些问题,但其中 none 解决了我的问题,但也许我只是忽略了一些事情,因为我对 PHP 缺乏熟练程度。
我知道表单代码是正确的,但是我的 PHP 有问题,因为只有复选框的最后一个元素在完成表单后才被发送。
我不是在寻求解决方案,我只是需要朝正确的方向前进,这样我才能知道我做错了什么。
抱歉,我对后端不熟悉,所以这对我来说是一个学习过程。
谢谢!
这里是 PHP(出于隐私原因更改了电子邮件):
<?php
if ($_POST["submit"]) {
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$company = $_POST['company'];
$website = $_POST['website'];
$checkboxes = $_POST['checkboxvar'];
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
$timeframe = $_POST['timeframe'];
$description = $_POST['description'];
$to = 'example@example.com';
$subject = 'Full Contact Form';
$body ="Name: $name\n\n
E-Mail: $email\n\n
Phone: $phone\n\n
Company: $company\n\n
Website: $website\n\n
Checkboxes: $value\n
Time Frame: $timeframe\n\n
Project Description:\n\n $description";
if (!$_POST['name']) {
$errName = 'Please enter your name';
}
if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errEmail = 'Please enter a valid email address';
}
if (!$_POST['description']) {
$errDescription = 'Please enter your project description';
}
if (!$errName && !$errEmail && !$errDescription) {
if (mail ($to, $subject, $body)) {
$result='<div class="alert alert-success alert-success-full-contact">Your request has been sent!</div>';
} else {
$result='<div class="alert alert-danger alert-danger-full-contact">Sorry, there was an error. Try again later!</div>';
}
}
}
?>
您的问题出在循环检查复选框值的方式上。
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
现在,您不断地覆盖 $value
的值
相反,使用类似
$selectedValues = "";
foreach ($checkboxes as $checkboxes=>$value) {
$selectedValues .= $value ."\n";
}
这是什么?:
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
如果您想查看您必须输入的复选框值:
echo $value."\n";
没有意义
根据你的问题和代码,你的表单很可能是正确的,但正如你提到的,你只发送了最后一个值:
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
...
Checkboxes: $value\n
注意$value
包含循环的最后一个值,所以最后一个选中框的值。
你可能想要这样的东西而不是那个循环:
$value = implode(', ', $_POST['checkboxvar']);
这将为您提供一个逗号分隔的复选框值列表。
或者,如果您想要像示例中那样换行:
$value = implode("\n", $_POST['checkboxvar']);
我阅读了关于 Whosebug 的一些问题,但其中 none 解决了我的问题,但也许我只是忽略了一些事情,因为我对 PHP 缺乏熟练程度。
我知道表单代码是正确的,但是我的 PHP 有问题,因为只有复选框的最后一个元素在完成表单后才被发送。
我不是在寻求解决方案,我只是需要朝正确的方向前进,这样我才能知道我做错了什么。
抱歉,我对后端不熟悉,所以这对我来说是一个学习过程。
谢谢!
这里是 PHP(出于隐私原因更改了电子邮件):
<?php
if ($_POST["submit"]) {
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$company = $_POST['company'];
$website = $_POST['website'];
$checkboxes = $_POST['checkboxvar'];
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
$timeframe = $_POST['timeframe'];
$description = $_POST['description'];
$to = 'example@example.com';
$subject = 'Full Contact Form';
$body ="Name: $name\n\n
E-Mail: $email\n\n
Phone: $phone\n\n
Company: $company\n\n
Website: $website\n\n
Checkboxes: $value\n
Time Frame: $timeframe\n\n
Project Description:\n\n $description";
if (!$_POST['name']) {
$errName = 'Please enter your name';
}
if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errEmail = 'Please enter a valid email address';
}
if (!$_POST['description']) {
$errDescription = 'Please enter your project description';
}
if (!$errName && !$errEmail && !$errDescription) {
if (mail ($to, $subject, $body)) {
$result='<div class="alert alert-success alert-success-full-contact">Your request has been sent!</div>';
} else {
$result='<div class="alert alert-danger alert-danger-full-contact">Sorry, there was an error. Try again later!</div>';
}
}
}
?>
您的问题出在循环检查复选框值的方式上。
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
现在,您不断地覆盖 $value
的值
相反,使用类似
$selectedValues = "";
foreach ($checkboxes as $checkboxes=>$value) {
$selectedValues .= $value ."\n";
}
这是什么?:
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
如果您想查看您必须输入的复选框值:
echo $value."\n";
没有意义
根据你的问题和代码,你的表单很可能是正确的,但正如你提到的,你只发送了最后一个值:
foreach ($checkboxes as $checkboxes=>$value) {
$value."\n";
}
...
Checkboxes: $value\n
注意$value
包含循环的最后一个值,所以最后一个选中框的值。
你可能想要这样的东西而不是那个循环:
$value = implode(', ', $_POST['checkboxvar']);
这将为您提供一个逗号分隔的复选框值列表。
或者,如果您想要像示例中那样换行:
$value = implode("\n", $_POST['checkboxvar']);