PHP表单不起作用 - 没有收到电子邮件

时间:2013-10-22 21:58:29

标签: php html forms

我刚开始为一家新公司工作,之前的员工使用PHP开发了他们的网站。我不确定他的正确/错误。我知道大量的HTML& CSS,可以理解一点关于PHP,但并不多。但我正在努力学习W3学校:)

我的网站上有联系表格,但是每当我点击提交时,我都没有收到任何电子邮件地址,尽管它确实已经提交了。

提前感谢您的帮助!

以下是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <title>Anchor Technology | Services</title>
    <?php include('includes/head.php'); ?>
    <style type="text/css">#maintext .error h2 {color: red;</style>
</head>
<body>
<div id="maincontainer">
<?php include('includes/header.php'); ?>
<?php include('includes/navigation.php'); ?>
    <div class="shadow">
        <div id="maintext">
            <h2>Help!</h2>
        <!--Form options start here-->
        <!--Small Form Here-->
            <h2><strong>Existing Client Form</strong></h2>
            <?php
                error_reporting(E_ERROR | E_WARNING | E_PARSE);
                $form_block = "
                <p>Required fileds are marked with an asterick (*)        </p>
                <form action=\"$_SERVER[php_self]\"method=\"POST\">
                <P>*Company Name:</p>
                    <input size=40 name=\"name\" value=\"$_POST[name]\"><br />    <br />
                <p>*Contact Name:</p>
                    <input size=40 name=\"ctname\" value=\"$_POST[ctname]\"><br /><br />    
                <P>*Request Title:</p>
                    <input size=40 name=\"title\" value=\"$_POST[title]\"><br /><br />
                <P>Description:</p>
                  <textarea cols=\"60\"rows=\"10\"name=\"description\">$_POST[description]</textarea><br /><br />
                <P>Computer Name:</p>
                    <input size=20 name=\"cpname\" value=\"$_POST[cpname]\"><br /><br />
                <p>User Name:</p>
                    <input size=40 name=\"uname\" value=\"$_POST[uname]\"><br /><br />  
                <P>Priority Level</p>
                    <select name=\"level\">
                        <option value=\"High\">High</option>
                        <option value=\"Medium\">Medium</option>
                        <option value-\"Low\" selected=\"default\">Low</option>
                    </select><br /><br />   
                <input type=\"hidden\" name=\"op\" value=\"ds\">        
                <input type=\"submit\" name=\"submit\" value=\"Submit\">    
            </form>";
            if ($_POST[op] != "ds") {
                //need to see form
                echo "$form_block";
                //check required fields
            } else if ($_POST[op] == "ds") {
                If (($_POST[name] == "") || ($_POST[ctname] == "") || ($_POST[title] == "")) {
                    $msg_err = "<div class=\"error\"<h2>    <strong>Please fill in all required fields</strong></h2></div>";
                    $send = "no";
                }
                if ($send != "no") {
                    //it's ok to send
                    // create msg variable containing the message that will be sent to the email recipient  
                    $msg .= "Company Name: $_POST[name]\n ";

                    // continue to concatenate the variable adding new pieces of information submitted

                    $msg .= "Company Name: $_POST[name]\n ";
                    $msg .= "Contact Name: $_POST[ctname]\n ";
                    $msg .= "Request Title: $_POST[title]\n ";              
                    $msg .="Description:$_POST[description]\n";             
                    $msg .= "Computer Name: $_POST[cpname]\n ";                 
                    $msg .= "User Name: $_POST[uname]\n ";              
                    $msg .= "Priority Level: $_POST[level]\n ";             

                    //Create variables to be used in the php Mail Function
                    $recipient = "help@anchortechnology.com";
                    $subject = "Help request from $_POST[name]";
                    $mailheaders = "From: $_POST[ctname] \n";
                    $mailheaders .= "Reply-To: $_POST[ctname]";

                    //send mail form
                    //Use mail Function to Send
                    mail($recipient, $subject, $msg, $mailheaders);

                    // show confirmation message
                    // echo statements will be shown when script executes

                    echo "<p>Thank you, $_POST[name]!</p>";
                    echo "<p>Your message was sent!</p>";
                    echo "<a href=\"../index.php\">Return Home</a>";
                } else if ($send == "no") {
                    //print error messages
                    echo "$msg_err";
                    echo "$form_block";
                }
            }
            ?>
            <br /><br />
        </div>
    </div>      
    <div class="shadow">        
        <div id="footer">
            <?php include('includes/footer.php'); ?>
        </div>
    </div>
</div>                  
</body>
</html>

2 个答案:

答案 0 :(得分:2)

首先,缩小问题范围。你能从PHP发送任何邮件吗?尝试使用简单的mail()测试脚本发送简单的消息。

如果可行,则在调用mail之前通过回显或var_dump()变量来检查代码的mail($recipient, $subject, $msg, $mailheaders);部分。

一个问题是PHP mail()基于成功返回布尔值true或false,但是发布的脚本完全忽略了这一点,并假设它没有问题。这不会导致电子邮件不发送,但它会导致脚本报告它发送正常,即使mail()函数告诉你它不起作用。遗憾的是,这在文档本身中从未得到解决,所有示例都显示邮件而不试图检查成功。

部分原因是因为mail()没有提供任何类型的有用错误消息,所以它通常只是工作或不工作 - 如果函数返回true,它并不意味着它真的有效。对于“关键任务”电子邮件,请不要单独使用mail()来确保您收到重要邮件或捕获重要数据。

但是,这是找出问题的开始。首先确保正确的PHP mail()功能,然后从那里开始。

答案 1 :(得分:0)

好的,我从朋友那里找到了主要问题。

我们正在使用IX Webhosting并拥有一个Linux和一个Microsoft服务器,每个服务器都托管一些网站。 PHP网站被托管在微软的盒子上,据我所知,它不是设置为运行PHP,而是Linux。

将其切换,不再有问题。

感谢大家的帮助!