Php 检查用户名可用性时遇到问题
我这里有一个检查用户名是否可用的代码,但我收到一条错误消息,说明:Php 检查用户名可用性时遇到问题,php,jquery,html,Php,Jquery,Html,我这里有一个检查用户名是否可用的代码,但我收到一条错误消息,说明: <br /> <b>Warning</b>: mysql_result() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\username_check.php</b> on line <b>8</b><br /> $usern
<br /> <b>Warning</b>: mysql_result() expects parameter 1 to be resource, boolean given in <b>C:\xampp\htdocs\username_check.php</b> on line <b>8</b><br /> $username_result
我的jquery是这样的:
require 'db_connect.php';
if (isset($_POST['username'])) {
$username = mysql_real_escape_string($_POST['username']);
if (!empty($username)) {
$username_query = mysql_query ("SELECT COUNT('id') FROM 'users' WHERE 'username'='$username'");
$username_result = mysql_result($username_query, 0);
}
}
?>
jQuery( '#box1' ).keyup(function(){
var username = jQuery(this).val();
jQuery( '#msg_out1' ).html('<img src="/img/ajax-loader.gif" width="43" height="11" /> Checking availability... ');
if (username != '') {
jQuery.post('/click/username_check.php', { username: username }, function(data){
jQuery( '#msg_out1').text(data);
});
}else {
jQuery( '#msg_out1' ).html('Choose a Username.').css('color','grey').css('font- size','15px').css('margin-left','40px');
}
});
});
我使用jQuery而不是$,因为我在documentready之前在顶部指定了一个jQuery无冲突代码。通常这条消息
mysql_result() expects parameter 1 to be resource
表示查询出现语法错误并已失败。这与返回0行的成功查询不同。看看你的查询,你有很多单引号。那可能是你的问题。我添加了连接,因为它提高了可读性
mysql_query("SELECT COUNT(id) FROM `users` WHERE `username`='" . $username . "'");
就我个人而言,我会做以下工作:
// db_connect.php - keep in folder named restricted
// a function makes it easy to create a new instance without using agrs again
<?php
function db(){
return new mysqli('localhost', 'username', 'password', 'database');
}
?>
// username_check.php - you may keep in folder click
<?php
require 'restricted/db_connect.php'; $db = db();
if(isset($_POST['username'])){
$username = $db->real_escape_string($_POST['username']);
if(!empty($username)){
$username_query = $db->query("SELECT COUNT('id') FROM users WHERE username='$username'");
if($username_query->num_rows > 0){
$r = '';
while($row = $username_query->fetch_row()){
$r = $row[0];
}
echo $r;
}
else{
echo '';
}
$username_query->free(); $db->close();
}
}
?>
此外,jQuery应该更像:
$('#box1').keyup(function(){
var username = $(this).val(), msgO = $('#msg_out1');
msgO.html('<img src="/img/ajax-loader.gif" width="43" height="11" /> Checking availability... ');
$.post('/click/username_check.php', {username: username}, function(data){
if(username !== ''){
msgO.text(data);
}
else{
msgO.html('Choose a Username.').css('color','grey').css('font- size','15px').css('margin-left','40px');
}
});
});
// use `$.noConflict()` if `$` is a problem
您忘记了jQuery是异步的。mysql_*函数从PHP 5.5.0开始就被弃用了。使用PDO或mysqli_*代替!就个人而言,我建议使用PDO:我现在要阅读链接,因为您的mysql_查询调用很可能返回false failing,因此会出现错误。当你使用mysql时,你可能很难从别人那里得到合适的回复。如果你把你的错误放在谷歌上,你会发现很多,事实上不是很明显,或者你会找到一个答案。mysqli_查询确实需要传递连接,但旧函数不需要使用最后一个连接。尽管如此,使用mysqli还是更好,但我在OP的上下文中回答了这个问题
$('#box1').keyup(function(){
var username = $(this).val(), msgO = $('#msg_out1');
msgO.html('<img src="/img/ajax-loader.gif" width="43" height="11" /> Checking availability... ');
$.post('/click/username_check.php', {username: username}, function(data){
if(username !== ''){
msgO.text(data);
}
else{
msgO.html('Choose a Username.').css('color','grey').css('font- size','15px').css('margin-left','40px');
}
});
});
// use `$.noConflict()` if `$` is a problem