Задать вопрос
@VladyaKun1210

Как исправить проблему с созданием регистрации пользователей?

Создаю регистрацию на сайте. Регистрация осуществляется но введенные данные в таблицу базы данных не заносятся.

class Register extends Database{
    public function registration($full_name, $login, $email, $password, $confurm_password){
        $sql = "SELECT * FROM `users` WHERE `login` = '$login' OR `email` = '$email'";
        $dublicate = mysqli_query($this->con, $sql);
        if(mysqli_num_rows($dublicate) > 0){
            return 10;
        }
        else{
            if($password == $confurm_password){
                $query = "INSERT INTO `users` VALUES('', '$full_name', '$login', '$email', '$password')";
                mysqli_query($this->con, $query);
                return 1;
            }
            else{
                return 100;
            }
        }
    }
}

$register = new Register();

if(isset($_POST["submit"])){
    $result = $register->registration(
        $_POST["full_name"],
        $_POST["login"],
        $_POST["email"],
        $_POST["password"],
        $_POST["confurm_password"]
    );
    if($result == 1){
        echo "<script> alert('Registration Successful'); </script>";
    }
    elseif($result == 10){
        echo "<script> alert('Username or Has Already Taken'); </script>";
    }
    elseif($result == 100){
        echo "<script> alert('Password Does Not Match'); </script>";
    }
}
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Это всё просто ужасно. Начиная прямо с первой строчки, class Register extends Database
Делать отдельный класс для регистрации глупо. Если уж делать класс, то для манипуляции юзером в целом, а не одной только регистрации. Плюс, регистрация пользователя - это не база данных. И не должна наследовать классу Database.
По сути, вы хотите натянуть ООП на обычное процедурное программирование. Не надо этого делать, получится самолёт из соломы. Сделайте простую функцию.

Но это ещё цветочки. Остальных проблем тут выше крыши:
  1. Никогда не используйте сокращённый синтаксис INSERT. Всегда надо явно перечислять поля. Это, скорее всего, и является причиной ошибки. Но даже если нет, то проблемы всё равно вылезут в будущем
  2. Собственно сообщение об ошибке нам и надо получить от базы данных, чтобы понять в чем проблема. для этого к коду соединения с БД надо добавить строчку
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    и после этого смотреть сообщение об ошибке
  3. Самое главное - SQL инъекция. Какой смысл делать регистрацию вообще, если любой дурак узнает пароли всех остальных пользователей или сможет авторизоваться вообще без пароля? Запросы надо выполнять только через подготовленные выражения
  4. И по поводу паролей. Пароли надо хранить в фаршированном виде, обработанными функцией password_hash()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FeST1VaL
@FeST1VaL
Тихий
Скорее всего тут ошибка, попробуйте вставить напрямую запрос в БД подставив свои данные и тогда выдаст ошибку. Я просто давно не юзал такой способ вставки да и раньше когда учился, вставлял через INSERT INTO `table` SET `column` = `value`
$query = "INSERT INTO `users` VALUES('', '$full_name', '$login', '$email', '$password')";
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы