电子邮件表单不在PHP中发布所有字段

时间:2014-05-16 12:42:52

标签: php email sendmail

我试图为我的网站编写一个简单的表单,它不需要超级安全等,但由于某种原因它只发布最后一个输入数据"查询&#34 ;,任何人都可以看到我可能做错了什么?

HTML

<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>';

    };

};

?>

3 个答案:

答案 0 :(得分:4)

您的foreach声明似乎有误。

PHP应该为每个&#39;执行的操作。数组元素,应该用花括号括起来。而不是

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

答案 1 :(得分:3)

尝试以下:

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

答案 2 :(得分:0)

每次都将消息设置为空字符串

$message = '';

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

你的foreach循环也不正确。你把 ”;”到底。但是你需要将代码放在“{}”