2016-04-18 27 views
0

プロフィールページ、編集機能、編集機能があります。プロフィール更新時にプロフィールデータが存在するかどうかチェック

プロフィールページ:

if (isset($_POST['edit']) && $_POST['edit'] === 'Edit') { 

    $errorMsgs = $user->validateUpdate($_POST); 
    if (empty($errorMsgs)) { 
    $id = $_POST['id']; 
     $username = $_POST['username']; 
     $email = $_POST['email']; 
    $user->updateProfile($username,$email,$id); 
    echo 'edited'; 
    exit; 
    } 
    foreach ($errorMsgs as $msg) { 
     echo '<li>'. $msg. '</li>'; 
    } 
} 


     while ($row = mysqli_fetch_assoc($result)) { 
    ?> 
<form action="<?php $_SERVER['PHP_SELF'];?>" method="POST"> 
<input type="hidden" name="id" value="<?php echo $row['id']; ?>" /> 
Username<br> 
<input type="text" name="username" value="<?php echo $row['username']; ?>" /><br> 
Email<br> 
<input type="text" name="email" value="<?php echo $row['email']; ?>" /><br> 
<input name="edit" type="submit" value="Edit"/> 
</form> 
<?php } 
     ?> 

更新機能:

function updateProfile($username,$email,$id){ 
     $con = new Core(); 
     $con->connect(); 
     $username = trim(strtolower($username)); 
     $username = str_replace(' ', '', $username); 
     $sql = 'UPDATE users SET username = ?, email = ? where id = ?'; 
     if ($stmt = $con->myconn->prepare($sql)) 
     { 
      $stmt->bind_param('ssi', $username, $email, $id); 
      $stmt->execute(); 
      $stmt->close(); 
     } 
     else{ 
      die("errormessage: " . $con->myconn->error); 
     } 

    } 

チェック機能:

function validateUpdate(array $userDetails) 
    { 
     $con = new Core(); 
     $con->connect(); 
     $errmsg_arr = array(); 
     foreach($userDetails as $key => $value) { 
      if (empty($value)) { 
       $errmsg_arr[] = ucwords($key) . " field is required"; 
      } 
     } 

     if (!empty($userDetails['edit'])) { 
      if (!empty($userDetails['email']) && !filter_var($userDetails['email'], FILTER_VALIDATE_EMAIL)) { 
       $errmsg_arr[] = "the provided email is not a valid email address"; 
      } 

      $sqlu = "SELECT username FROM users WHERE username = ?"; 
      if($stmt = $con->myconn->prepare($sqlu)){ 
       $stmt->bind_param('s', $_POST['username']); 
       $stmt->execute(); 

      } 
      if($stmt->fetch() > 0){ 
       $errmsg_arr[] = "Username already exists!"; 
       $stmt->close(); 
      } 

      $sqle = "SELECT email FROM users WHERE email = ?"; 
      if($stmt = $con->myconn->prepare($sqle)){ 
       $stmt->bind_param('s', $_POST['email']); 
       $stmt->execute(); 
      } 
      if($stmt->fetch() > 0){ 
       $errmsg_arr[] = "Email already exists!"; 
       $stmt->close(); 
      } 
     } 
     return $errmsg_arr; 
    } 

すべてが完璧に動作します。しかし、この小切手には欠陥があります。

誰かがプロフィールに移動します。 人物が詳細を編集しようとしています。コードエコーは「正常に編集されました」。

しかし、すべての詳細ではなく電子メールのみを編集しようとすると、「ユーザー名の値」が既に存在するというエラーメッセージが表示されます。

私の質問:私はそれが編集されていない場合、ユーザー名の値をチェックしないようにする方法はありますか?または電子メールの価値?

ありがとうございます!

答えて

0

あなたは、クエリからログインしているユーザーを除外します。ログイン中に、ユーザーIDをセッション変数に保存します。この変数を使用して、クエリがユーザー自身をチェックするのを防ぐことができます。

$sqlu = "SELECT username FROM users WHERE username = ? AND id != '".$_SESSION['user_id']."'"; 
$sqle = "SELECT email FROM users WHERE email = ? AND id != '".$_SESSION['user_id']."'"; 

これで問題は解決します。 More info on session variables

+0

これが助けになりました!私は全くこのように考えなかった。ありがとうございました! –

+0

いいえ問題ありません^^私は助けになることができてうれしい!あなたのプロジェクトの残りの部分で幸運を祈って、私は他の問題に遭遇したら助けてうれしいです。 P.S.私はちょうど用意されたステートメントを使用してそれらのセッション変数を追加するべきであることに気がつきました(私がここで行ったようにそれを連結しません)が、あなたはすでにそれを正しく実装していると仮定しています:) – Jester

+0

そうです。私はPDOの仕事をしています。 –

関連する問題