由于某些原因,当用户输入一个全新的用户名时,会显示错误消息<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>';
}
}发布于 2010-05-02 16:53:29
嘿,由于您的查询有效,mysqli_num_rows will always为true。相反,您必须检查它返回的行数,当然,如果您想创建一个新用户,行数应该是零。因此,检查行数是否等于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";
}发布于 2010-05-02 17:08:46
无论如何,将它与TRUE进行比较是一种糟糕的做法,因为它总是返回一个int,请改用:
mysqli_num_rows($r) > 0发布于 2010-05-02 17:09:18
由于您尚未指定$username和$user_id的值,因此您的
$u = "SELECT *
FROM users
WHERE username = '$username'
AND user_id <> '$user_id'";将计算为
$u = "SELECT *
FROM users
WHERE username = ''
AND user_id <> ''";我猜这不是您想要的查询,并且您将检索用户名为空的所有条目。
https://stackoverflow.com/questions/2752897
复制相似问题