我正在尝试检查重复项的用户名列,如果找到一个,则“应该使用用户名”应该回显。无论输入什么用户名“用户名是好的”总是回显...是什么导致了这一点,我该如何改变呢?
$username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']);
$sql = "SELECT * FROM riders WHERE username='$username' LIMIT 1";
$query = mysqli_query($connect, $sql);
$uname_check = mysqli_num_rows($query);
if ($uname_check == 0) {
echo '<strong style="color:#009900;">' . $username . ' is OK</strong>';
exit();
} else {
echo '<strong style="color:#F00;">' . $username . ' is taken</strong>';
exit();
}
答案 0 :(得分:4)
让我们以正确的方式调试它。如果您的代码不起作用,则 debug ;不只是猜测事情。要从PHP调试MySQL问题,您必须查看这些函数的returned
值是什么?而不只是期待最好的情况。计算机科学不是猜测工作,对大多数事情来说都很准确。
第1步:
// $connect = mysqli_connect("localhost", "my_user", "my_password", "world");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
第2步:
$username=mysqli_real_escape_string($connect,$username);
$sql = "SELECT 1 FROM riders WHERE username='$username' LIMIT 1";
if ($result=mysqli_query($connect, $sql)) {
$uname_check=mysqli_num_rows($result);
}
else
{
printf("Error message: %s\n", mysqli_error($connect));
}
第3步:
echo intval($uname_check);
当你到达这里时,你会确切地知道出了什么问题。
之后,您可以继续使用if
if ($uname_check == 0)
{
echo '<strong style="color:#009900;">' . $username . ' is OK</strong>';
}
else
{
echo '<strong style="color:#F00;">' . $username . ' is taken</strong>';
}
exit();
答案 1 :(得分:0)
更改逻辑:
$query = mysqli_query($connect, $sql) or die(mysqli_error($connect));
if ($query){
if($uname_check > 0) {
{
echo '<strong style="color:#F00;">' . $username . ' is taken</strong>';
exit();
} else {
echo '<strong style="color:#009900;">' . $username . ' is OK</strong>';
}
}
else
{
echo 'An error occured while querying the new username';
}
我们将能够理解你的sql查询是否合适。
答案 2 :(得分:0)
首先,在SQL请求之前尝试echo $username
来检查值;
其次,尝试删除LIMIT 1
,因为这样做是没用的,因为你确实阻止了重复创建,所以无论如何它都是0或1。
第三,试试这个:$username=preg_replace("#[^a-z0-9\.]#i", null, $_POST['usernamecheck']);
答案 3 :(得分:0)
我发现自己没有回答似乎有帮助:
$query = mysql_query($sql, $connect);
而不是:
$query = mysql_query($connect, $sql);