我试图为我的网站编写一个简单的表单,它不需要超级安全等,但由于某种原因它只发布最后一个输入数据"查询&#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>';
};
};
?>
答案 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循环也不正确。你把 ”;”到底。但是你需要将代码放在“{}”
中