PHP表单不起作用

时间:2014-01-19 15:20:25

标签: php forms

我试图制作一个非常简单的表格,但它不适合我。重点是人们只写他们的名字和姓氏,按“发送”并完成。我写了下面的代码:

<form method="post" action="index_rost.php">

        <p>
          <label>name</label><br>
          <input name="name" placeholder="name here"><br><br>

          <label>surname</label><br>
          <input name="name2" placeholder="surname here"><br><br>

        </p>
        <p>
          <input id="submit" name="submit" type="submit" value="send it!"><br>
        </p>

            <?php
                $name = $_POST['name'];
                $name2 = $_POST['name2'];
                $from = 'website.se'; 
                $to = 'mymail@gmail.com, myothermail@gmail.com'; 
                $subject = 'new person is coming';


                $headers = "MIME-Version: 1.0" . PHP_EOL;
                $headers .= "From: $from". PHP_EOL;
                $headers .= "Content-type: text/html;charset=UTF-8 ". PHP_EOL;

                $body = "<strong>From:</strong><br><br> $name $name2<br><br> <strong>Count on me, I want to come!</strong>";


                if ($_POST['submit'] && $name != '' && $name2 != '') {
                        if (mail ($to, $subject, $body, $headers)) { 
                        echo '<p>Your name has been sent</p>';
                    } else { 
                        echo '<p>You need to fill up all fields</p>'; 
                    } 
                }

            ?>

      </form>

除了没有向我发送电子邮件之外,我会收到错误消息(此处指定的消息:else { echo '<p>You need to fill up all fields</p>'; } )而不是我在代码中指定的成功消息。可以有人给我什么是错的?

非常感谢!

3 个答案:

答案 0 :(得分:3)

来自http://php.net/manual/en/function.mail.php

  

如果邮件成功接受传递,则mail()返回TRUE,否则返回FALSE。

     

重要要注意,仅仅因为邮件已被接受传递,这并不意味着邮件实际上会到达目的地。

您正在从mail()收到错误的回复,这意味着,无论PHP设置使用哪种消息都被拒绝

您可以暂时使用以下启用所有错误并将这些错误打印到屏幕上,以便了解失败的原因。

error_reporting(E_ALL);
ini_set('display_errors', true);

PHP将抛出一个通知,例如以下可用于调试的通知:

NOTICE (5): Unexpected Error: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "ip " port portip, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() (# 2).

请记住,仅因为邮件被接受传递意味着邮件将会到达。

答案 1 :(得分:1)

目前,只需加载表单(并在提交任何内容之前),就会运行整个代码块。

您应该将整个邮件部分包装在一个只在发出POST请求时才会被执行的块中:

if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
   $name = $_POST['name'];
   // ...

}

这样你就不会收到有关未设置索引的任何警告等。

关于邮件问题,mail()函数返回false,因此您的邮件不会被接受传递。这可能是服务器设置上的任何数量,但也可能是一些简单的事情,比如你没有指定有效的电子邮件地址。

你应该尝试改变:

$from = 'website.se'; 

为:

$from = 'a_valid_address@website.se';

答案 2 :(得分:0)

嗯,发生的事情很简单。我只是正确地形成了它......看看你在做什么:

if ($_POST['submit'] && $name != '' && $name2 != '') {
    if (mail ($to, $subject, $body, $headers)) { 
        echo '<p>Your name has been sent</p>';
    } else { 
        echo '<p>You need to fill up all fields</p>'; 
    } 
}

所有字段都设置正确,但mail()返回false。

正确的代码是:

if ($_POST['submit'] && $name != '' && $name2 != '') {
    if (mail ($to, $subject, $body, $headers)) { 
        echo '<p>Your name has been sent</p>';
    } else { 
        echo '<p>Mail could not be sent</p>'; 
    } 
} else { 
    echo '<p>You need to fill up all fields</p>'; 
}