【问题标题】:PHP contact form sends empty emailsPHP 联系表单发送空电子邮件
【发布时间】:2017-08-27 18:13:08
【问题描述】:

我不明白为什么我的 PHP 联系表单会发送空电子邮件。 请帮我找出问题所在。

HTML 表单代码:

<form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
    <div class="form-group">
        <input type="text" name="name" class="form-control" required="required" placeholder="Имя">
    </div>
    <div class="form-group">
        <input type="phone" name="phone" class="form-control" required="required" placeholder="Номер телефона">
    </div>
    <div class="form-group">
        <input type="email" name="email" class="form-control" required="required" placeholder="Email">
    </div>
    <div class="form-group">
        <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Ваши пожелания"></textarea>
    </div>                        
    <div class="form-group">
    <input type="submit" name="submit" class="btn btn-submit" value="Отправить">
    </div>
</form>

PHP 文件:

<?php
$name       = @trim(stripslashes($_POST['name'])); 
$from       = @trim(stripslashes($_POST['email']));
$phone      = @trim(stripslashes($_POST['phone']));
$subject    = @trim(stripslashes($_POST['subject'])); 
$message    = @trim(stripslashes($_POST['message'])); 
$to         = 'hello@helloschool.ru';

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] .= "Content-type: text/plain; charset=iso-8859-1";
$headers[] .= "From: {$name} <{$from}>";
$headers[] .= "Reply-To: <{$from}>";
$headers[] .= "Subject: {$subject}";
$headers[] .= "X-Mailer: PHP/".phpversion();

mail($to, $subject, $message, $headers);

die;

删除“@”后,我的错误日志显示:

[2017 年 8 月 27 日星期日 21:41:14] [警告] [客户端 89.169.84.160] mod_fcgid: 标准错误:PHP 注意:未定义的索引:名称在 /var/www/u0337516/data/www/helloschool.ru/sendemail.php 在第 2 行, 推荐人:http://helloschool.ru/

JS 代码(main.js):

var form = $('#main-contact-form');
    form.submit(function(event){
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            url: $(this).attr('action'),
            beforeSend: function(){
                form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Отправка заявки...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success">Спасибо, что оставили заявку! Мы свяжемся с вами как можно скорее.</p>').delay(3000).fadeOut();
        });
    });

在此先感谢,对于新手问题,我们深表歉意。

【问题讨论】:

  • 检查是否提交表单。
  • 使用 PHP 的邮件功能永远不会取得巨大成功。省去很多麻烦和浪费时间,开始使用 SMTP。使用 Swiftmailer 之类的预构建解决方案让事情变得简单。
  • 为什么@s,你收到未定义的通知?
  • 使用 @ 是一种不好的做法。它还将抑制需要修复的重要错误。
  • 除了上述cmets中的中肯建议,开始阅读您的PHP错误日志,它可以帮助您减少开发时的头疼

标签: php html email


【解决方案1】:

1) php 代码有错误。参数headers必须是字符串。

$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] .= "Content-type: text/plain; charset=iso-8859-1";
$headers[] .= "From: {$name} <{$from}>";
$headers[] .= "Reply-To: <{$from}>";
$headers[] .= "Subject: {$subject}";
$headers[] .= "X-Mailer: PHP/".phpversion();

必须

$headers  = '';
$headers .= "MIME-Version: 1.0"."\r\n";
$headers .= "Content-type: text/plain; charset=iso-8859-1"."\r\n";
$headers .= "From: {$name} <{$from}>"."\r\n";
$headers .= "Reply-To: <{$from}>"."\r\n";
$headers .= "Subject: {$subject}"."\r\n";
$headers .= "X-Mailer: PHP/".phpversion();

2) 您的message 是俄语,但代码页 iso-8859-1 仅支持拉丁字母并且您需要西里尔字母。尝试使用 HTML 的代码页(我认为它是 Windows-1251 或 UTF-8)。

3) 您的javascript 中有错误。

$.ajax({
         url: form.attr('action')});

必须

$.ajax({
         url: form.attr('action'),
         data: form.serialize(),
         method: "POST"});

【讨论】:

  • 谢谢,你是对的,但是在我进行这些更改后它仍然无法正常工作。会不会是别的东西?谢谢
  • @StanislavDobryakov 我认为这是codepage 问题。如我所见,message 使用俄语,但codepage iso-8859-1 仅支持英语。尝试选择另一个代码页(Windows-1251、UTF-8)。尝试电子邮件英文信息,而不是俄文。
  • 谢谢,我试过了,没用。顺便说一句,我的错误日志: [Sun Aug 27 21:41:14 2017] [warn] [client 89.169.84.160] mod_fcgid: stderr: PHP Notice: Undefined index: name in /var/www/u0337516/data/www /helloschool.ru/sendemail.php 在第 2 行,推荐人:helloschool.ru
  • @StanislavDobryakov 看起来像数组 $_POST 是空的。因此,您发送空消息。我认为这是服务器问题。
  • @StanislavDobryakov 尝试在 php 文件的开头添加 print_r($_POST);print_r($_SERVER);。看看结果。
猜你喜欢
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2012-02-25
相关资源
最近更新 更多