Ошибка проверки регистрации php.

1

Я очень новичок в 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;
  • 1
    Вы, вероятно, должны использовать другой маршрут для обновления деталей и оставить это нетронутым. Кроме того, пользователь должен иметь возможность обновляться, только если он / она вошел в систему.
Теги:

2 ответа

0

Похоже, он отображает "Эта электронная почта уже используется". но обновляет поля

Линия

if (mysqli_num_rows($r) > 0)
{
    $message = '<p class="alert alert-danger">This Email is already used.</p>';
}

Делает сообщения, если почта уже существует. У вас есть 2, чтобы удалить сообщение.

  1. добавьте следующее условие:

,

if (isset($_POST['id']) &&  $_POST['id'] != '' && mysqli_num_rows($r) > 0 )
                    {
    $message = '<p class="alert alert-danger">This Email is already used.</p>';
}
  1. удалите сообщение, если вы обновите его пользователем:

,

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 разных теста. (как я исправил в своем втором решении)

0

Ваше условие: if(isset($_POST['id']) но в вашем запросе UPDATE используется WHERE id = $_GET[id].

Поэтому создается новая запись, которая конфликтует с уникальностью вашего поля электронной почты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню