2017-03-09 11 views
0

こんにちは、StackoverflowコミュニティPHPとPDOで重複を防ぐために例外を作成する

私はすぐにPDOで作業を始めています。私は解決する方法がわからないという些細な質問があります。だから、もしあなたが私を助けることができるかどうか教えてください。

  1. 私は、メンバースペース内のユーザーアカウントからデータを更新するためのフォームを用意しています。このフォームには、「姓」、「名前」、「電子メール」の3つのフィールドがあります。

  2. 私はユーザー登録と既存の電子メールを希望しません。しかし、ユーザが自分の電子メールを更新したくなく、 "姓"と "名前"フィールドだけを変更したい場合、PHPコードはデータベース内のレコードを更新できるようにする必要があります。

  3. 私はフォームを処理する関数を作成しました。重複するレコードの挿入を防止することはできますが、問題があります。ユーザーが電子メールを更新したくない場合、この関数はデータベースにすでに等しい電子メールがあることを返します。実際、電子メールはすでに存在するので、ユーザーが電子メールを変更したくないときにレコードを更新できるように、この例外をコードに実装する方法を知りたいと思います。機能以下

function update_admin_profile() { 
    session_start(); 
    if (isset($_SESSION['id']) AND isset($_SESSION['login'])) { 
     // get the session variables for another propouse. 
     $id = $_SESSION['id']; 
     $pseudo = $_SESSION['login']; 

     // p - It's the URL parameter. anti_sql_injection is a function to check the parameter. 
     $p = anti_sql_injection($_GET['p']); 

     if (isset($_POST['last_name']) AND isset($_POST['name']) AND isset($_POST['email'])) { 
       $bdd = connexion_bdd(); 
       $query = $bdd->prepare('SELECT * FROM tbl__administrators WHERE email = :email'); 
       $query->execute(array('email' => htmlspecialchars($_POST['email']))); 
       $count=$query->rowCount(); 
       if ($count == 0) { 
        $update = $bdd->prepare('UPDATE tbl__administrators SET last_name = :last_name, name = :name, email = :email WHERE id = ' . $p); 
        $update->execute(array(
         'last_name' => htmlspecialchars($_POST['last_name']), 
         'name' => htmlspecialchars($_POST['name']), 
         'email' => htmlspecialchars($_POST['email']) 
         )); 
         //The profile was updated. 
         header('Location: notify.php?m=49'); 
       } else { 
        //The e-mail already exists! 
        header('Location: notify.php?m=48'); 
       } 
     } else { 
      //Please fill in all fields 
      header('Location: notify.php?m=41'); 
     } 
    } else { 
     //You session is expired. You will be disconnected now. Please, perform the login again and repeat this operation. 
     header('Location: notify.php?m=7'); 
    } 
} 

注:それは私が電子メールを変更した場合、機能が働くのです。

はあなたの助けのためにありがとうございました。

よろしくお願いいたします。

答えて

0

ユーザーが電子メールを更新したくない場合、この関数はデータベースにすでに等しい電子メールがあることを返します。

非常に簡単です。クエリ結果から現在のユーザーを除外する別の条件を追加するだけです。

$query = $bdd->prepare('SELECT 1 FROM tbl__administrators WHERE email = ? and id != ?'); 
$query->execute(array($_POST['email'], $id)); 
+0

ありがとうございました。それは本当に簡単です。 – lfgoulart

関連する問題