2011-12-23 27 views
1

私は登録したページを持っていますが、同じ名前のメンバーが2人もいないように、 「ユーザー名」の下にユーザ名が既にデータベースに存在するかどうかチェックするPHP PHP

mysql_query("INSERT INTO UserDb (ID, TimeStamp, UserName, Password) VALUES ('$ipaddress', NOW(), '$user_username', '$user_password')"); 

がどのようにデータベース「USERDB」ことを確認することができます。私は、データベースにユーザー情報(ユーザー名、パスワード、登録日など)を挿入していますどのようにここで

ですフィールドに、ユーザーの変数 "$ user_username"が存在しないことを確認しますか?

答えて

2

データベースのユーザ名フィールドをプライマリキーまたはユニークにすることができます。これにより、データベースのユーザ名の一意性が保証されます。

次に、既存のユーザー名the mysql_query() function will fail, returning FALSEを挿入しようとすると、それはむしろ、データベースに依存するよりも、最初のユーザ名をチェックするのが最善です

SELECT username FROM table WHERE username='$php_username_var';

+0

現在、私の "TimeStamp"はデフォルトでPrimaryKeyに設定されています...これは、同時に2人のユーザーが登録できないということですか?これは今後問題になるのだろうか?また、私はPHPMyAdminのプライマリキーに自分のUserNameフィールドを設定することができませんでした...これは "FullText -type:text"に設定されているため、これは別のものでなければならないのですか?私はおそらくロジックを使用するつもりは、文の学習の経験を助けるためにselectステートメントを使用するつもりですが、私はまた、あなたが言及したこの主なキーの事について興味がある、私はそれまで知っていたまで知っていた!これまでのすべての助けをありがとう! –

+1

"これは、2人のユーザーが同時に登録できないことを意味しますか?技術的には、はい。 "これは今後問題になるのでしょうか?"はい、新しい問題の潜在的な原因です。しかし、この場合、主キーとしてタイムスタンプを使用することは意味がありません。 "これは" FullText -type:text "に設定されているからです。これについてEliの提案を考慮して、ユーザー名をEメールアドレスにしてから、最大長を入力してください。ここでの制約:http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html –

+1

最大の長さは、ユーザー名/電子メールが主キーになることを許可することです –

1

UserNameに一意のキーを作成し、INSERTエラーが発生した場合は、エラー番号を確認してください。

2

UserNameを一意のフィールドにすることができます。ユーザ名がすでに存在する場合、MySQLは新しいレコードの挿入を拒否します。

また、ユーザー名を検索するクエリを実行することもできます。存在しない場合は、挿入します。これをトランザクションにラップすると、ユーザーを検索した後、新しい名前を追加する前に、同じ名前の追加の新しい名前が追加されたことを確認できます。

+1

トランザクションが不十分である可能性があります。事前にテーブルをロックする方が適切です。 – Erbureth

+0

+1トランザクションの場合。 –

+0

トランザクションとは何ですか? –

1

それに加えて、あなたは常に単純なSELECTステートメントを使用して、ユーザ名が存在するデータベースを照会しますエラーを介してあなたに伝えます。機能が暗示されているのではなく、明示的であることが常に良いです。

また、同じユーザー名で1つ以上の既存のレコードが存在する状況を考慮する必要があります。

たとえば、ユーザーが定期購入にサインアップした場合、数か月後にキャンセルしてから、後で再度サインアップします。

時々、アカウントを再オープンして新しいアカウントを作成するのが最善です...その場合は、現在のアカウントだけが同じであれば、同じユーザー名で重複する行を持つことができますアクティブ、残りは履歴レポート作成のためのものです。

実際には、古いユーザーインスタンスが請求テーブル、メモなどで参照されている場合は、重複する行が必要になることがあります。ユーザーを削除すると、レポートに問題が発生します。

ユーザーのメールアドレスをユーザー名として使用することをお勧めします。ユーザー固有の文字列であり、既定の方法で連絡し、サインアップ時に検証することができます。

+0

そのメールは素晴らしいアドバイスです!ちょうど1週間前、私はmysql_real_escape_stringやstrip_tagsを使わずに情報を保存していました...私はそうしませんでした。私はこのプロジェクトに電子メールアドレスを保存しません。そのような流出した情報の責任を負いたいと願っています。しかし、将来私は間違いなくこのようなアドバイスを心に留めておきます!本当にありがとう! –

関連する問題