我的网站有一个表格,每次访问网站时都会触发。它还处于测试阶段,因此我每天只需刷新页面就可以获得100多封BLANK电子邮件(是的,所有输入都是必需的)。棘手的部分是我有一个jquery脚本。当您点击提交按钮时脚本会触发:然后刷新页面并向下滚动(使用主题标签)到我的表单下方,并显示一条消息,基本上是"感谢您发送电子邮件给我!"
我的代码发布在下面,但我需要知道的是,即使需要输入字段,我仍然会收到这些空白电子邮件!我对php和jquery仍然很新。
<?php
$to = 'design@carolbarone.com' ;
$subject = $_POST['subject'] ;
$name = $_POST['name'] ;
$email = $_POST['email'] ;
$text = $_POST['message'] ;
$message = "From: $name \nEmail: $email \nMessage: $text \n";
$sent = mail($to, $subject, $message) ;
if($sent) {
echo "";
}else{
echo "";
}
?>
<form data-abide name="input" action="index.php#hashtag" method="Post" id="theForm">
<div class="row">
<div class="small-10">
<div class="row">
<div class="small-12 columns name-field">
<input type="text" name="name" required id="right-label" placeholder="Name">
<small class="error">Name is required.</small> </div>
</div>
<div class="row">
<div class="small-12 columns email-field">
<input type="email" name="email" required id="right-label" placeholder="E-mail Address">
<small class="error">An email address is required.</small> </div>
</div>
<div class="row">
<div class="small-12 columns">
<input type="text" name="subject" required id="right-label" placeholder="Subject">
<small class="error">A subject is required.</small>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<textarea name="message" placeholder="Your Message Here" rows="4" required></textarea>
<small class="error">A message is required.</small> </div>
</div>
</div>
</div>
<br/>
<button type="submit" name="submit" value="submit">Submit</button>
<button type="reset">Reset</button>
</form>
<br/>
<div class="success_message">
<h3>Thank you for your message!</h3>
<p>Your email has been sent successfully and I appreciate you getting in touch with me. I will be sending a reply soon.</p>
</div>
<script>
$(document).ready(function() {
if(window.location.hash == '#hashtag') {
$('.success_message').show();
$("html, body").animate({ scrollTop: $('#theForm').offset().top }, 1000);
}
});</script>
答案 0 :(得分:2)
您从未打扰过代码,以检查表单提交是否实际执行,因此每次加载页面时代码都会触发。你想要的东西至少像:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
... handle form ...
}
答案 1 :(得分:1)
在浏览器端需要它们,但您没有服务器端验证。不尊重HTML5的required
属性,机器人等的旧浏览器将很乐意全天提交。
最简单的方法是,检查每个字段中是否有数据:
$to = 'design@carolbarone.com' ;
$subject = $_POST['subject'] ;
$name = $_POST['name'] ;
$email = $_POST['email'] ;
$text = $_POST['message'] ;
$message = "From: $name \nEmail: $email \nMessage: $text \n";
if($subject && $name && $email && $text) {
$sent = mail($to, $subject, $message) ;
...
您需要进行更多验证(例如确保$email
是有效格式),但这至少会阻止空白。值得注意的是:您的表单容易受到标题注入。使用像SwiftMailer这样的合适的库可以使编码电子邮件更容易,并且可以保护您免受恶意垃圾邮件的侵害。
正如Marc B所说,通过将邮件代码包含在与表单相同的页面上,只要有人访问该页面,您就会触发它。通常,您的POST处理应该位于不同的文件/路径中。