使用PHP和AJAX无法获得所需的结果

时间:2017-02-28 15:55:03

标签: php html mysql

我正在尝试检查用户输入的名称是否有效。很简单的问题,但是我正面临这个问题。

我写完之后就完成了HTML和AJAX:

<script>
function getUser(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else { 
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","getuser.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>
</head>
<body>

<form>
Name: <input type = "text" name="n1" onchange="getUser(this.value)">

<p id = "txtHint">
</form>
<br>
</body>
</html>

对于PHP,它遵循:

<?php
$q = $_REQUEST['q'];
#echo "$q";
$dc = mysql_connect('localhost','root','') or die(mysql_error());
if($dc > 0)
    mysql_select_db("sayak");
$r = "SELECT * FROM `check` WHERE name = '$q' "  or die(mysql_error());
    #echo "$r";
$s = mysql_query($r) or die(mysql_error());
    #echo "$s";
if($s > 0)
    echo "Correct";
else
    echo "Invalid";
mysql_close();

?>

对于名称,数据库中没有名称,它显示&#34;正确&#34;。

提前致谢。

2 个答案:

答案 0 :(得分:1)

请在下面找到有关您的代码的一些评论和更正。

首先考虑使用jQuery或任何其他Javascript工具包,以便更轻松地进行AJAX调用。

其次,避免使用mysql PHP扩展函数,而更喜欢PDO来构造预处理语句

第三,如果你想保持你的代码不变,至少要逃避你从JS收到的参数,以避免SQL注入,所以改变

$q = $_REQUEST['q'];

通过

$q = mysql_real_escape_string($_REQUEST['q']);

最后,下一行是错误的,所以改变

if($s > 0)

通过

if (mysql_num_rows($s) > 0)

答案 1 :(得分:0)

$s = mysql_query($r) or die(mysql_error());
    #echo "$s";
if($s > 0)
    echo "Correct";
else
    echo "Invalid";

您的验证不正确,因为Jay Blanchard评论过mysql函数已被弃用。

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,   mysql_query()成功时返回TRUE,错误时返回FALSE。

     

返回的结果资源应该传递给mysql_fetch_array(),   以及用于处理结果表的其他函数,以访问   返回数据。

这也是错误的:

$r = "SELECT * FROM `check` WHERE name = '$q' "  or die(mysql_error());

此部分在查询字符串中没有业务。

  

或死(mysql_error())