mohovoy
@mohovoy
Что-то там программирую, кто бы знал что именно?

Почему в БД добавляются пустые данные?

Решил как-то сделать регистрацию на PHP, используя ООП. Получилось вроде как хорошо, но когда повторно отправляешь пустую форму, в БД заносится только хэш от функции password_hash, а столбцы username и email остаются пустые. (все поля пустые, а в БД почему-то заноситься хэш)
63bc4ccd09a72084076625.png

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

Класс User
class User extends mysqli {
    public $username, $email, $password;

    function __construct($hn, $un, $pw, $db, $port, $socket, $charset) {
        parent::__construct($hn, $un, $pw, $db, $port, $socket);
        $this->set_charset($charset);
    }

    function hashPasword($pass) {
        return password_hash($pass, PASSWORD_DEFAULT);
    }

    function saveUser() {
        $this->query("INSERT INTO users VALUES (NULL, '" . $this->username . "', '" . $this->email . "', '" . $this->hashPasword($this->password) . "')");
    }

    function printData() {
        echo "Username: " . $this->username . "<br>";
        echo "Email: " . $this->email . "<br>";
        echo "Password: " . $this->hashPasword($this->password) . "<br>";
    }

    function __destruct() {
        $this->close();
    }
}

Файл с регистрацией (кусок PHP)
require_once 'config.php';
require_once 'classes/User.php';
if (isset($_POST['username']) &&
    isset($_POST['email']) &&
    isset($_POST['password'])) {
    $user = new User($hn, $un, $pw, $db, $port, null, $charset);
    $user->username = $_POST['username'];
    $user->email = $_POST['email'];
    $user->password = $_POST['password'];
    $user->saveUser();
}
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Пусты строки - тоже значения. Проверять нужно не только то что они isset, а то что они валидные, т.е., как минимум, имеют длину больше нуля символов
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@PigData
Если не говорить про валидацию как минимум я бы заменил

if (isset($_POST['username']) &&
    isset($_POST['email']) &&
    isset($_POST['password']))


на

if ( $_POST['username'] && $_POST['email'] && $_POST['password'] )


а лучше на

if (trim($_POST['username']) && trim($_POST['email']) && trim($_POST['password']))
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Чтобы не писать много (а про данный вариант решения можно МНОГО написать), перечислю интересные темы, которые будут полезны автору, можно прям выделять и гуглить:

1) Подготовленные выражения
2) Валидация данных в запросах PHP
3) Модели в MVC PHP
4) Реализация PHP паттерна dependency injection container (ну или хотя бы Registry)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы