2016-08-17 72 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注入問題。我們返回一個數組。你的錯誤永遠不會顯示出你做這件事的方式。您可以選擇返回的方式/返回的內容,但是我們也不想要全局變量。