2016-08-17 50 views
-2

我已经尝试了很多次,我不明白为什么这不起作用。正因为如此,我的注册页面传递了所有用户名。我不知道什么是错的。对不起我的英文不好我真的累了,绝望Php mysqli user_exists根本不工作

function user_exists($username){ 
$username = htmlspecialchars($username); 
$sql = "SELECT username FROM ***** WHERE username = '$username'"; 
$result = mysqli_query($GLOBALS['$db'], $sql); 
if(mysqli_num_rows($result) > 0){ 
    $errors[] = 'Käyttäjätunnus \''. $_POST['username'] . '\' on jo otettu.'; 
} 

} 

我打电话像这样的功能:

if(user_exists($_POST['username']) === true){ 
     $errors[] = 'Käyttäjätunnus \''. $_POST['username'] . '\' on jo otettu.'; 
    } 
+0

你正在调用这个函数到底有多精确?可能是一个可变范围。 –

+0

对于初学者,您有一个SQL注入漏洞。正在执行的查询的运行时值是什么?用什么具体的方式,这不符合预期? – David

+0

你面临什么错误? –

回答

0

好吧,让我们打扫一下一些

function user_exists(mysqli $db, $username){ 
    $username = htmlspecialchars($username); 
    $sql = "SELECT username FROM ***** WHERE username = ?"; 
    $prep = $db->prepare($sql); 
    $prep->bind_param('s', $username); 
    $prep->execute(); 
    $result = $prep->get_results(); 
    $errors = []; 
    if($result->num_rows > 0){ 
     $errors[] = 'Käyttäjätunnus \''. $username . '\' on jo otettu.'; 
    } 
    return $errors; 
} 

首先,需要将你的数据库连接注入到函数中。 Avoid using globals。其次,我们切换到prepared statement。解决SQL注入问题。我们返回一个数组。你的错误永远不会显示出你做这件事的方式。您可以选择返回的方式/返回的内容,但是我们也不想要全局变量。