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

你牛逼关于**用户登录**或**用户注册**页面?在用户登录中,用户名必须存在。在用户注册中,用户名不得存在(对于电子邮件来说,也是如此)。 – FDavidov

回答

4

可以使用memberID就像你在其他的查询做的一样好,但不包括它:

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

非常感谢!这么简单,但我无法弄清楚 – user3606041

相关问题