登録フォームでは、ユーザー名と電子メール アドレスを求められ ます。データが検証に合格すると、accounts
テーブルに追加されます。ユーザー名、パスワード、電子メールアドレスなどのデータを保存します。ユーザー名が既に使用されている場合、ユーザーに通知され、データはテーブルに追加されません。電子メール アドレスが既にテーブルにあることがユーザーにすぐに通知された場合、セキュリティ上の問題と見なされました。これに対する提案された解決策は、常に確認の電子メールを送信することでした。入力されたユーザー名が既に存在する場合、電子メールには「この電子メール アドレスは既に使用されています」と表示されます (もちろん、アクティベーション リンクは提供されません)。
問題は、現在は機能しているため、INSERT
クエリがデータをテーブルに挿入できない場合、「ユーザー名が取得されました」というメッセージが表示されることです。電子メール アドレスがテーブル内で一意に設定されているため、同じ電子メール アドレスが入力されるとクエリが失敗するため、これは間違っている可能性があります。「このメールアドレスは既に使用されています」という確認メールを送信できません。このメールアドレスを含むテーブルにレコードがありません。
機能するようにシステムを再設計するにはどうすればよいですか?
私はMySQLを使用しており、テーブルaccounts
には主キーusername
の一意のキーe-mail
と属性がpassword
ありactivation
ます.
if(mysqli_stmt_execute($createAccount))
echo 'Username available!';
else
echo 'Username unavailable!';
SQL でクエリをテーブルに挿入できなかった理由を確認する方法はありますか? たとえば、どの属性の値が重複しているかを判断できますか?
私の質問が不明な場合はお知らせください。