我有一个我为客户端构建的表单,它接收用户信息并将其发送给我的客户端和I.它具有输入验证,不允许用户在不填写表单的情况下发送电子邮件。
我无法弄清楚的是,每天早上连续3天都会将表单发送给我,并在7:48 am发送5封电子邮件。关于它的最奇怪的部分是表格是空白的。
另请注意:在测试时,表单每次都可以从多个不同的设备和浏览器中正常工作。
我使用PHP发送表单,javascript进行表单验证,HTML和CSS。下面是相关代码(为了减少我遗漏了大部分输入的代码,我只保留了一个字段,以便你可以看到一切是如何工作的)
HTML
<form method="post" name="form" id="email-form" action="css/form-to-email.php">
<p class="blue" id="body-text-name">Name: <input id="input-name" name="fname" type="text" required />
<input class="btn" onClick="return IsEmpty()" type="submit" name='submit' />
</form>
的javascript
function IsEmpty() {
if (document.forms['form'].name.value == "") {
alert("empty");
return false;
}
return true;
}
和PHP
<?php
if(!isset($_POST['submit']))
{
echo "error; you need to submit the form!";
}
$fname = $_POST['fname'];
$to = 'someEmail@some.com';
$cc = '';
$recipients = $to.", ".$cc;
$email_subject = "Order Form";
$email_body = "Order For: $fname\n\n";
$headers = "From: Order_Form\r\n";
$headers .= "Reply-To: \r\n";
mail($recipients,$email_subject,$email_body,$headers);
header('Location: ../index1.html');
?>
我已经搜索并搜索了一个答案但是我无法弄清楚是什么导致了这个或者看起来的原因。任何帮助将不胜感激。
答案 0 :(得分:4)
某些东西(用户,机器人)可能会直接访问您的css / form-to-email.php。
所以,当您直接访问css / form-to-email.php时
在&#34; If&#34;阻止您回显消息但不阻止脚本继续执行,因此该块之后的其他代码始终运行。
return echo "error; you need to submit the form!";
应该是:
echo "error; you need to submit the form!";
exit(); // || die() its the same.
或
throw new Exception("error; you need to submit the form!");
你也可以抛出异常。
{{1}}
答案 1 :(得分:1)
此功能
function IsEmpty() {
if (document.forms['form'].name.value == "") {
alert("empty");
return false;
}
return true;
}
错了!
document.forms['form'].name.value
返回表单标记的name字段的值,即在您的情况下,从此HTML返回'form'并始终设置为
<form method="post" name="form" id="email-form" action="css/form-to-email.php">
来自name="form"
属性。
更改脚本以获取您实际想要检查的字段的内容!!
function IsEmpty() {
if (document.getElementById('input-name').value == "") {
alert("empty");
return false;
}
return true;
}
此验证也应在接受此数据并生成电子邮件的PHP脚本中完成。
<?php
if( ! isset($_POST['submit']) )
{
echo "error; you need to submit the form!";
exit;
}
if ( ! isset($_POST['fname'] ) {
echo "error; You must have something in this field!";
exit;
}
$fname = $_POST['fname'];
$to = 'someEmail@some.com';
$cc = '';
$recipients = $to.", ".$cc;
$email_subject = "Order Form";
$email_body = "Order For: $fname\n\n";
$headers = "From: Order_Form\r\n";
$headers .= "Reply-To: \r\n";
mail($recipients,$email_subject,$email_body,$headers);
header('Location: ../index1.html');
?>
答案 2 :(得分:0)
可能正在使用原始网址发送电子邮件,因为您提及时间一致性,因此很可能是网络抓取工具。最好在服务器端进行验证,这应该会阻止它。