Я очень новичок в PHP и stackoverflow. Просто попробуйте сделать регистрационную форму с проверкой дублирования электронной почты. Он отлично работает при попытке добавить нового пользователя, но проблема заключается в попытке обновить существующего пользователя. "Он говорит, что почта уже существует". Как я могу ее исправить, т.е. если существующий пользователь пытается обновить свои данные, он не проверяет дублирование. Ниже мой код:
case 'users':
if(isset($_POST['submitted']) == 1) {
$first = mysqli_real_escape_string($dbc, $_POST['first']);
$last = mysqli_real_escape_string($dbc, $_POST['last']);
$email = mysqli_real_escape_string($dbc, $_POST['email']);
if($_POST['password'] == '' OR $_POST['password2'] == '' OR $_POST['password'] != $_POST['password2']) {
$message = '<p class="alert alert-danger">Both password field mus be filled & matching</p>';
} if(strlen($_POST['password'])<6 OR strlen($_POST['password'])>20) {
$message = '<p class="alert alert-danger">Password must be 6 to 20 characters</p>';
}
if ($first =='' OR $last =='') {
$message = '<p class="alert alert-danger">How should we address you ?</p>';
}
$q = "SELECT * FROM users WHERE email = '$email'";
$r = mysqli_query($dbc,$q) or die(mysqli_error());
if (mysqli_num_rows($r) > 0)
{
$message = '<p class="alert alert-danger">This Email is already used.</p>';
}
if (empty($email) OR !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
$message = $message.'<p class="alert alert-danger">Please provide a valid email address </p>';
}
if(isset($_POST['id']) != '') {
$action = 'updated';
$q = "UPDATE users SET first = '$first', last = '$last', email = '$_POST[email]', password = md5(SHA1('$_POST[password]')), status = $_POST[status] WHERE id = $_GET[id]";
$r = mysqli_query($dbc, $q);
} else {
$action = 'added';
$q = "INSERT INTO users (first, last, email, password, status) VALUES ('$first', '$last', '$_POST[email]', md5(SHA1('$_POST[password]')), '$_POST[status]')";
if($message == '') {
$r = mysqli_query($dbc, $q);
}
}
if ($message == '') {
$message = '<p class="alert alert-success">User was '.$action.'!</p>';
}
}
if (isset($_GET['id'])){ $opened = data_user($dbc, $_GET['id']); }
break;
Похоже, он отображает "Эта электронная почта уже используется". но обновляет поля
Линия
if (mysqli_num_rows($r) > 0)
{
$message = '<p class="alert alert-danger">This Email is already used.</p>';
}
Делает сообщения, если почта уже существует. У вас есть 2, чтобы удалить сообщение.
,
if (isset($_POST['id']) && $_POST['id'] != '' && mysqli_num_rows($r) > 0 )
{
$message = '<p class="alert alert-danger">This Email is already used.</p>';
}
,
if(isset($_POST['id']) && $_POST['id'] != '') {
$action = 'updated';
$q = "UPDATE users SET first = '$first', last = '$last', email = '$_POST[email]', password = md5(SHA1('$_POST[password]')), status = $_POST[status] WHERE id = $_GET[id]";
$r = mysqli_query($dbc, $q);
$message = '';
} else {
NB: у вас возникла ошибка в вашем состоянии UPDATE. isset возвращает true или false, поэтому вам нужно выполнить 2 разных теста. (как я исправил в своем втором решении)
Ваше условие: if(isset($_POST['id'])
но в вашем запросе UPDATE используется WHERE id = $_GET[id]
.
Поэтому создается новая запись, которая конфликтует с уникальностью вашего поля электронной почты.