出于某种原因,当用户输入全新的用户名时,会显示错误消息<p>Username unavailable</p>
,并且不会存储该名称。我想知道是否有人可以帮助找到我的代码中的缺陷,以便我可以修复此错误?感谢
这是PHP代码。
if($_POST['username'] && trim($_POST['username'])!=='') {
$u = "SELECT *
FROM users
WHERE username = '$username'
AND user_id <> '$user_id'";
$r = mysqli_query ($mysqli, $u) or trigger_error("Query: $u\n<br />MySQL Error: " . mysqli_error($mysqli));
if (mysqli_num_rows($r) == TRUE) {
echo '<p>Username unavailable</p>';
$_POST['username'] = NULL;
} else if(isset($_POST['username']) && mysqli_num_rows($r) == 0 && strlen($_POST['username']) <= 255) {
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
} else if($_POST['username'] && strlen($_POST['username']) >= 256) {
echo '<p>Username can not exceed 255 characters</p>';
}
}
答案 0 :(得分:1)
嘿,mysqli_num_rows将始终为真,因为您的查询有效。相反,您必须检查它返回的行数,当然,如果您要创建新用户,则应该为零。因此,请检查行数是否等于1。
if (mysqli_num_rows($r) == 1) echo "<p>Username unavailable</p>"; $_POST['username'] = NULL;
或者这样做:
if (mysql_i_num_rows($r) == 0 ) {
// There isn't a user with this username yet, so create new user
} else {
echo "Username not available";
}
答案 1 :(得分:0)
无论如何,将它与TRUE进行比较是一种不好的做法,因为它总是返回一个int,而是使用:
mysqli_num_rows($r) > 0
答案 2 :(得分:0)
由于您尚未指定$username
和$user_id
的值,因此您的代码为
$u = "SELECT *
FROM users
WHERE username = '$username'
AND user_id <> '$user_id'";
将评估为
$u = "SELECT *
FROM users
WHERE username = ''
AND user_id <> ''";
我猜这不是您想要的查询,您将检索所有具有空白用户名的条目。