Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每次访问网站时,表单都会触发_Php_Jquery_Forms - Fatal编程技术网

Php 每次访问网站时,表单都会触发

Php 每次访问网站时,表单都会触发,php,jquery,forms,Php,Jquery,Forms,我的网站有一个表单,每次访问该网站时都会触发。它仍处于测试阶段,所以我每天只需刷新页面就可以收到100多封空白电子邮件,是的,所有输入都是必需的。棘手的部分是我包含了一个jquery脚本。当你点击提交按钮时,脚本就会启动:然后它会刷新页面,并使用标签向下滚动到我的表单下方,并显示一条消息,基本上是说谢谢你给我发电子邮件 我的代码贴在下面,但我需要知道的是,为什么我总是收到这些空白电子邮件,即使输入字段是必需的!我对php和jquery仍然非常陌生 <?php $to = 'design@

我的网站有一个表单,每次访问该网站时都会触发。它仍处于测试阶段,所以我每天只需刷新页面就可以收到100多封空白电子邮件,是的,所有输入都是必需的。棘手的部分是我包含了一个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> 

它们在浏览器端是必需的,但您没有服务器端验证。不尊重HTML5所需属性、机器人等的旧浏览器将整天乐于提交

最简单的方法是检查每个字段中是否有数据:

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

您从不费心屏蔽代码以检查是否确实执行了表单提交,因此每次加载页面时都会触发代码。你至少会想要这样的东西:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   ... handle form ...
}

不,我总是把我的帖子处理放在同一页的顶部,因为a如果你想在提交后显示错误,会方便得多,b你所有的代码都在同一个文件中,c你不必担心任何人直接浏览处理URL。@Blazemonger如果你使用的是文件,也许,但是在像Laravel这样的适当框架中,你会有一个控制器,它的函数处理GET和指向每个GET的POST和routes。它们会挨在一起,但有适当的逻辑分隔。显然-但我和OP都不会使用这样的框架。@Blazemonger OP可能会从中受益-/现在你只是精英主义者。千万不要用大锤打苍蝇。然而,您有一点是关于使用类似Swift-Mailer的东西来提供额外的安全性。