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; }
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); } }