とある会員サイト制作において、ユーザー登録ページで他の人のアドレスと重複して登録できないように下記のようにして対応していましたが、
現在プロフィール更新ページを作成しており、
例えば、住所は変えるがアドレスは変えない場合、
下記のままでは、自分のアドレスが既に登録されていることになり、弾かれてしまいます。
「DBへ登録されているアドレスが自分以外のアドレスと重複した場合、登録できない」
と、文章にするのは簡単なのですが、どういった工夫を加えると良いでしょうか?
$sql = 'select count(*) as cnt from user_data where email=?'; $stmt = $pdo->prepare($sql); $arrParam = array(); $arrParam[] = $email; $stmt->execute($arrParam); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (0 < $row['cnt']) { $this->error['email_registered'] = '<div class="errorMessage">' . "{$email}は既に登録されています" . '</div>'; }
参考にですが
input1.php
input2.php
preview.php
thanks.php
と最後で一括更新させる構造になっています。
ログインしている人のidはまだ確立していませんが、仮の数字を入れてテストすることでこれでいけました。
public function isRegisterd(){ if (is_null(filter_input_array(INPUT_POST))) { return $this; } $email = filter_input(INPUT_POST, 'email'); $dsn = 'mysql:dbname=test;host=localhost;charset=utf8'; $user = 'root'; $password = ''; $option = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); $pdo = new PDO($dsn, $user, $password, $option); $sql = 'SELECT count(*) AS cnt FROM user_data WHERE email=? AND id != ログインしてる人のid'; $stmt = $pdo->prepare($sql); $arrParam = array(); $arrParam[] = $email; $stmt->execute($arrParam); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (0 < $row['cnt']) { $this->error['email_registered'] = '<div class="errorMessage">' . "{$email}は既に登録されています" . '</div>'; } return $this; }
回答2件