doudou5023 2018-07-21 12:22
浏览 107

没有使用ajax从php文件接收响应

Currently i am trying to send email using PHPMailer after submitting registration form but i am successfully receiving the email but not getting redirected or getting any message notice box after email has been sent.

The Signup form

        <form id="form_register" method="post" class="form-horizontal">
        <span id="log"></span>
            <div class="form-group mb5">
                <label for="username" class="col-xs-12 mb0">Username</label>
                <div class="col-xs-12">
                    <input type="text" class="form-control" placeholder="Username" name="username" id="username">
                </div>
            </div>
            <div class="form-group mb5">
                <label for="login-password" class="col-xs-12 mb0">First Name</label>
                <div class="col-xs-12">
                    <input type="text" class="form-control" placeholder="First Name" name="first_name" id="first_name">
                </div>
            </div>
            <div class="form-group mb5">
                <label for="login-password" class="col-xs-12 mb0">Last Name</label>
                <div class="col-xs-12">
                    <input type="text" class="form-control" placeholder="Last Name" name="last_name" id="last_name">
                </div>
            </div>
            <div class="form-group mb5">
                <label for="login-password" class="col-xs-12 mb0">Email</label>
                <div class="col-xs-12">
                    <input type="email" class="form-control" placeholder="Email address" name="email" id="email">
                </div>
            </div>
            <div class="form-group mb5">
                <label for="login-password" class="col-xs-12 mb0">Password</label>
                <div class="col-xs-12">
                    <input type="password" class="form-control" placeholder="Password" name="password" id="password">
                </div>
            </div>
            <div class="form-group mb5">
                <label for="login-password" class="col-xs-12 mb0">Confirm Password</label>
                <div class="col-xs-12">
                    <input type="password" class="form-control" placeholder="Confirm Password" name="confirm_pass" id="confirm_pass">
                </div>
            </div>
            <div class="form-group">
                <label class="col-md-3 control-label text-left" for="gender">Gender</label>
                <div class="col-md-9">
                    <select id="gender" name="gender" class="form-control" size="1">
                        <option value="male">Male</option>
                        <option value="female">Female</option>
                        <option value="other">Other</option>
                    </select>
                </div>
            </div>
            <div class="form-group">
                <div class="col-xs-7">
                </div>
                <div class="col-xs-5 text-right">
                    <button type="submit" class="btn btn-effect-ripple btn-sm btn-warning btn-block" name="create_account" id="create_account"><i class="fa fa-user-plus"></i> Sign up</button>
                </div>
            </div>
        </form>

Here is the ajax work:

       function regform()
       {        
            var data = $("#form_register").serialize();
            $.ajax({
            type : 'POST',
            url  : 'core/register.class.php',
            data : data,
            beforeSend: function()
            {   
                $("#log").fadeOut();
                $("#create_account").html('<i class="fa fa-spinner fa-spin"></i>');
            },                      
            success : function(response){
                    if(response=="emptycaptcha"){
                        $("#log").fadeIn();
                        $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Empty Captcha</strong> Please fill in the captcha to continue.</div>');
                        $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');           
                    }else if(response=="wrongcaptcha"){ 
                        $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Wrong Captcha</strong> Please fill in the captcha correctly.</div>');
                        $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
                    }else if((response=="noact") || (response=="adminact")){
                        $("#log").fadeIn();
                        $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> You will be redirected to Login Page...</div>');
                        $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
                        setTimeout(function() {
                            window.location.href = "login.php";
                        }, 5000);                   
                    }else if(response=="emailact"){
                        $("#log").fadeIn();
                        $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> A Verification Email has been sent to your email.You will be redirected to verification page...</div>');
                        $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
                        var uemail = $('#email').val();
                        setTimeout(function() {
                            window.location.href = "verification.php?verify="+uemail;
                        }, 5000);               
                    }       
            },              
             error: function(response){
                 $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Error !</strong> Something went wrong.</div>');
             }
            });
                return false;
        }

Here is the PHP part which receives my form inputs and send code and email to the email php file

    if (isset($_POST['create_account'])){   
            $username = trim($_POST['username']);
             $first_name = trim($_POST['first_name']);
             $last_name = trim($_POST['last_name']);
             $email = trim($_POST['email']);
             $pass = trim($_POST['password']);
             $password = PASSWORD_HASH($pass, PASSWORD_BCRYPT);
             $gender = $_POST['gender'];
             $code = mt_rand(1111111, 9999999); 
             $reg_date = date('Y-m-d');
            try{
                $rai = $db_con->prepare("ALTER TABLE users AUTO_INCREMENT = 1");
                $rai->execute();                        
                if($settings['account_act']=='noact'){
                    $v_status = 'true';
                    $a_status = 'true';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    echo 'noact';
                }else if($settings['account_act']=='emailact'){
                    $v_status = 'false';
                    $a_status = 'false';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    send_code($code,$email);
                    echo 'emailact';    
                    }
                }else if($settings['account_act']=='adminact'){
                    $v_status = 'false';
                    $a_status = 'false';
                    $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                    $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                    echo 'adminact';
                }
            }
            catch(PDOException $e){
                echo "sorry".$e->getMessage();
            }
}

The email.class.php

function send_code($code,$email){
//Load composer's autoloader
require 'PHPMailer/vendor/autoload.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'xxxxx';                 // SMTP username
    $mail->Password = 'xxxxx';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('xxxxxxxxx', 'xxxx');
    $mail->addAddress($email, 'User');     // Add a recipient
    //$mail->addAddress('ellen@example.com');               // Name is optional
    //$mail->addReplyTo('info@example.com', 'Information');
    //$mail->addCC('cc@example.com');
    //$mail->addBCC('bcc@example.com');

    //Attachments
    //$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
    //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>'.$code;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    $mail->send();  
    //echo 'Message has been sent';
    header('location:../verification.php?verify='.$email);
    //echo 'emailact';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}

}

Now if i remove the send_code($code,$email) from the register.class.php then i am successfully receiving the redirection and notice.I have tried almost 3 hours but not getting to any point.

UPDATE1: i have enabled error_reporting and display_error but i am not receiving any errors in the phperror log and also no error in the console of chrome . I have tried using console.log(response) and i am receiving the email in my gmail properly and also i am receiving the response 'emailact' properly but why am i not getting redirected? the log is as follow :

2018-07-21 14:53:03 CLIENT -> SERVER: This is the HTML message body <b>in bold!</b>9759376
2018-07-21 14:53:03 CLIENT -> SERVER:
2018-07-21 14:53:03 CLIENT -> SERVER:
2018-07-21 14:53:03 CLIENT -> SERVER: --b1_vph8ZrSzb5duNdneV6Z64s04gZP7o2um2oEAjFQXso--
2018-07-21 14:53:03 CLIENT -> SERVER:
2018-07-21 14:53:03 CLIENT -> SERVER: .
2018-07-21 14:53:04 SERVER -> CLIENT: 250 2.0.0 OK 1532184784 v4-v6sm5199360wra.22 - gsmtp
2018-07-21 14:53:04 CLIENT -> SERVER: QUIT
2018-07-21 14:53:04 SERVER -> CLIENT: 221 2.0.0 closing connection v4-v6sm5199360wra.22 - gsmtp
emailact

UPDATE 2:(SOLVED) At last i solved it its not the issue with the email.class.php but i think its with the response in my final log console.log(response) i was receiving the complete work load of php mailer well i think the whole log along with the 'emailact' that i was echoing ,was the 'response'.By considering this i arranged js in success function as follows:

success : function(response){
    console.log(response);
        if(response=="emptycaptcha"){
            $("#log").fadeIn();
            $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Empty Captcha</strong> Please fill in the captcha to continue.</div>');
            $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');           
        }else if(response=="wrongcaptcha"){ 
            $("#log").html('<div class="notice notice-sm notice-danger"><strong><i class="fa fa-info-circle"></i> Wrong Captcha</strong> Please fill in the captcha correctly.</div>');
            $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
        }else if((response=="noact") || (response=="adminact")){
            $("#log").fadeIn();
            $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> You will be redirected to Login Page...</div>');
            $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
            setTimeout(function() {
                window.location.href = "login.php";
            }, 5000);                   
        }else{
        //if(response == "emailact"){
            $("#log").fadeIn();
            $("#log").html('<div class="notice notice-sm notice-success"><strong><i class="fa fa-info-circle"></i> Successfully Registered!</strong> A Verification Email has been sent to your email.You will be redirected to verification page...</div>');
            $("#create_account").html('<i class="fa fa-user-plus"></i> Sign Up');
            var uemail = $('#email').val();
            setTimeout(function() {
                window.location.href= "verification.php?verify="+uemail;
            }, 5000);               
        }
}

</div>
  • 写回答

1条回答 默认 最新

  • dongqiao2077 2018-07-21 15:09
    关注

    Your ajax is fine and it's sending data to the php file but, php cannot access the information because yo didn't define (I don't know what they call this) Let's say method name:

    $.ajax({
                type : 'POST',
                url  : 'core/register.class.php',
                data : {'create_account': data}, //********this is too important!!!
                beforeSend: function()
                {   
                    $("#log").fadeOut();
                    $("#create_account").html('<i class="fa fa-spinner fa-spin"></i>');
                },
    

    The second thing is in your core/register.class.php you didn't define the parameters correctly, This is the right way to get the serialized data:

    if (isset($_POST['create_account'])){   
                $get = explode('&', $_POST['create_account'] ); // explode with &
    
                foreach ( $get as $key => $value) {
                    $valn[ substr( $value, 0 , strpos( $value, '=' ) ) ] =  substr( $value,                strpos( $value, '=' ) + 1 ) ;
                }
    
            // access your query param
            $username = trim($valn['username']);
            $first_name = trim($valn['first_name']);
            $last_name = trim($valn['last_name']);
            $email = trim($valn['email']);
            $pass = trim($valn['password']);
            $password = PASSWORD_HASH($pass, PASSWORD_BCRYPT);
            $gender = $valn['gender'];
            $code = mt_rand(1111111, 9999999); 
            $reg_date = date('Y-m-d');
                try{
                    $rai = $db_con->prepare("ALTER TABLE users AUTO_INCREMENT = 1");
                    $rai->execute();                        
                    if($settings['account_act']=='noact'){
                        $v_status = 'true';
                        $a_status = 'true';
                        $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                        $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                        echo 'noact';
                    }else if($settings['account_act']=='emailact'){
                        $v_status = 'false';
                        $a_status = 'false';
                        $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                        $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                        send_code($code,$email);
                        echo 'emailact';    
                        }
                    }else if($settings['account_act']=='adminact'){
                        $v_status = 'false';
                        $a_status = 'false';
                        $stmt = $db_con->prepare("INSERT INTO users(username,first_name, last_name, email, password, gender, a_status, reg_date, v_code, v_status) VALUES(:uname, :fn, :ln, :email, :pass, :gender, :a_status, :regd, :code, :v_status)");
                        $stmt->execute(array(":uname"=>$username,":fn"=>$first_name,":ln"=>$last_name,":email"=>$email,":pass"=>$password,":gender"=>$gender,":a_status"=>$a_status,"regd"=>$reg_date,":code"=>$code,":v_status"=>$v_status));
                        echo 'adminact';
                    }
                }
                catch(PDOException $e){
                    echo "sorry".$e->getMessage();
                }
    }
    

    I think this will work fine for you.

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大