私はユーザーログインシステムを作成し、ユーザーが詳細を更新できるページを持っています。電子メールアドレスとユーザー名は一意である必要があるため、更新フォームに検証を追加しました。ただし、フォームが送信されると、電子メールアドレスがすでに使用中であるというエラーが表示されます。 (セッションに保存されている)現在の電子メールを複製チェックから何とか除外することはできますか?電子メールアドレスが重複していないかを確認して現在のユーザーを除外
これは私のコードですが、それは少し長いですすべてではないとして、私はまた、ユーザ名の同じ妥当性チェック実行する必要があります。私が使用し、各テキストボックスに続いて
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">
あなたはトンです**ユーザーログイン**または**ユーザー登録**ページについての情報は?ユーザーログインでは、ユーザー名が存在しなければなりません。ユーザ登録では、ユーザ名は存在してはいけません(Eメールと同じ)。 – FDavidov