Kowka_VN
@Kowka_VN

Как правильно проверить данные пользователи для последующего обращения в БД посредством sql запроса?

Нужно в php принять данные от пользователя для вставки в БД, но как грамотно проверить что он ввёл всё корректно,
может есть какой-то шаблон для проверки, так чтоб избежать проблем.
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Во-первых, проверить длину запроса, важно ее ограничить
if (strlen($_POST['name']) > 60) {
// пока-пока!
return false;
}

Во-вторых, проверить все поля регулярными выражениями. Можно просто для каждого поля делать
if (!preg_match("/[0-9a-z]+@[a-z]/", $_POST['email'])) {
   // email не верный, пока-пока!
    return false;
}

Можно намудрить свою функцию, я вот что-то на подобие писал
много кода
public function registerAction()
    {
        if (!empty($_POST))
        {
            if (!$this->model->validate(['email', 'login', 'wallet', 'password'],$_POST))
            {
                $this->view->message('Ошибка', 'error', $this->model->error);
            }
            elseif (!$this->model->checkEmailExists($_POST['email']))
            {
                $this->view->message('Ошибка', 'error', $this->model->error);
            }
            elseif (!$this->model->checkLoginExists($_POST['login']))
            {
                $this->view->message('Ошибка', 'error', $this->model->error);
            }
            elseif (!$this->model->register($_POST))
            {
                $this->view->message('Ошибка', 'error', $this->model->error);
            }
            $this->view->message('Успешно', 'success', "reg OK, check ur email");
        }
        $this->view->render('Регистрация');
    }
//model
public function validate($inputs, $post)
    {
        $rules = [
            'email' => [
                'pattern' => '#^([a-z0-9_.-]{1,20}+)@([a-z0-9_.-]+)\.([a-z\.]{2,10})$#',
                'message' => 'E-mail адрес указан неверно',
            ],
            'login' => [
                'pattern' => '#^[a-z0-9]{3,15}$#',
                'message' => 'Логин указан неверно (разрешены только латинские буквы и цифры от 3 до 15 символов)',
            ],
            'wallet' => [
                'pattern' => '#^[a-z0-9]{3,15}$#',
                'message' => 'Кошелек указан неверно',
            ],
            'password' => [
                'pattern' => '#^[a-z0-9]{6,30}$#',
                'message' => 'Пароль указан неверно (разрешены только латинские буквы и цифры от 6 до 30 символов)',

            ],
        ];

        foreach ($inputs as $val)
        {
            if (!isset($post[$val])
                or
                !preg_match($rules[$val]['pattern'], $post[$val]))
            {
                $this->error = $rules[$val]['message'];
                return false;
            }
        }
        return true;

    }


Ну и под конец при записи в бд не пользоваться стандартными mysqli_query, подставляя переменные в запрос
// !НЕПРАВИЛЬНО!
$query = 'SELECT * FROM accounts WHERE id = '.$_POST['id'];

Мне тут места не хватит что бы все описать для защиты от sql инъекций, поэтому сам гугли, только скажу, что рекомендую pdo.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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