1

我希望我在这里遗漏了一些非常基本的东西,但是:一个空表单被随机提交,有时一天 3-8 次,然后几天没有提交,等等。

空提交总是以“[网站联系表]”为主题的电子邮件。尽管我的 php 中没有验证,但在 html 代码中,主题是从下拉菜单中选择的,默认为“General Enquiry”。请注意,在下面的 php 代码中,人类无法提交带有上述主题行的空表单,也就是说,如果我在不输入任何内容的情况下按提交,它将始终是“[网站联系表单]General Enquiry”。

我有contact.html调用这个contact.php文件:

<?
   $email = 'info@mail.com';
   $mailadd = $_POST['email'];
   $headers = 'From: ' . $_POST['email'] . "\r\n";
   $name = $_POST['name'];
   $subject = '[Website Contact Form] ' . $_POST['subject'];
   $message = 'Message sent from: ' . $name . '. Email: ' . $mailadd . '. Organization: ' . $_POST['company'] . '. Phone: ' . $_POST['phone'] . '. ';
   $message .= 'Message: ';
   $message .= $_POST['message'];

   if (mail($email,$subject,$message, $headers)) {
    echo "<p>Thank You! We'll get back to you shortly.</p>";
   }
   else {
    echo "<p>Error...</p>";
   }
?>

我将此代码用于许多网站,但从未遇到过此问题。这段代码有什么明显的错误,我错过了吗?任何帮助将不胜感激!

4

2 回答 2

3

我怀疑您在发送电子邮件之前可能没有检查这些变量是否已设置。直接请求contact.php(没有任何表单数据)的人可能会产生您描述的结果。如果是这种情况,下面的代码应该像一个魅力一样工作:

<?php
    if (isset($_POST['submit']) {
        // form code
    }
    else {
        // The form was not submitted, do nothing
    }
?>

即使不是那种情况,这种简单的检查总是很好的做法。

此外,您应该始终将验证任何用户输入作为一个好习惯。您不希望您的服务器用电子邮件淹没您的收件箱。我建议使用正则表达式来验证提供的输入,并可能使用验证码服务(例如 ReCaptcha)。

于 2012-10-10T03:01:23.007 回答
1

如果您一直在使用此代码并且工作正常,那么我会检查您在这种情况下更改了哪些变量,例如您的提交表单。

用所有常见的可能性尝试你的表格,看看它是否有效。空的主题将为您的表单提供主题“[网站联系表]”。检查您的脚本是否实际获取了 post 变量,并且您的表单提交了正确的变量。您的下拉菜单可能有一个值为“”的选项和 innerHTML“一般查询”。该值将被提交。

在服务器端检查输入也很好

<?php 
      if(isset($_POST['subject'],$_POST['email'])){

      }
?>
于 2012-10-10T03:13:17.260 回答