メールアドレスやユーザー名などの情報を更新できる機能があります。電子メール フィールドには検証がありis_unique[table.email]
ます。ユーザーが電子メールを変更したくないが、国やその他の情報だけを変更したい場合、is_unique はメッセージを表示します。しかし、更新ページでそれを削除すると、ユーザーは既にデータベースにある電子メール アドレスを入力する可能性があります。
この問題を解決する最も論理的な方法は何ですか?
メールアドレスやユーザー名などの情報を更新できる機能があります。電子メール フィールドには検証がありis_unique[table.email]
ます。ユーザーが電子メールを変更したくないが、国やその他の情報だけを変更したい場合、is_unique はメッセージを表示します。しかし、更新ページでそれを削除すると、ユーザーは既にデータベースにある電子メール アドレスを入力する可能性があります。
この問題を解決する最も論理的な方法は何ですか?
現在のメールアドレスの値を含む非表示フィールドをフォームに追加し、送信された値が異なる場合は検証を実行できます
送信された電子メールをデータベース内の電子メールと比較します。異なる場合は、電子メール検証を使用してください。そうでない場合は、しないでください。
データベース クエリを使用していて、返される行数をカウントしていると仮定すると (0 はアドレスが空いていることを意味します)、ユーザーの一意の ID を渡す必要があります。
$result = $this->db->where('email_address',$email)->where('id !=',$userid)->get('users')->num_rows();
上記で行ったことは、現在のユーザー以外の誰かが要求された電子メールでサインアップしているかどうかを確認します。このユーザーが自分の国を更新するだけであれば、エラーは発生しません。
編集: これは、カスタム フォーム検証ルール __unique_email() などに含まれます。これはコントローラーにある必要があります。