Хорошо, мне интересно, можно ли улучшить этот код, хранящийся в user_login.php, или если я делаю это неправильно. Я смущен, потому что весь мой скрипт в приложении длинный примерно 30-40 строк, и мне было интересно, не хватает ли я чего-то.Может ли этот скрипт быть улучшен?
Этот скрипт вызывается с вызовом ajax, как и все остальные в моем приложении, за исключением файлов шаблонов.
<?php
# Ignore
if (!defined('APP_ON')) { die('Silence...'); }
# Gets the variables sent
$user_name = post('user_name');
$user_password = extra_crypt(post('user_password'));
# Check if the user exists
if (!user::check($user_name, $user_password)) { template::bad($lang['incorrect_login']); }
# Logging in
$id = user::get_id($user_name, $user_password);
$u = new user($id);
$u->login();
template::good($lang['correct_login']);
?>
Я собираюсь объяснить это:
# Ignore
if (!defined('APP_ON')) { die('Silence...'); }
В основном это проверить, что файл не вызывается непосредственно. Каждый URL-адрес перенаправляется в файл index.php, который управляет URL-адресом (es: www.mysite.com/user/view/id/1) и включает правильный файл. В первых строках этого файла index.php есть define('APP_ON', true);
. Индексный файл также инициализирует приложение, вызывающее некоторый набор функций и некоторые классы.
# Gets the variables sent
$user_name = post('user_name');
$user_password = extra_crypt(post('user_password'));
Функция post()
управлять востановление $ _POST [ 'user_name'] делает некоторые проверки. Функция extra_crypt()
просто шифрует пароль, используя sha1 и пользовательский алгоритм. Я использую подготовленный оператор для sql-запросов, поэтому не беспокойтесь об экранировании пост-переменных.
# Check if the user exists
if (!user::check($user_name, $user_password)) { template::bad($lang['incorrect_login']);
user
класс имеет как статические, так и обычные методы. Для статических не требуется идентификатор, из которого выполняются обычные методы. Например, user::check();
проверяет, существует ли имя пользователя и пароль в базе данных. Класс template
имеет только два статических метода (template::bad()
и template::good()
), которые управляют быстрым диалоговым окном для отправки пользователю без верхнего или нижнего колонтитула. Вместо этого, если вы экземпляр класса $t = new template('user_view')
, шаблон user_view_body.php
называется, и вы можете управлять этой страницей с $t->assign()
, что назначить статический ВАР в шаблон, или с $t->loop()
, которые начинаются петлей и т.д. Наконец $lang
представляет собой массив, имеющий некоторые общие строки в языка, установленного пользователем.
# Logging in
$id = user::get_id($user_name, $user_password);
$u = new user($id);
$u->login();
template::good($lang['correct_login']);
В конце мы имеем фактический логин. Создается класс user
и восстанавливается идентификатор. Пользователь с этим идентификатором входит в систему, и мы возвращаем пользователю сообщение template::good()
. Для любого пояснения напишите комментарий выше.
Спасибо за совет sha1 alghoritm. И я спрашивал, хорошо ли этот код. Нет, если есть какие-либо ошибки. Предположим, что каждый класс и функция, которые вы видите здесь, идеальны ... этот код хорошо написан логически? – Shoe 2010-12-07 16:54:16
Ну, похоже, что это логический поток. Однако, в ответ на ваш комментарий, я не пытаюсь сказать, что мы не можем найти ошибки, я говорю, что, не видя подфункций, трудно сказать, хорошо ли они разработаны или нет. – eykanal 2010-12-07 17:20:43