每次访问网站时都会触发表格

时间:2014-06-11 21:09:09

标签: php jquery forms

我的网站有一个表格,每次访问网站时都会触发。它还处于测试阶段,因此我每天只需刷新页面就可以获得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>
        &nbsp;
        <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> 

2 个答案:

答案 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处理应该位于不同的文件/路径中。