我无法理解在这个PHP脚本中我哪里出错了

我无法理解在这个PHP脚本中我哪里出错了,php,html,forms,Php,Html,Forms,我有一个普通的HTML表单,可以发送到sendmail.php脚本 <?php header('Content-type: application/json'); $status = array( 'type'=>'success', 'message'=>'Thank you for contact us. We will contact you as soon as possible.' ); $name =

我有一个普通的HTML表单,可以发送到sendmail.php脚本

<?php
    header('Content-type: application/json');
    $status = array(
        'type'=>'success',
        'message'=>'Thank you for contact us. We will contact you as soon as possible.'
    );

    $name = @trim(stripslashes($_POST['name'])); 
    $email = @trim(stripslashes($_POST['email'])); 
    $number = @trim(stripslashes($_POST['number']));
    $company = @trim(stripslashes($_POST['company']));    
    $subject = @trim(stripslashes($_POST['subject'])); 
    $message = @trim(stripslashes($_POST['message'])); 

    $email_from = $email;
    $email_to = '';

    $body = 'Name: ' . $name . "\n\n" .'Number: ' . $number . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

    $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

    echo json_encode($status);

    echo $email;
    die;

    ?>

它正在发送到指定的电子邮件地址,但未显示电子邮件中的变量。谁能告诉我哪里出了问题

        <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
            <div class="col-sm-5 col-sm-offset-1">
                <div class="form-group">
                    <label>Name *</label>
                    <input type="text" name="name" id="name" class="form-control" required="required">
                </div>
                <div class="form-group">
                    <label>Email *</label>
                    <input type="email" name="email" id="email" class="form-control" required="required">
                </div>
                <div class="form-group">
                    <label>Phone</label>
                    <input type="number" name="number" id="number" class="form-control">
                </div>
                <div class="form-group">
                    <label>Company Name</label>
                    <input type="text" name="company" id="company" class="form-control">
                </div>                        
            </div>
            <div class="col-sm-5">
                <div class="form-group">
                    <label>Subject *</label>
                    <input type="text" name="subject" id="subject" class="form-control" required="required">
                </div>
                <div class="form-group">
                    <label>Message *</label>
                    <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
                </div>                        
                <div class="form-group">
                    <button type="submit" name="submit" class="floatright btn btn-primary btn-lg" required="required">Submit Message</button>
                    <br><br><Br><br>    
                </div>
            </div>
        </form>

名字*
电子邮件*
电话
公司名称
主题*
信息*
提交消息




使用上面的表单代码编辑


var form=$(“#主联系人表单”);
表单提交(功能(事件){
event.preventDefault();
变量形式_状态=$('');
$.ajax({
url:$(this.attr('action'),
beforeSend:function(){
form.prepend(form_status.html(“电子邮件正在发送…

”).fadeIn(); } }).完成(功能(数据){ form_status.html('

'+data.message+'

').delay(3000).fadeOut(); }); });
在上面的相关JS中添加了

  • 放下任何不必要的东西
  • 添加调试语句以检查输入和中间变量
  • 停止使用这些@前缀
  • 再次运行并发布输出
  • 因此:

    
    
    更新:现在您告诉我们您通过ajax请求发送电子邮件,一切都清楚了。Ajax正在向服务器发送GET请求,该服务器不包含表单中的任何数据。根据我对JQuery的有限理解,您应该:

  • data
    属性添加到ajax调用中,并为其提供表单数据的json数组
  • 方法
    属性添加到ajax调用中,并将其设置为
    POST

    变量形式=$(“#主联系人形式”); 表单提交(功能(事件){ event.preventDefault(); 变量形式_状态=$(''); $.ajax({ url:$(this.attr('action'), 数据:[/*此处为您的表单数据*/], 方法:“POST”, beforeSend:function(){ form.prepend(form_status.html(“电子邮件正在发送…

    ”).fadeIn(); } }).完成(功能(数据){ form_status.html(“”+data.message+”

    ).delay(3000.fadeOut(); }); });


  • 我不太了解JQuery,不知道是否有一种方便的方法将表单数据封装到json结构中。但是,当然可以通过它们的ID获取各个字段并获取它们的值。

    显示表单HTML…并删除@并增加
    错误报告
    /
    显示错误
    “感谢联系我们”,然后打印$\u POST以检查脚本中是否有POST变量返回为“未定义”…电子邮件通过,但同样没有变量。只有纯文本。当我用真正基本的html重写html表单时,它运行var_dump数组(6){[“email”]=>string(12)”asd@jdjd.com“[“姓名”]=>string(6)“asdasa”[“编号”]=>string(2)“广告”[“公司”]=>string(3)“asd”[“主题”]=>string(3)“asd”[“消息”]=>string(6)“asdasd”}string(76)“名称:asdasa编号:广告电子邮件:asd@jdjd.com主题:asd消息:asdasd“bool(true){”type:“success”,“Message:“感谢您与我们联系。我们将尽快与您联系。”}我已将其缩小为“id”形式“不过,我不知道为什么会发生这种情况。有什么想法吗?在JS中添加了corresponds@SpringheeledJack如果事先知道您正在使用AJAX,将会非常有用。请参阅我的最新答案。
    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">' + data.message + '</p>').delay(3000).fadeOut();
        });
    });
    
    <?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    
    var_dump($_POST);
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $number = $_POST['number'];
    $company = $_POST['company'];    
    $subject = $_POST['subject']; 
    $message = $_POST['message']; 
    
    $email_from = $email;
    $email_to = '';
    
    $body = 'Name: ' . $name . "\n\n" .'Number: ' . $number . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
    var_dump($body);
    
    $success = mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
    var_dump($success);
    ?>