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