1

我正在尝试学习一些 javascript,但我无法弄清楚为什么我的代码不正确(我确定我做错了什么,哈哈),但无论如何我正在尝试创建一个登录页面,以便当表单提交后,javascript 将调用一个函数来检查登录名是否在 mysql 数据库中,然后检查用户密码的有效性(如果存在)。但是我收到一个错误(非法格式的 XML 语法),我无法解决。我真的很困惑,主要是因为 netbeans 说这是一个 xml 语法错误,而我没有使用 xml。这是有问题的代码:

function validateLogin(login){

  login.addEventListener("input", function() {
    $value = login.value;
    if (<?php
    //connect to mysql
    mysql_connect(host, user, pass) or die(mysql_error());
    echo("<script type='text/javascript'>");
    echo("alert('MYSQL Connected.');");
    echo("</script>");
    //select db
    mysql_select_db() or die(mysql_error());
    echo("<script type='text/javascript'>");
    echo("alert('MYSQL Database Selected.');");
    echo("</script>");
    //query
    $result = mysql_query("SELECT * FROM logins") or die(mysql_error()); 
    //check results against given login
    while($row = mysql_fetch_array($result)){
      if($row[login] == $value){
        echo("true");
        exit(0);
      }
    }
    echo("false");
    exit(0);
      ?>) {
      login.setCustomValidity("Invalid Login. Please Click 'Register' Below.")
    } else {
      login.setCustomValidity("")
    }

  });
}

该代码位于外部 js 文件中,错误在最后一行抛出。同样从阅读中我了解到最佳实践是不要混合 js 和 php 那么我将如何将它们分开但保持我需要的功能?谢谢!

4

2 回答 2

2

您不能以这种方式混合 PHP 和 JavaScript,因为在您的任何JavaScript 在客户端执行之前,您的所有PHP 已经在服务器上执行。

该错误是因为客户端正在接收并且未能将其作为 JavaScript 执行:

function validateLogin(login){

  login.addEventListener("input", function() {
    $value = login.value;
    if (<script type='text/javascript'>alert('MYSQL Connected.');</script>...
// etc.

要从客户端与 PHP 交互,您必须发出另一个 HTTP 请求——通过<a>单击、<form>提交或 Ajax 请求(jQuery.post为简洁起见,请参阅使用 XMLHttpRequest了解更多详细信息):

function validateLogin(login){
  login.addEventListener("input", function() {
    $.post('/validateLogin.php', { login: login }, function (result) {
      if (result === "true") {
        login.setCustomValidity("Invalid Login. Please Click 'Register' Below.")
      } else {
        login.setCustomValidity("")
      }
    });
  });
}

/validateLogin.php根据需要调整 URL,但为此 URL 创建一个 PHP 文件,类似于:

<?php
$value = $_POST['login'];

mysql_connect(host, user, pass) or die(mysql_error());
mysql_select_db() or die(mysql_error());

$result = mysql_query("SELECT * FROM logins") or die(mysql_error());
while($row = mysql_fetch_array($result)){
  if($row[login] == $value){
    echo("true");
    exit(0);
  }
}
echo("false");
exit(0);
?>
于 2012-06-01T22:37:26.073 回答
-1

怎么了?<script>您只需通过在您的条件中插入部分来破坏您的 JavaScript if。所以你得到if (<script type='text/javascript'>alert('MYSQL Connected.');</script>...等等......接下来的事情:你试图 match $value,这是 JavaScript 变量,$row[login]在 PHP 循环中 - 你没有$value那里!这些是分开的代码。都是错的。

Jonathan Lonowski 很好地解释了你应该如何做到这一点。

于 2012-06-01T22:40:03.457 回答