相同的PHP表单适用于一个网站,但不适用于另一个网站

时间:2017-02-03 23:20:32

标签: php jquery html

我有一个简单的查询表单,其中只包含三个字段:名称,电子邮件和邮件。它在一个网站上工作。我在另一个网站上使用了完全相同代码的相同表单,但它只是不起作用。消息无法发送,我不断收到内部服务器错误(500)。我在不同的主机上使用了两个不同的域,但代码是相同的。我能看到的唯一区别是php版本。第一个网站使用5.5版本,另一个网站使用5.6版本(原生<<<<<< I&#D'd喜欢知道这意味着什么)。我尝试将后者切换到5.5并且它给了我一个错误:"未定义变量$ email_content on line ..."。

我的问题是,为什么它在一个站点而不是另一个站点上工作,即使使用相同的php版本和相同的代码?我错过了什么?

PHP代码:

<?php


if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $name = strip_tags(trim($_POST["name"]));
    $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);      
    $message = trim($_POST["message"]);

    if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {

        http_response_code(400);
        echo "Došlo je do greške. Molimo vas da pokušate ponovo.";
        exit;
    }

    $recipient = "example@example.com";

    $subject = "Nova poruka od $name";

    $email_content .= "Ime: $name\n";
    $email_content .= "Email: $email\n\n";       
    $email_content .= "Poruka:\n$message\n";

    $email_headers = "From: $name <$email>";

    if (mail($recipient, $subject, $email_content, $email_headers)) {

        http_response_code(200);
        echo "Hvala! Vaša poruka je poslata.";
    } else {

        http_response_code(500);
        echo "Poruka nije poslata. Pokušajte ponovo.";
    }

} else {

    http_response_code(403);
    echo "Došlo je do problema prilikom slanja vaše poruke. Pokušajte ponovo.";
}
?>

JS代码:

$(function() {

    var form = $('#contactForm');   
    var formMessages = $('#form-messages');

    $(form).submit(function(event) {

        event.preventDefault();

        var formData = $(form).serialize();        

        $.ajax({
        type: 'POST',
        url: $(form).attr('action'),
        data: formData
})

    .done(function(response) {   

        $(formMessages).removeClass('error');
        $(formMessages).addClass('success');  
        $(formMessages).text(response);

        $('#name').val('');
        $('#email').val('');
        $('#message').val('');

    })
    .fail(function(data) {

        $(formMessages).removeClass('success');
        $(formMessages).addClass('error');

        if (data.responseText !== '') {
            $(formMessages).text(data.responseText);

       } else {

            $(formMessages).text('Vaša poruka nije poslata. Pokušajte ponovo.');
           }
        });
    });
});

HTML:

<form method="post" id="contactForm" action="mailer.php">
    <div class="form-group">            
        <label for="name">Ime i prezime</label>
        <input type="text" class="form-control" name="name" id="name">            
    </div>
    <div class="form-group">
        <label for="email">Email adresa</label>
        <input type="email" class="form-control" id="email" name="email" required>            
    </div>                     
    <div class="form-group">
        <label for="message">Unesite vašu poruku</label>
        <textarea class="form-control" id="message" rows="4" name="message"></textarea>
    </div>       
    <button type="submit" class="btn btn-primary">Pošalji</button>
</form>

根据SSingh的要求更新:

<br /> <b>Notice</b>: Undefined variable: email_content in <b>/home/elektro4/public_html/mailer.php</b> on line <b>27</b><br /> Poruka nije poslata. Pokušajte ponovo.

5 个答案:

答案 0 :(得分:0)

只是一个猜测:你的php.ini是一样的吗?特别是var sub = document.querySelectorAll("[name^='subqty']"); 值(生产中必须为0)。处理display_errors任何印刷字符时可能会造成一些麻烦。任何有帮助的error_log(php和apache)?

关于通知错误,请考虑:

http_response_code

而不是:(你结束$email_content = "Ime: $name\n"; 但尚未宣布)

email_content

答案 1 :(得分:0)

变量$ email_content需要在使用它之前进行初始化。而你正试图立即增加一些价值。

尝试在$email_content = '';

之前添加$email_content .= '...';

PHP 5.5和PHP 5.6仅发送通知,因此可能还有其他内容。但是你得到的错误看起来像初始化应该有所帮助。

答案 2 :(得分:0)

您是否尝试将所有帖子变量包装在isset

$name = "";
if (isset($_POST["name"]) {
  $name = $_POST["name"];
}

我似乎记得很久以前遇到这种情况。为每个岗位做这件事都很烦人 - 但是自从碰到它以后,我总是以上述方式做到这一点。

答案 3 :(得分:0)

事实证明,托管公司已采取安全措施,以防止使用服务器上不存在/创建的电子邮件地址。
我只需将$email_headers = "From: $name <$email>";更改为我在cPanel中创建的电子邮件地址。

答案 4 :(得分:-1)

500错误可能是上面代码中的任何内容:

  • .=运算符on not initialised variable
  • $_POST全球
  • 上的未知索引
  • mail()功能失败

要查找错误消息,您应该检查Web服务器错误日志:

  • /无功/网络/日志/阿帕奇/ * *错误
  • /无功/网络/日志/ nginx的/ * *错误