PHP单页联系表单不起作用

时间:2013-12-30 11:22:19

标签: php html forms submit contact

我一直在网页上的联系表单中进一步工作,无法正常运行。 (通过包含并在apache2.2本地服务器上运行)。

<?php
if($_SERVER['Request_Method'] != 'POST') {
    $self = $_SERVER['PHP_SELF'];
?>
<form method="POST" action="<?php echo $self; ?>">
    <table>
        <tr>
            <td style="width:100px;">
                Name:
            </td>
            <td>
                <input style="width:150px; height:25px;" placeholder="First Name" type="text" id="custname" name="custname">
            </td>
        </tr>
        <tr>
            <td>
            </td>
            <td>    
                <input style="width:150px; height:25px;" placeholder="Last Name" type="text" id="cust2name" name="cust2name">
            </td>
        </tr>
        <tr>
            <td>
                Email:
            </td>
            <td>                
                <input style="width:250px; height:25px;" placeholder="Example@domain.com" type="text" id="custemail" name="custemail">
            </td>
        </tr>
        <tr>
            <td>
                Subject:
            </td>
            <td>
                <input style="width:250px; height:25px;" placeholder="RE:Appointment & Contact" type="text" id="textsubject" name="textsubject">
            </td>
        </tr>
        <tr>
            <td>                
                Message:
            </td>
            <td>
                <textarea id="custtext" name="custtext" placeholder="Please enter your message here..." rows="6" style="resize:none; font-family:arial; width:500px; height:75px;"cols="25"></textarea>
            </td>
        </tr>
        <tr>
            <td>

            </td>
            <td>
                <input type="submit" value="Send"><input type="reset" value="Clear">
            </td>
        </tr>
    </table>
</form>
<?php
} else { 
    $name = $_POST['custname'];
    $email = $_POST['custemail'];
    $text = $_POST['custtext'];
    $subject = $_POST['textsubject'];
    $emailto = "reconnectsteam@hotmail.co.uk";

    $header = "From: $name <$email>\r\nReply-To: $email\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-type:text/html;charset=iso-8859-1\r\n";

    $message = "From: $name, Email: $email<br /><hr />$text";

    $mail($emailto, $subject, $message, $header);

    echo"Your email has been sent, it will be proccessed within 48hours.";
}

?>

只是想知道这个代码在通过apache 2.2启动时是否会起作用(电子邮件不会发送,但是其他代码是否仍能正常工作并运行?此时它似乎不是。是否有任何错误?(没有数据库)。

谢谢,

记录

3 个答案:

答案 0 :(得分:2)

您的代码有两个问题。

这一行:

if($_SERVER['Request_Method'] != 'POST') {

Request_Method 必须为大写REQUEST_METHOD,因为它是superglobal

$

前面的美元mail()
$mail($emailto, $subject, $message, $header);

应该是:

mail($emailto, $subject, $message, $header);

重新格式化并运行PHP / HTML表单

<?php
if($_SERVER['REQUEST_METHOD'] != 'POST') {
    $self = $_SERVER['PHP_SELF'];
?>
<form method="POST" action="<?php echo $self; ?>">
    <table>
        <tr>
            <td style="width:100px;">
                Name:
            </td>
            <td>
                <input style="width:150px; height:25px;" placeholder="First Name" type="text" id="custname" name="custname">
            </td>
        </tr>
        <tr>
            <td>
            </td>
            <td>    
                <input style="width:150px; height:25px;" placeholder="Last Name" type="text" id="cust2name" name="cust2name">
            </td>
        </tr>
        <tr>
            <td>
                Email:
            </td>
            <td>                
                <input style="width:250px; height:25px;" placeholder="Example@domain.com" type="text" id="custemail" name="custemail">
            </td>
        </tr>
        <tr>
            <td>
                Subject:
            </td>
            <td>
                <input style="width:250px; height:25px;" placeholder="RE:Appointment & Contact" type="text" id="textsubject" name="textsubject">
            </td>
        </tr>
        <tr>
            <td>                
                Message:
            </td>
            <td>
                <textarea id="custtext" name="custtext" placeholder="Please enter your message here..." rows="6" style="resize:none; font-family:arial; width:500px; height:75px;"cols="25"></textarea>
            </td>
        </tr>
        <tr>
            <td>

            </td>
            <td>
                <input type="submit" value="Send"><input type="reset" value="Clear">
            </td>
        </tr>
    </table>
</form>
<?php
} else { 
    $name = $_POST['custname'];
    $email = $_POST['custemail'];
    $text = $_POST['custtext'];
    $subject = $_POST['textsubject'];
    $emailto = "email@domain.com";

    $header = "From: $name <$email>\r\nReply-To: $email\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-type:text/html;charset=iso-8859-1\r\n";

    $message = "From: $name, Email: $email<br /><hr />$text";

    mail($emailto, $subject, $message, $header);

    echo "Your email has been sent, it will be proccessed within 48hours.";
}

?>

答案 1 :(得分:0)

不完全回答你的问题,但是一些全球性的关注/安全点:)。

尝试将操作留空(默认情况下,表单重定向到同一页面)。然后检查是否填写了所有需要的输入,然后检查$_SERVER['REQUEST_METHOD'] != 'POST'。在这种情况下,您可以使用输入的值填写表单。

例如,有人只输入姓名。然后邮件不发送,用户给出的值消失(某人必须再次输入名称)。 我建议这样的事情(只有一个字段的简单例子 - 名称)

$name = isset($_POST['custname']) ? $_POST['custname'] : '';
$name = htmlspecialchars($name); // !!!!!!!!!!!!!
if ($name != '' && your_valid_function($name)) { // && custmail test && other test
    SEND MAIL;
    header("Location: this_page"); // prevent refreshing this page and sending multiple mails
}
else {
    //Render form here, using $name with filled values, for example:
    echo "<form><input type=\"text\" id=\"custname\" name=\"custname\" value=\"$name\"></form>"; // notice $name here
}

PS。 使用POST值时始终至少使用htmlspecialchars :)。小心机器人 - 没有验证码的表单或其他一些安全功能可能会严重垃圾邮件箱。 希望它有所帮助。

答案 2 :(得分:0)

首先尝试替换

$mail($emailto,...

mail($emailto,...

(删除“$”)