2016-12-08 7 views
2

私はユーザーログインシステムを作成し、ユーザーが詳細を更新できるページを持っています。電子メールアドレスとユーザー名は一意である必要があるため、更新フォームに検証を追加しました。ただし、フォームが送信されると、電子メールアドレスがすでに使用中であるというエラーが表示されます。 (セッションに保存されている)現在の電子メールを複製チェックから何とか除外することはできますか?電子メールアドレスが重複していないかを確認して現在のユーザーを除外

これは私のコードですが、それは少し長いですすべてではないとして、私はまた、ユーザ名の同じ妥当性チェック実行する必要があります。私が使用し、各テキストボックスに続いて

try { 
     $stmt = $db->prepare('SELECT email, username, firstname, middlename, lastname FROM members WHERE memberID = :memberID'); 
     $stmt->execute(array(':memberID' => $_SESSION['memberID'])); 
     $row = $stmt->fetch(); 
    } catch(PDOException $e) { 
     echo '<p class="bg-danger">'.$e->getMessage().'</p>'; 
     } 

    //process form 
    if(isset($_POST['submit'])){ 

     // email validation 
     if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ 
      $error[] = 'Please enter a valid email address'; 
     } else { 
      $stmt = $db->prepare('SELECT email FROM members WHERE email = :email'); 
      $stmt->execute(array(':email' => $_POST['email'])); 
      $emailcheck = $stmt->fetch(PDO::FETCH_ASSOC); 

      if(!empty($emailcheck['email'])){ 
       $error[] = 'Email provided is already in use.'; 
      } 
     } 

     // insert to DB 
     if(!isset($error)){ 

      try { 
      $stmt = $db->prepare('UPDATE members SET username=:username, firstname=:firstname, middlename=:middlename, lastname=:lastname, email=:email, updated=NOW() WHERE memberID = :memberID'); 
       $stmt->execute(array(
        ':username' => $_POST['username'], 
        ':firstname' => $_POST['firstname'], 
        ':middlename' => $_POST['middlename'], 
        ':lastname' => $_POST['lastname'], 
        ':email' => $_POST['email'], 
        ':memberID' => $_SESSION['memberID'] 
       )); 

      //redirect to page with updated message 
      header('Location: personal-details.php?action=updated'); 
      exit; 

      } catch(PDOException $e) { 
       $error[] = $e->getMessage(); 
      } 

     } else { 
      $error[] = 'Update error'; 
     } 

    } 

を:

<input type="text" name="username" id="username" class="form-control" value="<?php echo($row['username']) ?>" tabindex="1"> 
+0

あなたはトンです**ユーザーログイン**または**ユーザー登録**ページについての情報は?ユーザーログインでは、ユーザー名が存在しなければなりません。ユーザ登録では、ユーザ名は存在してはいけません(Eメールと同じ)。 – FDavidov

答えて

4

あなたは、他のクエリで行うようmemberIDを使用しますが、それを除くことができます。

SELECT email FROM members WHERE email = :email AND memberID != :memberID 
+0

ありがとうございました!だからシンプルだけど、私はそれを理解できなかった – user3606041

関連する問題