我正在尝试检查用户输入的名称是否有效。很简单的问题,但是我正面临这个问题。
我写完之后就完成了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;。
提前致谢。
答案 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())