2016-08-17 9 views
-2

これは何度も試してみましたが、なぜこれが動作しないのか分かりません。このため、私の登録ページはすべてのユーザー名を渡します。何が悪いのか分かりません。あなたは、のは、まずいくつかのPHP mysqli user_existsはまったく動作しません

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; 
} 

これをきれいにしましょう、まあ

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($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.'; 
} 

} 

本当に疲れと必死ですDB接続を関数に挿入する必要があります。 Avoid using globals

次に、prepared statementに切り替わります。 SQLインジェクションの問題を解決します。

第3に、配列を返します。あなたのエラーはあなたがそれをやっているようには決して現れません。あなたはどのように返されるのかを選ぶことができますが、やはりグローバルを望んでいません。

関連する問題