Код проверки советы


if (isset($_POST['submit'])) {
    if (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token']) {
        $errors = array();
        $error = 0;

        if (!preg_match('/^[A-Za-z](?=[A-Za-z0-9_.]{3,20}$)[a-zA-Z0-9_]*\.?[a-zA-Z0-9_]*$/i', $_POST['username'])) {
            $errors[] = 'Your username must start with a letter (A-Z) and be between 3-20 characters and may only contain alphanumeric characters (A-Z, 0-9 _ ) or a period (1) (".")';
            $error = 1;
        }

        $STH = $DBH->prepare("SELECT username FROM users WHERE username = ?");
        $STH->execute(array($_POST['username']));

        if ($STH->rowCount() > 0) {
            $errors[] = 'The username is already taken!';
            $error = 1;
        }

        if (strlen($_POST['password']) < 3) {
            $errors[] = 'Your password must be longer than 3 characters!';
            $error = 1;
        } else if ($_POST['password'] != $_POST['passconf']) {
            $errors[] = 'You didn\'t verify your password correctly!';
            $error = 1;
        }

        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
           $errors[] = 'The e-mail is not valid!';
           $error = 1;
        } else {
            $STH = $DBH->prepare("SELECT email FROM users WHERE email = ?");
            $STH->execute(array($_POST['email']));

            if ($STH->rowCount() > 0) {
                $errors[] = 'The email is already taken!';
                $error = 1;
            }
        }
    }
}

Это мои текущие проверки на страницу регистрации, она работает, но я хотел бы улучшить его, дать мне несколько советов



261
2
php
задан 20 ноября 2011 в 11:11 Источник Поделиться
Комментарии
2 ответа

У вас есть две длинные блоки:

if (isset($_POST['submit'])) {
if (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token']) {
...
}
}

Почему бы не объединить их?

if (isset($_POST['submit']) && (isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])) {
...
}

также вы структурирован, вам не нужно $ошибке, чтобы увидеть, если есть ошибки, вы можете просто проверить пустой($ошибки) (правда => хорошо => не ок).

Кроме этого, ваш код выглядит нормально.

1
ответ дан 20 ноября 2011 в 10:11 Источник Поделиться

Я думаю, что правильное регулярное выражение для логина должен быть

if (!preg_match('/^[A-Za-z][A-Za-z0-9_.]{2,19}$/i', $_POST['username'])) {
$errors[] = 'Your username must start with a letter (A-Z) and be between 3-20 characters and may only contain alphanumeric characters (A-Z, 0-9 _ ) or a period (1) (".")';
$error = 1;
}

Редактировать
Я думаю, что нынешний регулярное выражение позволяет более чем 30 писем

0
ответ дан 22 ноября 2011 в 01:11 Источник Поделиться