php mail()函数导致找不到404文件页面

时间:2015-04-04 20:56:49

标签: php email

我有一个带有html表单的简单php页面。它的设置是为了让您填写表格并自动发送电子邮件到我的电子邮箱。而不是发生这种情况,我没有收到任何电子邮件,页面重定向到“找不到文件(404错误)”。

这是PHP

<?php

if (isset($_POST['submit'])){

    //Name
    $Name = $_POST['Name'];
    $Name = mysqli_real_escape_string($Name);

    //Email
    $Email = $_POST['Email'];
    $Email = mysqli_real_escape_string($Email);

    //Subject
    $Subject = $_POST['Subject'];
    $Subject = mysqli_real_escape_string($Subject);

    //Message
    $Message = $_POST['Message'];
    $Message = mysqli_real_escape_string($Message);

    $email_subject = $Subject . ' from: ' . $Email;
    $email_from = $Email;
    $email_body = $Message;

    $webEmail = "temcgee@email.neit.edu";
    $headers = "From: $email_from \r\n";
    $headers .= "Reply-To: $Email \r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();
    $headers .= 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";



    mail($webEmail,$email_subject,$email_body,$headers);
}
?>

这是html表单

<form action="action_page.php" name="myform">
            <input onfocus="this.value='';" type="text" name="Name" value="Name" id="name">
            <input onfocus="this.value='';" type="text" name="Email" value="Email" id="email">
            <input onfocus="this.value='';" type="text" name="Subject" value="Subject" id="subject">
            <textarea onfocus="this.value='';" cols="50" rows="4" placeholder="Message" name="Message" id="message"></textarea>
            <input type="submit" value="submit" id="submit">

        </form>

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

这里有一些问题。

让我们从顶部开始并使用条件语句(然后向下工作)。

if (isset($_POST['submit'])){...}

您的提交按钮<input type="submit" value="submit" id="submit">没有名称属性。

  • 您可能依赖于&#34; id&#34;独自一人,它不会工作,它需要&#34; name&#34;属性。

修改它,使其显示为:

<input type="submit" name="submit" value="submit" id="submit">
  • 由于没有命名,条件语句中的任何内容都不会执行。

然后你使用mysqli_real_escape_string()理论上要求将连接传递给该函数。

I.e。:

$Name = mysqli_real_escape_string($connection,$Name);

并为其他人做同样的事情;假设您正在与数据库进行交互。

但是,目前还不清楚您是否确实在与数据库进行交互,因此如果您未与其进行交互,请从POST阵列中删除所有mysqli_real_escape_string

即:

$Name = $_POST['Name'];

并为其他人做同样的事。

您还错过了POST作为表单中的方法:

<form action="action_page.php" name="myform">

省略时默认为GET。因此,请将其更改为:

<form action="action_page.php" name="myform" method="post">

然后检查邮件是否已发送,请更改

mail($webEmail,$email_subject,$email_body,$headers);

if(mail($webEmail,$email_subject,$email_body,$headers)){
echo "Sent";
}

如果您看到&#34;已发送&#34;,那么邮件将完成其工作。如果没有收到邮件,请检查您的垃圾邮件。或者,您的服务器可能会被列入黑名单。

确保您有权使用mail()

您还应确保使用条件empty()填充所有输入。

即:

if(!empty($_POST['Name'])){
// $Name = mysqli_real_escape_string($Name);
   $Name = $_POST['Name'];
   }

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。


<强>脚注:

我不知道onfocus="this.value='';"使用了哪些内容,所以,如果您在某处发生了某些JS / Ajax,那么您需要检查这些内容。

  • 如果他们没有用于任何事情,你可以删除它们。

您也应该尝试删除value="Name"以及其他人,以防万一。

<强> 旁注:

如果您仍然遇到404错误,请尝试将您的PHP放在首位,将HTML表单放在该表单下方,并在同一个文件中使用.php扩展名,然后执行以下操作:

<form action="" name="myform" method="post">

使用action=""作为在同一页面上执行的操作。


附加脚注:

我在评论中注意到你提出了另一个答案:

  

&#34;我添加了标题(&#39;位置:lizbethmcgee.com/pages/Contact.php' ;;);&#34;

首先,确保您没有在标题之前输出。

另外,您还应该添加完整的http://来电和exit;

header("Location: http://www.lizbethmcgee.com/pages/Contact.php");
exit;

以避免进一步执行可能存在的代码,如果包含任何代码。


正如AdamT在评论中所说:

使用php mail命令发送邮件,无法保证邮件会到达您发送给它的收件箱。如前所述,有很多垃圾邮件发送者,不幸的是,垃圾邮件过滤程度很高。如果您真的希望有更好的机会获得邮件,您应该联系GoDaddy并询问他们如何为您的帐户设置SMTP电子邮件。

答案 1 :(得分:0)

如上所述,您的提交按钮必须包含属性name="submit",否则您的if (isset($_POST['submit'])){...将无效。但是,我最近遇到了这个问题,并且不知何故偶然发现<input name="name">应该受到指责。在您的情况下<input name="Name">。将name属性更新为&#39; username&#39;后,表单功能完美。虽然我还没能找到这个怪癖的确切推理,但它确实提高了我对命名我的属性,选择器,变量等的认识......