【问题标题】:form not passing values to PHPMailer表单未将值传递给 PHPMailer
【发布时间】:2016-07-22 00:39:56
【问题描述】:

我有一个使用基本联系表单构建的响应式网站。我正在尝试使用我过去使用过的 PHPHMailer。由于某种原因,我的表单中的值没有进入 PHPMailer。我通过在“name”、“email”、“subject”和“message”中放置硬编码值进行了测试,该表单将毫无问题地工作。在尝试发送邮件之前,我尝试使用“isset”来确保是值(我这样做是因为没有“isset”我得到一个“未定义的索引”错误,告诉我没有值。这段代码在我的基本表单没有响应,但在这个表单上没有。我很难过。欢迎提出任何建议。这是我的 html 和 PHP 代码。谢谢!*我已更新代码,因为我已将问题缩小到Java 脚本。在 HTML 中,“form id="main-contact-form" 正在触发以下 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> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">Thank you for contact us. As early as possible  we will contact you</p>').delay(3000).fadeOut();
    });
});

正是这个 js 导致了这个问题。我目前正试图找出原因。感谢那些之前试图提供帮助的人。

<form id="main-contact-form" name="contact-form" method="post" action="contact.php">
    <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
      <div class="col-sm-6">
        <div class="form-group">
          <input type="text" name="name" class="form-control" placeholder="Name" required="required">
        </div>
      </div>
      <div class="col-sm-6">
        <div class="form-group">
          <input type="email" name="email" class="form-control" placeholder="Email Address" required="required">
        </div>
      </div>
    </div>
    <div class="form-group">
      <input type="text" name="subject" class="form-control" placeholder="Subject" required="required">
    </div>
    <div class="form-group">
      <textarea name="message" id="message" class="form-control" rows="4" placeholder="Enter your message" required="required"></textarea>
    </div>                        
    <div class="form-group">
      <button type="submit" class="btn-submit">Send Now</button>
    </div>
</form>    

还有我的 PHP;

<?php


        $email = $_REQUEST['email'];
        $name = $_REQUEST['name'];
        $message = $_REQUEST['message'];
        $subject = $_REQUEST['subject'];

        require 'PHPMailerAutoload.php';

        $mail = new PHPMailer;

        $mail->isSMTP();
        $mail->Host = 'myhost.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'me@myemail.com';
        $mail->Password = 'mypassword';
        $mail->SMTPSecure = 'tls';

        $mail->From = $email;
        $mail->FromName = $name;
        $mail->addAddress('me@myemail.com');

        $mail->addReplyTo($email);

        $mail->WordWrap = 50;
        $mail->isHTML(true);

        $mail->Subject = $subject;
        $mail->Body    = $message;

        if(!$mail->send()) {

            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;

            exit;
        }        

        echo 'Message has been sent';

?>

【问题讨论】:

  • 永远不要用提交按钮的值直接检查发布的值。 if (isset($_POST['submit'])) { 出现错误是因为您的提交按钮没有namevalue 属性
  • 我尝试了所有答案,不幸的是它们也没有工作。我同意你从不检查提交按钮的观点,我认为那是出于绝望,没有其他任何工作。
  • 是的,没有错误报告,我的 php 日志中也没有。我在实时服务器上
  • 向您的服务器提供商询问您的服务器上的邮件设置是否正确配置?
  • 是的,如果我在 php 中输入硬编码的值,我可以发送邮件,我在该服务器上的其他网站使用此代码使用此响应式网站上没有的简单表单跨度>

标签: php html forms phpmailer


【解决方案1】:

对于遇到此问题的其他人。一旦我终于弄清楚了,解决方案就很简单了。正在使用的 main.js 模板不传递数据并在 ajax 代码中键入。您需要将 type:"POST" 和 data: form.serialize() 添加到 ajax。见下文。

var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
            type:"POST",//new
            url: $(this).attr('action'),
            data: form.serialize(), //new
            beforeSend: function(){
               form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">Thank you for contact us. As early as possible  we will contact 

')。

【讨论】:

    【解决方案2】:

    在你的代码中检查这个你在提交按钮中缺少这个名字

    <button type="submit" class="btn-submit" name='submit'>Send Now</button>
    

    替换这个

        $email = $_POST['email'];
        $name = $_POST['name'];
        $message = $_POST['message'];
        $subject = $_POST['subject'];
    

    有了这个

        $email = $_REQUEST['email'];
        $name = $_REQUEST['name'];
        $message = $_REQUEST['message'];
        $subject = $_REQUEST['subject'];
    

    【讨论】:

    • 没有错误,问题是我没有从我的表单中得到任何值; array(0) { } 消息无法发送。Mailer 错误:消息正文为空
    • @JeffReady 我在答案结帐中做了一些更改
    • 我很困惑,我已经有 $email = $_REQUEST['email']; $name = $_REQUEST['name']; $message = $_REQUEST['message']; $subject = $_REQUEST['subject'];如果您的意思是让我添加 $POST 而不是 $REQUEST,我也尝试过,这就是我开始的方式,我添加了 $REQUEST 因为我没有获得价值,并且认为这可能是原因。跨度>
    • 用 $_POST 替换所有变量
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2017-10-22
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多