実現したいこと
会員情報リストページの会員編集ページで、会員情報(苗字、名前、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
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
参考となる記事やサイトが出てきませんでした。
補足
初学者で、いろんなサイトを参考にしてここまで書きました。コピペ部分もあるので理解していないまま動いている箇所もあります。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/04/22 10:08
2024/04/22 11:07
2024/04/23 00:27 編集
2024/04/23 01:34
2024/04/25 08:48
2024/04/25 09:59