Как предотвратить повторяющиеся имена пользователей в php / mysql - PullRequest
0 голосов
/ 07 марта 2012

(это моя первая попытка с php)

У меня есть очень простая страница регистрации.http://graves -incorporated.com / test_sites / member_test / register / register.php

* Я только что вспомнил, что код PHP не отображается в исходном коде, поэтомувот оно:

enter code here
<?php
include('connection.php');

if(isset($_POST['form'])){
    if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['conf_pass']) || empty($_POST['email'])){
        echo '<b>Please fill out all fields.</b>';

    }elseif($_POST['password'] != $_POST['conf_pass']){
        echo '<b>Your Passwords do not match.</b>';
    }else{
        $url = 'http://graves-incorporated.com/test_sites/plantation_park_2012/';
        echo '<META HTTP-EQUIV=Refresh CONTENT="2; URL='.$url.'">';
        echo '<b>Congrats, You are now Registered.</b>';
        mysql_query("INSERT INTO users VALUES(NULL, '$_POST[username]', '$_POST[password]', '$_POST[email]')");     
    }
}
?>

Я хочу убедиться, что я не получаю дубликаты пользователей и / или адреса электронной почты в базе данных.Я установил уникальный ключ в MySQL для имени пользователя и электронной почты, что предотвращает его, но пользователь, находящийся в настоящей форме, не знает об этом, он все равно говорит им: «Поздравляю, вы зарегистрированы» или что-то еще сказано ... ха-ха

Так что я могу добавить к php-коду (и где в коде), чтобы это предотвратить?

Спасибо за помощь этому главному новичку, Дэн Грейвс

Ответы [ 4 ]

5 голосов
/ 07 марта 2012
<?php
include('connection.php');

if(isset($_POST['form'])){
    if(empty($_POST['username']) || empty($_POST['password']) || empty($_POST['conf_pass']) || empty($_POST['email'])){
        echo '<b>Please fill out all fields.</b>';

    }elseif($_POST['password'] != $_POST['conf_pass']){
        echo '<b>Your Passwords do not match.</b>';
    }else{

        $dup = mysql_query("SELECT username FROM users WHERE username='".$_POST['username']."'");
        if(mysql_num_rows($dup) >0){
            echo '<b>username Already Used.</b>';
        }
        else{
            $url = 'http://graves-incorporated.com/test_sites/plantation_park_2012/';
            echo '<META HTTP-EQUIV=Refresh CONTENT="2; URL='.$url.'">';

            $sql = mysql_query("INSERT INTO users VALUES(NULL, '$_POST[username]', '$_POST[password]', '$_POST[email]')");     
            if($sql){
                 echo '<b>Congrats, You are now Registered.</b>';
            }
            else{
                echo '<b>Error Registeration.</b>';
            }
        }
    }
}
?>
1 голос
/ 07 марта 2012

С точки зрения пользовательского интерфейса, я думаю, было бы замечательно, если бы у них была возможность проверить с помощью ajax-запроса, существует ли имя пользователя в БД или нет, что-то вроде проверки доступности.

Это также сэкономит вам время процессора, если вы изолируете процесс проверки доступности имени пользователя, а не обрабатываете все просто, чтобы выяснить, что имя пользователя недоступно.

Чтобы сделать это через jquery, я бы порекомендовал:

$('#checkAvailabilityButton').click(function() {
    var usernameVal = $('#usernameField').val(); // assuming this is a input text field
    $.post('checkusername.php', {username=usernameVal}, function(data) {
        alert('data');
    });
});

И на вашем php-сервере запустите запрос к вашей базе данных, который будет выглядеть так:

"SELECT Username FROM users WHERE Username = 'POSTVALUE'"

if (mysql_num_rows > 0) {
    echo "Username is taken"
}

Также будьте очень и очень осторожны, чтобы не допустить неанализованных переменных записей в вашу базу данных для предотвращения SQL-инъекций.

Наконец, попробуйте использовать более качественное расширение базы данных PHP, такое как MySQLi, большинство запросов STMT автоматически очищают переменные с помощью mysqli_prepare.

Удачи!

1 голос
/ 07 марта 2012

Какой драйвер БД вы используете?Вы ищете ошибки БД?Некоторые из них просто благополучно преодолевают любые ошибки БД, и вам нужно специально вызывать функцию для проверки ошибок БД.Ваша БД должна выдать ошибку на дубликаты данных, и вы можете поднять эту ошибку и предупредить пользователя.

0 голосов
/ 07 марта 2012

Вы можете использовать ajax-запрос перед отправкой, чтобы проверить / предотвратить уже существует Также в бэк-энде после выполнения INSERT INTO ... вы можете выполнить SELECT FOUND_ROWS (), чтобы проверить, действительно ли он равен 1, это означает, что вставлена ​​одна строка. Затем перенаправьте пользователя на страницу с информацией о том, что не правильно. Для лучшего пользовательского опыта я рекомендую первый вариант, с JQuery это не займет много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...