在PHP和Javascript之间传递变量时出现问题

在PHP和Javascript之间传递变量时出现问题,javascript,php,Javascript,Php,我有一个简单的HTML5登录页面,请求用户名和密码。信息通过POST传递到PHP,以便与MySQL中的数据进行比较。如果数据被成功验证,我尝试回显一个简单的“是”,否则回显一个“否”。我想获取响应的文本值,并使用Javascript对其进行操作。一切似乎都正常工作,但当$response变量被回显时,它会自动显示在一个空白的HTML文档中,JavaScript永远不会执行。以下是我正在使用的代码: <ul> <li> <form action="login_subm

我有一个简单的HTML5登录页面,请求用户名和密码。信息通过POST传递到PHP,以便与MySQL中的数据进行比较。如果数据被成功验证,我尝试回显一个简单的“是”,否则回显一个“否”。我想获取响应的文本值,并使用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>
  • ; 窗口警报(myData); 如果(myData==“是”){ 警惕(“Usuario aceptado!”); var href=http://index2.html'; window.location=href; }否则{ 警惕(“Usuario invalido!”); var href=http://index.html'; window.location=href; }
下面是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";
    }
}
/***绑定参数***/
$stmt->bindParam(':maindata_email',$maindata_email,PDO::PARAM_STR);
$stmt->bindParam(':maindata_password',$maindata_password,PDO::PARAM_STR,40);
/***执行准备好的语句***/
$stmt->execute();
/***检查结果***/
$user_id=$stmt->fetchColumn();
/***如果我们没有结果,那就失败吧***/
如果($user\u id==false)
{
echo$response=“否”;
}
/***如果我们真的有结果,一切都很好***/
其他的
{
/***设置会话用户id变量***/
$\u会话['user\u id']=$user\u id;
/***告诉用户我们已登录***/
echo$response=“是”;
}
}
捕获(例外$e)
{
/***如果我们在这里,数据库就出了问题***/
$message=“没有任何程序。请支持我们的计划。”“
\r\n”; } }

在我点击HTML中的Ingrear之后,PHP会正确地发送和接收用户名和密码,正确地处理信息,并将其与MySQL数据库中包含的值进行比较,在验证后我会得到正确的响应。谁能解释为什么我得到的空白页与$响应和JavaScript代码从来没有执行???Thanx

您的代码似乎按预期运行。您的表单在提交时向服务器发出POST请求,地址为
login\u submit.php
,浏览器显示来自服务器的响应,您在服务器上回显了
$response
的值。PHP页面上没有打印javascript或HTML,因此不会运行javascript,也不会显示HTML。。。浏览器只是显示来自表单操作的POST响应的原始内容,因为它只是将其解释为没有标记的文本响应

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

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

  • 你的错误日志是怎么写的?错误500作为状态代码?您有1x和2x标记,以及PHP缺少的一些代码。您需要使用AJAX来完成您想要的任务,有很多相关教程,特别是使用jquery.com,如果这是您的实际代码
    http://index.html
    无效。@Bernie-单击“提交”后,您在浏览器地址栏中看到了什么?谢谢Jason:)如果我理解正确,您建议我使用AJAX直接从login2.php访问MySQL数据库,并输入用户名和密码使用XMLHttpRequest在同一页上进行验证。我想我可以做到这一点,但这意味着扔掉我的login_submit.php代码,在我尝试将一个简单的字符串值从一个php页面传递到另一个页面之前,它一直工作得很好。在服务器和客户端之间执行如此简单的任务真的很困难吗?Jason,你是不是建议我直接在login_submit.php中包含我的js代码,而不是在login2.php中进行数据库验证?关于我所使用的AJAX技术,你能不能更具体一些应该使用?我如何使用AJAX从login_submit.php获取$response值,并在login2.php文件中提交后继续执行我的js代码?(这是我离开的地方)?使用php代码没有“服务器/客户端”。。。一切都发生在服务器端。客户机向服务器发出HTTP请求,服务器使用PHP响应一些文本。。。可以是HTML/CSS/Javascript,也可以是JSON,也可以是XML,几乎可以是任何东西。通常在网页的情况下,它将是HTML/CSS/javascript。现在你只是发回一个原始字符串。。。它不是HTML,也不是javascript,它只是一个字符串响应。