2016-08-10 2 views
-1

質問が多く返されているので、この投稿はすぐに重複してマークされているかもしれませんが、なぜ私にとってはうまくいかないのか分かりません。 :php mysqlがユーザー名が存在するかどうかを確認してください

$conn->set_charset("utf8"); 
$query = mysqli_query($conn, "SELECT * FROM User WHERE Username='".$username."'"); 
if(mysqli_num_rows($query) > 0){ 

echo "exists"; 
}else{ 
if (!mysqli_query($conn,$query)) 
{ 
    echo "free"; 
} 
} 
} 

問題です:私はいつも

おかげ

-Nick

+6

エラー報告を有効にする必要があります。 mysql_ *関数はPHP 7で削除されています!あなたは素晴らしいSQLインジェクションのためにオープンしています。 – Daan

+0

あなたのコードはSQLインジェクション攻撃の危険性があります。また、mysql_8拡張機能の使用をやめてください。mysqli_ *またはPDO拡張機能を使用してください。 –

+0

PDOまたはmysqliを使用することを検討してください。 – Alex

答えて

1

値を取得し、クエリ結果にphp count()関数を使用してみてください。 countが0より大きい場合echo else else free

+0

はい、問題はnumrowsは常に0であり、理由は、DBにいくつかのレコードがあるからです。 – Nick

+0

接続が行われているかどうかを確認してください。 –

+0

これは、コードの他の部分でチェックされています。あなたにもっと混乱させるためにBTW: '$ numrows = mysql_num_rows($ query); ($ usernameG && $ passwordG)であれば{ \t($ NUMROWS!= 0){ \t \tながら($行= mysql_fetch_assoc($クエリ)){ \t \t \t $ DBUSERNAME = $行[ 'ユーザ名']もし; \t \t \t $ dbpassword = $ row ['password']; \t \t} \t \t場合($ usernameG == $ DBUSERNAME && $ passwordG == $のDBPASSWORD){ \t \t \t $ _SESSION [ 'ユーザ名'] = $ usernameG。 \t \t \t header( 'Location:menu.php'); \t \t} else { \t \t echo "wrong";他 \t} \t} { \t \tが \t} } 'それが働いているが、 "間違っている" エコー。 – Nick

-2

あなたを "無料" 取得していますユーザー名とパスワードは引用符で囲まれているため、文字通り取っています。

これを試してみてください:

$query = mysql_query("SELECT * FROM User WHERE Username='" . $usernameG . "' and Password='" . $passwordG ."'");//quotes 
+3

それは間違っている。文字列全体が二重引用符で囲まれています。つまり、その内部の一重引用符は特別な処理を行わず、変数が補間されます。それは文字列の外側の重要な引用符です。 – andrewsi

-1

をあなただけのユーザー名が利用可能です確認したい場合は、このクエリではパスワードを使用しないのはなぜ? $ numrows varをダンプして、それに含まれるデータを確認しましたか?

私はあなたがユーザ名が利用可能かどうかを知りたい

SELECT id FROM users WHERE username='username' LIMIT 1 

のようなものを使用するので、あなたは1(LIMIT 1)を見つけた後、探して停止します。もしあなたが私に1スプーンを見つけるように依頼すれば、 他にも多くの人が示唆するように、廃止予定のmysql_ *機能の使用をやめてください。 https://phpdelusions.net/pdoのチュートリアルを読むことをお試しください(Google経由でさらに多くを見つけることができます)

私は、次のコードを使用することができます。それはエラーが含まれている場合は、私を許し、それは年齢されているので、私はちょうどPDO直接:

<?php 

$checkUser = $pdoConnection->prepare("SELECT id FROM users WHERE username = ? LIMIT 1"); 
$checkUser->execute([$username]); 

if ($checkUser->rowCount() == 1) 
{ 
    return 'Username exists'; 
} 

# Username is available, so continue with the rest of your code 

あなたの質問とは何の関係もない経験に基づいて、私からの小さなヒント;データベースで大文字を使用しないでください。それは不必要な問題につながる可能性があります。

+0

残念ながら、私はすでにLIMIT 1で試してみましたが、ユーザー名だけを見つけました(論理的にはパスとユーザー名を見つけるか、 – Nick

+0

まず、私の答え(あなたを助けようとする試み)を役に立たない(役に立たない)とマークしていただき、ありがとうございます。 $ numrows varをダンプするとどうなりますか?期待しているデータが含まれていますか? –

+0

最初に私はそれをdownvote didnt、それは私が唯一の125の評判を持っていることを見ることができるように、そしてyes $ numrowsはデータを持っていない、それは常に私に "0"を示す – Nick

関連する問題