电子邮件表单不张贴所有字段在PHP


Email form not posting all fields in PHP

我正试图为我的网站写一个简单的表单,它不需要超级安全等,但出于某种原因,它只发布最后的输入数据"查询",有人能看到我可能做错了什么吗?

<form method="post" action="form-process.php" name="form" class="form">
    <label>Company Name</label>
    <input type="text" name="Company">
    <label>Your Name (required)</label>
    <input type="text" name="Name">
    <label>Your Email (required)</label>
    <input type="text" name="Email">
    <label>Your Message</label>
    <textarea name="Enquiry"></textarea>
    <input type="submit" value="Submit" class="button radius" />
</form>
PHP

<?php
if ( empty($_POST['Company'])) {
    echo '<span style="color:#ff0000; font-weight:700; font-size:12px;">Please ensure all fields marked with an asterisk(*) have been completed.</span>';
} else {
    foreach ($_POST as $key => $value);
    $message = '';
    $message .= htmlentities($key)." - ".htmlentities($value)."'r'n";
    $headers = 'From: me@websites.co.uk' . "'r'n" . 'Reply-To: me@website.co.uk';
    if(mail('liam@myemail.co.uk', 'Enquiry', $message, $headers)){ 
        echo '<span style="color:green; font-weight:700; font-size:12px;">Thank you, we will be in touch within 24 hours.</span>';
    } else {
        echo '<span style="color:#ff0000; font-weight:700; font-size:12px;">Sorry, your message wasn''t sent, please try again.</span>';
    };
};
?>

您的foreach声明似乎是错误的。

PHP应该对每个数组元素执行的操作应该用花括号括起来。所以不用

foreach ($_POST as $key => $value);
$message = '';
$message .= htmlentities($key)." - ".htmlentities($value)."'r'n";

应该使用:

$message = '';
foreach ($_POST as $key => $value) {
    $message .= htmlentities($key)." - ".htmlentities($value)."'r'n";
}

是的,有时没有花括号也可以工作。然而,我强烈建议保持一致,总是使用花括号,以防止这些错误进入你的代码。它也使你的代码更容易阅读(在我个人看来)。

正如您所看到的,我还将$message = ''移到了foreach语句之外,因为您只想在开始填充数据之前将$message设置为空字符串 -否则您每次在添加一些新数据之前都要重置$message

尝试如下:

$message = '';
foreach ($_POST as $key => $value)
    $message .= htmlentities($key)." - ".htmlentities($value)."'r'n";

每次设置消息为空字符串

$message = '';

你应该只在循环前做一次。

你的foreach循环也是不正确的。你把";"放在最后。但是你需要把代码放在"{}"