2016-12-08 3 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

вы т alking около ** пользовательский логин ** или ** регистрация пользователя ** страница? При входе пользователя имя пользователя ДОЛЖНО существовать. При регистрации пользователя имя пользователя НЕ ДОЛЖНО существовать (то же самое для электронной почты). – FDavidov

ответ

4

вы можете использовать memberID как вы делаете в других запросах, а также, но за исключением его:

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

Большое вам спасибо! Так просто, и все же я просто не мог понять это – user3606041

Смежные вопросы