繁体   English   中英

将 $SESSION 变量传递给 javascript

[英]pass $SESSION variable to javascript

用户在 HTML 表单中输入他的电话号码,然后填写 google recaptcha,然后按下按钮。 如果电话号码部分和重新验证部分成功完成,则从 javascript 文件中调用名为“sendOTP”的 function,该文件使用电话号码向该号码发送 OTP。 一切似乎都在工作,[除了我收到这个错误]。 我相信电话号码(表示为 $_SESSION['Telephone'] 没有成功传递给要使用的 javascript 文件。在这种情况下,如何将变量传递给 javascript 以便它可以成功发送一个 OTP 到号码?这里是验证验证码的 validate-captcha.php 代码,如果成功,它会发送调用 sendOTP():

                    <?php
                session_start();
                $ph_number = '';
                    if (isset($_POST['g-recaptcha-response']))
                    {
                        $secret = "key1";
                        $ip = $_SERVER['REMOTE_ADDR'];
                        //echo $ip;
                        $response = $_POST['g-recaptcha-response'];
                        $url = "https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$ip";
                        $fire = file_get_contents($url);
                        //echo $fire;
                        $numero = $_SESSION['Telephone'];
                        $data = json_decode($fire);
                        if ($data->success == true)
                        {   
                            echo '<script type="text/javascript">
                            var $("#mobile").val() = "<?php echo"$numero"?>";
                        </script>';
                            echo '<script src="jquery-3.2.1.min.js" type="text/javascript"></script>';
                            echo '<script src="verification.js">
                            
                            </script>';
                            
                            echo '<script>sendOTP()</script>';
                            return 1;
                            
                        }
                        else
                        {
                            
                            echo "Please fill captcha"; 
                            echo $numero;
                        }
                    } 
                ?> 

这是 javascript (verification.js) 代码:

                                            function sendOTP() {
                                            $(".error").html("").hide();
                                            var number = $("#mobile").val();
                                            if (number.length == 8 && number != null && (number.indexOf(5)==0 || number.indexOf(6)==0 || number.indexOf(9)==0)) {
                                                var input = {
                                                    "mobile_number" : number,
                                                    "action" : "send_otp"
                                                };
                                                $.ajax({
                                                    url : 'controller.php',
                                                    type : 'POST',
                                                    data : input,
                                                    success : function(response) {
                                                        $(".container").html(response);
                                                    }
                                                });
                                            } else {
                                                $(".error").html('Please enter a valid Hong Kong number!')
                                                $(".error").show();
                                            }
                                        }
                                        async function verifyOTP() {
                                            var that = this;
                                            $(".error").html("").hide();
                                            $(".success").html("").hide();
                                            var otp = $("#mobileOtp").val();
                                            var input = {
                                                "otp" : otp,
                                                "action" : "verify_otp"
                                            };
                                            if (otp.length == 6 && otp != null) {
                                                const handlerA = async function() {
                                                    var res = false
                                                    try {
                                                        await $.ajax({
                                                            url : 'controller.php',
                                                            type : 'POST',
                                                            dataType : "json",
                                                            data : input,
                                                            success : function(response) {
                                                                $("." + response.type).html(response.message);
                                                                $("." + response.type).show();
                                                                if (response.type=='success') {
                                                                    res = true
                                                                } else if (response.type == 'error') {
                                                                    res = false
                                                                }
                                                            },
                                                            error : function(response) {
                                                                console.log ('fail')
                                                                //console.log(data)
                                                                alert("Error encountered. Please try again later.");
                                                            }
                                                        });
                                                        return res;
                                                    } catch (err) {
                                                        console.error( err )
                                                    }
                                                }
                                                const handlerB = async function () {
                                                    await $.ajax({
                                                        url : 'submission.php',
                                                        type : 'POST',
                                                        data : input,
                                                        dataType : "json",
                                                        success : function(response) {
                                                            $(".container").html(response);
                                                        }   
                                                    })
                                                }
                                                let $resultA = await handlerA()
                                                // Now exec B
                                                if ($resultA == true) {
                                                    let $resultB = await handlerB();
                                                    $resultB;
                                                }
                                            } else {
                                                $(".error").html('You have entered wrong OTP.')
                                                $(".error").show();
                                            }
                                        }

如有必要,这里是 PHP 文件(controller.php),其中定义了 sendOTP() function:

                                    <?php
                                session_start();

                                error_reporting(E_ALL & ~ E_NOTICE);
                                require ('textlocal.class.php');
                                include('config/db_connect.php');
                                class Controller
                                {
                                    function __construct() {
                                        $this->processMobileVerification();
                                    }
                                    function processMobileVerification()
                                    {
                                        switch ($_POST["action"]) {
                                            case "send_otp":
                                                $mobile_number = $_POST['mobile_number'];   
                                                $sender = 'me';
                                                $otp = rand(100000, 999999);
                                                $_SESSION['session_otp'] = $otp;
                                                $message = "Your One Time Password is " . $otp;
                                                $numbers = array(
                                                    $mobile_number
                                                );
                                                $url = 'https://www.something.hk/s.php';
                                                $data = array(
                                                    "user" => "user",
                                                    "pass" => "password",
                                                    "to" => $mobile_number,
                                                    "from" => $sender,
                                                    "unicode" => 0,
                                                    "mess" => $message,
                                                    "otp" => 1,
                                                    "schtime" => 0
                                                );
                                                // use key 'http' even if you send the request to https://...
                                                $options = array(
                                                    'http' => array(
                                                        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                                                        'method'  => 'POST',
                                                        'content' => http_build_query($data)
                                                    )
                                                );
                                                $context  = stream_context_create($options);
                                                $result = file_get_contents($url, false, $context);
                                                if ($result === FALSE) { /* Handle error */ }
                                                require_once ("verification-form.php");
                                                break;

                                            case "verify_otp":
                                                $otp = $_POST['otp'];
                                                $MPF_account = $_SESSION['MPF_account'];
                                                $Telephone = $_SESSION['Telephone'];
                                                $Gender = $_SESSION['Gender'];
                                                $Job = $_SESSION['Job'];
                                                $Monthly_salary = $_SESSION['Monthly_salary'];
                                                $Existing_loan = $_SESSION['Existing_loan'];
                                                $Residential_Type = $_SESSION['Residential_Type'];
                                                $Existing_loan = $_SESSION['Existing_loan'];
                                                $Job_Type = $_SESSION['Job_Type'];
                                                $Existing_loan_amount = $_SESSION['Existing_loan_amount'];
                                        
                                                if ($otp == $_SESSION['session_otp']) {
                                                    unset($_SESSION['session_otp']);
                                                    echo json_encode(array("type"=>"success", "message"=>"Thank You! Your form has been successfully submitted." ,"MPF_account"=>$MPF_account,
                                                    "Telephone"=>$Telephone,"Gender"=>$Gender,"Job"=>$Job,"Monthly_salary"=>$Monthly_salary,"Existing_loan"=>$Existing_loan,
                                                    "Residential_Type"=>$Residential_Type,"Existing_loan"=>$Existing_loan,"Job_Type"=>$Job_Type,"Existing_loan_amount"=>$Existing_loan_amount
                                                ));
                                                }
                                                else {
                                                    echo json_encode(array("type"=>"error", "message"=>"Mobile number verification failed"));
                                                }
                                                break;
                                        }      
                                    }
                                }
                                $controller = new Controller();
                                ?>

此外,这里是第一阶段使用的 HTML 形式:

                    <!DOCTYPE html>
                <html>
                <head>
                <title>OTP SMS</title>
                  <link href="style.css" type="text/css" rel="stylesheet" />
                  <script src="https://www.google.com/recaptcha/api.js" async defer></script>
                  <script src="jquery-3.2.1.min.js" type="text/javascript"></script>
                  <script src="verification.js"></script>
                  <?=(isset($_POST['g-recaptcha-response']) && $data->success) ? "<script>sendOTP()</script>" : ""?>
                </head>

                <body>
                  <div class="container">
                    <div class="error"></div>
                    <form action="validate-captcha.php" id="frm-mobile-verification" method="POST">
                      <div class="form-heading">Mobile Number Verification</div>
                      <div class="form-row">
                        <input type="number" id="mobile" class="form-input" placeholder="Enter the 8 digit mobile" value="<?php echo $_SESSION['Telephone'] ?>">
                      </div>
                      <div method="post" class="g-recaptcha" data-sitekey="key2"></div>
                  <input type="submit" name="submit" value="Submit" class="btn brand z-depth-0">
                    </form>
                  </div>
                  <script src="jquery-3.2.1.min.js" type="text/javascript"></script>
                  <script src="verification.js"></script>
                </body>

                </html>   

你的代码中有这个:

var $("#mobile").val() = "<?php echo"$numero"?>";

这是无效的 JavaScript 您正在输出。
var必须与变量名一起使用。 这就是语法错误应该告诉你的。
您的意图是设置值。 查看有关如何执行此操作的 jQuery 文档:
https://api.jquery.com/val/#val2

这给我们留下了这个解决方案......

$("#mobile").val('"<?php echo $numero ?>"');

...这会将 PHP 变量中的$numero的值放入 id 为mobile的输入字段中。

请尊重评论

请再次阅读评论。 他们试图帮助您在那里发现 JavaScript 错误。 你坚持你的代码是好的——或者至少你的措辞表明你根本没有看到问题——你“只需要解决方案”。
他们暗示您应该重新考虑,并且您没有表现出理解语法错误是您的代码错误的迹象。

您应该 go “哦,也许语法错误,我将再次检查文档如何做到这一点”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM