一个关于AJAX的问题.输入用户名会提示用户名是否可用.一共有四个文件,都在下面.
在register.html输入中文用户名会出现一个警告,而且程序明显执行错误。本来数据库中有那个中文用户名的,应该输出用户名不可用才对,为什么输入时会出现一个警告?而且又显示用户名可用呢?输入英文倒没有问题。这是错误信息。
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\AppServ\www\test\ajax1\checkusername.php on line 8
The username is available!
而且这个程序里面输出中文都是乱码。下面是register.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Registration Form</title>
<script src="ajax.js" type="text/javascript" language="javascript"></script>
<script src="checkusername.js" type="text/javascript" language="javascript"></script>
</head>
<body>
<form action="register.php" method="post">
<fieldset>
<legend>Registration Form</legend>
<p>Username:<input name="username" type="text" size="20" maxlength="20" onchange="check_username(this.form.username.value)" /> <span id="username_label"></span>
<p>Password:<input name="pass1" type="password" /></p>
<p>Confirm Password:<input name="pass2" type="password" /></p>
<p>First Name:<input name="first_name" type="test" size="20" maxlength="20"/></p>
<p>Last Name:<input name="last_name" type="test" size="20" maxlength="20"/></p>
<p>Eamil Address:<input name="email" type="test" size="20" maxlength="60"/></p>
<input name="submit" type="submit" value="Register" /></p>
</fieldset>
</form>
</body>
</html>checkusername.php如下:
<?phpif(isset($_GET['username'])) {  //$_GET['username']是英文时没问题,是中文时会出错。
$dbc = @mysqli_connect('localhost','user','password','test')or die('The availability of this username    will be confirmed upon form submission.');
$q = sprintf("select user_id from users where username='%s'",mysqli_real_escape_string($dbc,trim($_GET['username']) ) );
$r = mysqli_query($dbc,$q);

if(mysqli_num_rows($r)==1){
echo '你好,The username is unavailable!';
}else {
echo 'The username is available!';
}
mysqli_close($dbc);
}else {
echo 'Please enter a username.';
}
?>下面是ajax.js:
var ajax = false;if(window.XMLHttpRequest){
    ajax = new XMLHttpRequest();

} else if (window.ActiveXObject) {
try {
ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {}
}
}if( !ajax ) {
alert ('\some page functionality is unavailable.');下面是checkusername.js:
function check_username(username) {
if(ajax) {
ajax.open( 'get','checkusername.php?username=' + encodeURIComponent(username) );

ajax.onreadystatechange = handle_check;
ajax.send(null);
} else {
document.getElementById('username_label').innerHTML = 'The availability of this username will be confirmed upon form submission.';
}
}function handle_check(){
if( (ajax.readyState == 4 ) && (ajax.status == 200) ) {
document.getElementById('username_label').innerHTML = ajax.responseText;
}
}

解决方案 »

  1.   

    第一,你的确定,html,php,mysql编码一至,
    第二,检查SQL语句是否有错,警告是说,mysqli_num_rows()参数没结果吧。
    问题应该是编码问题,你在后台打一下,$_GET['username'])看一看!
      

  2.   

    urlencode传中文,php传中文时是有很多麻烦问题的
      

  3.   

    你的页面编码是什么。用Notepad++ 改下你的编码。