【问题标题】:Javascript function with PHP throwing a "Illegally Formed XML Syntax" error带有 PHP 的 Javascript 函数引发“非法格式的 XML 语法”错误
【发布时间】:2012-06-01 22:00:34
【问题描述】:

我正在尝试学习一些 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 那么我将如何将它们分开但保持我需要的功能? 谢谢!

【问题讨论】:

    标签: php javascript xml syntax-error


    【解决方案1】:

    您不能以这种方式混合 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 请求——通过&lt;a&gt; click、&lt;form&gt; submit 或 Ajax 请求(为简洁起见,使用 jQuery.post;请参阅 Using 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 创建一个 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);
    ?>
    

    【讨论】:

    • 好的,我明白了,非常感谢您如此详细的回复。
    【解决方案2】:

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

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

    【讨论】:

    • 我不明白 - 我被否决的回答有什么问题?我正在写答案,但弹出消息显示有人(乔纳森)回答了,我加载了他的帖子并认为它已经完成,我不必第二次写所有东西,所以我只发送我所拥有的。这不是一个解决方案,但它描述了问题所在..
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多