会員情報編集機能にて、自身のメールアドレスのみ重複エラーから除外させたい

実現したいこと

会員情報リストページの会員編集ページで、会員情報(苗字、名前、email)を編集して更新内容を
会員情報リストページに反映させたいです。
苗字、名前は重複可。 emailのみ重複不可としたい。

発生している問題・分からないこと

編集ページに飛んで、そのまま「変更」を押すと、「すでに登録されているメールアドレスです。」と表示され変更できません。(データベースに1つ以上存在することになっているため)
他の登録済のアドレスは重複エラーを出して、自分のアドレスだけ重複に該当しないよう(スルー)にしたい。
重複チェックはするが、DB上のIDに紐づいているアドレスは除外する、みたいなやり方でしょうか?

該当のソースコード

PHP

1※DB接続完了 2ーーーーーーーーーーーーーーー 3$id= $_GET['id']; 4 5 try{ 6 //$sql = "SELECT * FROM users WHERE id = :id"; 7 $sql= 'SELECT * FROM users WHERE id = :id'; 8 $stmt = $dbh->prepare($sql); 9 $stmt->bindParam(':id', $id); 10 $stmt->execute(); 11 12 } catch (PDOException $e){ 13 echo $e->getMessage(); 14 exit; 15 } 16 17 $row = $stmt->fetch(PDO::FETCH_ASSOC); 18 19 $id = $row['id']; 20 $last_name = $row['last_name']; 21 $first_name = $row['first_name']; 22 $email = $row['email']; 23 24 25 if (!empty($_POST) ){ 26 if ($_POST['email'] == "") { 27 28 $error['email'] = 'blank'; 29 30 }else{ 31 $member = $dbh->prepare('SELECT COUNT(*) AS cnt FROM users WHERE email=?'); 32 $member->execute(array($_POST['email'])); 33 $record = $member->fetch(); 34 35 if ($record['cnt'] > 0 ) { 36 37 $error['email'] = 'duplicate'; 38 } 39 } 40 41 if (!isset($error)){ 42 43 $id = $_POST['id']; 44 $last_name = $_POST['last_name']; 45 $first_name = $_POST['first_name']; 46 $email = $_POST['email']; 47 48 $sql = "UPDATE users SET id=:id, last_name=:last_name, first_name=:first_name, email=:email WHERE id = :id"; 49 $stmt = $dbh->prepare($sql); 50 $stmt->bindParam(':id', $id); 51 $stmt->bindParam(':last_name', $last_name); 52 $stmt->bindParam(':first_name', $first_name); 53 $stmt->bindParam(':email', $email); 54 $stmt->execute(); 55 header('Location: user_list.php'); 56 exit; 57 } 58} 59 60 61 62?> 63<!DOCTYPE html>64<html lang="ja">65 <head>66 <meta charset="UTF=8">67 <link rel="stylesheet" href="henshu_page.css"> 68 <title>編集画面</title>69 <style>70 .error { color: red;font-size:0.8em; }71 </style>72 73 </head>74 <body>75 76 <form action="" method="POST">77 78 <h3>ユーザー編集</h3>79 <a href="user_list.php" class="modoru">[戻る]</a>80 81 <input type="hidden" id="id" name="id" value="<?php echo $id; ?>">82 83 <table style="width: 950px; margin: auto;" valign="middle">84 <tr>85 <th bgcolor="#D3EDFB" height="45" width="180">ID</th>86 <td>87 <?php echo $id;?>88 </td>89 </tr>90 <tr>91 <th bgcolor="#D3EDFB" height="45" width="180" >苗字</th>92 <td><input type="text" class="txt" name="last_name" value="<?php echo $last_name;?>"></td>93 </tr>94 <tr>95 <th bgcolor="#D3EDFB" height="45" width="180">名前</th>96 <td><input type="text" class="txt" name= "first_name" value="<?php echo $first_name;?>"></td>97 </tr>98 <tr>99 <th bgcolor="#D3EDFB" height="45" width="180">メールアドレス</th>100 <td>101 <input type="email" class="txt" name="email" value="<?php echo $email;?>">102 103 <?php if (isset($error['email']) && ($error['email'] == "blank")): ?>104 <p class="error">メールアドレスを入力してください。</p>105 <?php endif; ?>106 107 <?php if (isset($error['email']) && ($error['email'] == "duplicate")): ?>108 <p class="error">すでに登録されているメールアドレスのため、変更できません。</p>109 <?php endif;?>110 111 </td>112 </tr>113 114 <tr>115 <td colspan="2" height="45"><input type="submit" style="width:150px" value="変更する" class="touroku"></td>116 </tr>117 118 </table>119 </form>120 </body>121</html>122

試したこと・調べたこと

上記の詳細・結果

参考となる記事やサイトが出てきませんでした。

補足

初学者で、いろんなサイトを参考にしてここまで書きました。コピペ部分もあるので理解していないまま動いている箇所もあります。
よろしくお願いいたします。

コメントを投稿

0 コメント