Exemplo n.º 1
0
function register_user($dbh, &$user, &$errors)
{
    $user = array();
    $errors = empty_errors();
    // считываем строки из запроса
    read_string($_POST, 'username', $user, $errors, 2, 64, true);
    read_email($_POST, 'e-mail', $user, $errors, 2, 64, true);
    read_string($_POST, 'password', $user, $errors, 6, 24, true);
    read_string($_POST, 'confirm-password', $user, $errors, 6, 24, true);
    read_list($_POST, 'gender', $user, $errors, array('M', 'F'), false);
    read_bool($_POST, 'newsletter', $user, $errors, '1', false, false);
    // пароль и подтверждение пароля должны совпадать
    if (!is_error($errors, 'password') && !is_error($errors, 'confirm-password') && $user['password'] != $user['confirm-password']) {
        $errors['fields'][] = 'password';
        add_error($errors, 'confirm-password', 'dont-match');
    }
    if (has_errors($errors)) {
        return false;
    }
    // защищаем пароль пользователя
    $user['password'] = crypt($user['password']);
    unset($user['password_confirmation']);
    // форма передана правильно, сохраняем пользователя в базу данных
    $db_user = db_user_insert($dbh, $user);
    // автоматически логиним пользователя после регистрации, запоминая его в сессии
    store_current_user_id($db_user['id']);
    return true;
}
Exemplo n.º 2
0
function read_form($reader)
{
    $token = $reader->peek();
    switch ($token) {
        case '\'':
            $reader->next();
            return _list(_symbol('quote'), read_form($reader));
        case '`':
            $reader->next();
            return _list(_symbol('quasiquote'), read_form($reader));
        case '~':
            $reader->next();
            return _list(_symbol('unquote'), read_form($reader));
        case '~@':
            $reader->next();
            return _list(_symbol('splice-unquote'), read_form($reader));
        case '^':
            $reader->next();
            $meta = read_form($reader);
            return _list(_symbol('with-meta'), read_form($reader), $meta);
        case '@':
            $reader->next();
            return _list(_symbol('deref'), read_form($reader));
        case ')':
            throw new Exception("unexpected ')'");
        case '(':
            return read_list($reader);
        case ']':
            throw new Exception("unexpected ']'");
        case '[':
            return read_list($reader, '_vector', '[', ']');
        case '}':
            throw new Exception("unexpected '}'");
        case '{':
            return read_hash_map($reader);
        default:
            return read_atom($reader);
    }
}