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)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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