2016-04-13 17 views
0

私は、別の開発者によってPHPで構築されたWebアプリケーションを変更しています。現在、ユーザがフォームを記入し、すでに使用されているユーザ名を入力すると、MySQLエラーDuplicate entry 'fred' for key 'username'が新しいページに表示されます。同じページにエラーメッセージが表示されるようにしたいので、入力したユーザー名がテーブルの別のユーザー名と一致するかどうかを確認しようとしていますが、動作させることはできません。何かご意見は?MySQLで重複エントリを確認する

$username_entry = ($_POST['username']); 
$username_match = mysql_query("SELECT * FROM business WHERE username='$username_entry'"); 

if (($_POST['username']) == $username_match) { 
    // do something 
} 
+0

この部分は動作しませんか? –

+0

最良のソリューションは、すでに実装されているソリューションです。入力結果に重複したキーがある場合は、適切なエラーメッセージを表示することができます。これにより、データベースへの1回のラウンドトリップしか行われません。挿入を行う前にユーザーが存在するかどうかをチェックすると、2回のラウンドトリップが発生し、これはよりコストがかかります。 私があなたの問題について見ている最も良い解決策は、次のいずれかです。 1.エラーメッセージページから呼び出し元のページにリダイレクトし、適切なエラーを表示します。 2. ajaxを使用してリクエストを完了し、呼び出しフォームにエラーを表示します。 – Chris

+0

@ Chris-MayhemSoftware私はPHPのnoobですので、どうやってこのようなエラーメッセージを表示するのか分かりません。あなたは詳しく説明できますか? –

答えて

0

あなたはに対してチェックするためにあなたのクエリからは何も返さないしているすべての最初の。私はdbをクエリして、そのユーザ名で返される行があるかどうかを調べます。 $ cntは行数ですので、0より大きい場合は重複しています。

$username_entry = ($_POST['username']); 
    $username_match = mysql_query("SELECT count(*) FROM business WHERE username='$username_entry'"); 
    $cnt = mysql_num_rows($username_match); 

    if (($cnt > 0) { 
     // do something 
    } 
+0

お返事ありがとうございます。あなたのコードを使用すると、次のエラーが発生します... –

+0

警告:mysql_fetch_array()は、リソース1、/アプリケーション/ XAMPP/xamppfiles/htdocs/shop-local-weekly-root/arizona/anytown/_actions/addbssn.php on line 45 警告:mysql_num_rows()は、/ Applications/XAMPP/xamppfiles/htdocs/shop-local-weekly-root/arizona/anytown/_actions/addbssnで指定されたパラメータ1がリソースであることを想定しています。 php on line 46 –

+0

これを行うにはcount(*)を使うだけでよいので、1行戻すだけです。 – Chris

関連する問題