麻烦在PHP和Javascript之间传递变量

时间:2015-10-26 22:46:05

标签: javascript php

我有一个简单的HTML5登录页面,请求用户名和密码。信息通过POST传递给PHP,以便与MySQL中的数据进行比较。我试图回应一个简单的" YES"如果数据已经成功验证并且没有" NO"除此以外。我想获取响应的文本值并使用Javascript操作它。一切似乎都正常工作,但是当$ response变量被回显时,它会在空白的HTML文档中显示,并且JavaScript永远不会被执行。以下是我正在使用的代码:

<ul>
<li>
<form action="login_submit.php" id="loginTest" method="post">
<span class="un"><i class="fa fa-user"></i></span><input type="text" id="maindata_email" name="maindata_email" value="" maxlength="40" required class="text" placeholder="Usuario"/></li>
<li>
<span class="un"><i class="fa fa-lock"></i></span><input type="password" id="maindata_password" name="maindata_password" value="" maxlength="10" required class="text" placeholder="Password"/></li>
<li>
<input type="hidden" name="form_token" value="<?php echo $form_token; ?>">
<div class="up">
<input type="submit" id ='ingresar' value="ingresar" class="btn">
<!--window.alert(5 + 6);-->
</form>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script language="javascript">
    var myData = <?php echo json_encode($response); ?>;
    window.alert(myData);
    if (myData == "YES") {
        alert("Usuario aceptado!");
        var href = 'http://index2.html';
        window.location=href;
    } else {
        alert("Usuario invalido!");
        var href = 'http://index.html';
        window.location=href;       
    }
</script>
<input type="submit"  id = 'editar' value="editar" class="btn">
</form>
</div>

</li>
</ul>

这是PHP部分:

 /*** bind the parameters ***/
        $stmt->bindParam(':maindata_email', $maindata_email, PDO::PARAM_STR);
        $stmt->bindParam(':maindata_password', $maindata_password, PDO::PARAM_STR, 40);

        /*** execute the prepared statement ***/
        $stmt->execute();

        /*** check for a result ***/
        $user_id = $stmt->fetchColumn();

        /*** if we have no result then fail boat ***/
        if ($user_id == false)
        {
                echo $response = "NO";
        }
        /*** if we do have a result, all is well ***/
        else
        {
                /*** set the session user_id variable ***/
                $_SESSION['user_id'] = $user_id;

                /*** tell the user we are logged in ***/
                echo $response = "YES";
        }


    }
    catch(Exception $e)
    {
        /*** if we are here, something has gone wrong with the database ***/
        $message = 'No se puede procesar su ingreso.  Favor de intentar mas tarde.'."<br />\r\n";
    }
}

点击HTML中的ingresar后,PHP正确发送和接收用户名和密码,信息被正确处理并与MySQL数据库中包含的值进行比较,并在验证时得到正确的响应。任何人都可以解释为什么我得到$ page的空白页面,JavaScript代码永远不会执行???感谢名单

1 个答案:

答案 0 :(得分:0)

您的代码似乎表现得如预期。提交后,您的表单会在login_submit.php向服务器发出POST请求,浏览器会显示服务器的响应,这是您回复$response的值的地方。 PHP页面上没有打印javascript或HTML,因此不会运行任何javascript,也不会显示任何HTML ...浏览器仅显示来自表单操作的POST响应的原始内容,因为它& #39;只是将其解释为没有标记的文本响应。

现在,您实际想要的是从网页上的响应中获取数据并使用该响应数据运行一些javascript。有几种方法可以解决这个问题:

  1. 使用AJAX技术通过login_submit.php从服务器异步请求数据,避免页面重新加载。当数据在一段不确定的时间后从服务器返回时,会在页面上调用javascript回调,其中涉及对传入响应数据的操作。
  2. 您的login_submit.php页面打印了一个完整的HTML页面,其中嵌入了该页面上的javascript,您可以从运行MySQL查询的PHP代码中填充生成的javascript中的变量。
  3. 从ASP.NET表单中获取一个页面并将POST返回到页面本身而不是单独的页面,并使用PHP来检测何时发生POST后退。因此,表单的所有代码,MySQL查询等都存在于同一个PHP文档中,并且您将POST发布到页面本身。当页面从POST重新加载时,它将使用正确的值在页面上填充必要的javascript变量。