Личный кабинет. Итоги.
Мы уже сделали систему восстановления пароля. Пустили забывчевого сержанта к своим сокровищам. Но контузия так быстро не проходит, вспомнить пароль не так то просто.
Так что, каждый раз запрашивать новый код?
Мы должны любить и беречь наших юзеров, делать все для их удобства. А для этого нужно дать возможность изменить данные. Все, кроме логина.
Приступим. Сначала сделаем форму личного кабинета.
skins/tpl/register/form_office.tpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<!-- ./skins/tpl/register/form_office.tpl begin --> <h2>Личный кабинет</h2> <div style="text-align:center; background-color:#D5FFF0" > <?php echo getInfo($info); ?> <form action="" method="post"> Логин<br /> <h3><?php echo $data['login']; ?></h3> Пароль<br /> <input name="form[value2]" type="password"><br> Повторите пароль<br /> <input name="form[value3]" type="password"><br> E-mail<br /> <input name="form[value4]" type="text" value="<?php echo $data['email']; ?>"><br /> <br /> <input name="ok" type="submit" value="Обновить"><br /> <br /> </form> </div> <!-- ./skins/tpl/register/form_office.tpl end -->
|
Затем контроллер:
modules/register/office_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<?php
/** * The private office controller * Контроллер личного кабинета. * @author IT studio IRBIS-team * @copyright © 2009 IRBIS-team */ /////////////////////////////////////////////////////////
/** * Generation of page of an error at access out of system * Генерация страницы ошибки при доступе вне системы */ if(!defined('IRB_KEY')) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents('../../404.html')); } //////////////////////////////////////////////////////////
/** * We connect a file of the MySQL functions * Подключаем файл функций MySQL */ include './libs/mysql.php';
/** * Update the data * Обновляем данные */ if($ok) { if(!empty($POST['value2']) && mb_strlen($POST['value2']) < 8) $info[] = 'Маловато будет... Надо 8 символов. Минимум.'; elseif(!empty($POST['value2']) && $POST['value2'] !== $POST['value3']) $info[] = 'Не сходится. Аккуратнее пожалуйста.'; if(empty($POST['value4'])) $info[] = 'Нужен почтовый адрес. Для восстановления пароля.'; elseif(!preg_match("/^[a-z0-9_.-]+@([a-z0-9]+.)+[a-z]{2,6}$/i", $POST['value4'])) $info[] = 'Не верный формат E-mail'; $pass = !empty($POST['value2'])?"`password` = '". md5($POST['value2'] . IRB_SALT) ."', ":NULL; mysqlQuery("UPDATE `". IRB_DBPREFIX ."user` SET ". $pass ." `email` = '". $POST['value4'] ."' WHERE `id` = ". (int)$_SESSION['user_data']['id'] ); if(mysql_affected_rows() > 0) $info[] = 'Учетная запись обновлена'; } /** * Read the data * Читаем данные */ $res = mysqlQuery("SELECT * FROM `". IRB_DBPREFIX ."user` WHERE `id` = ". (int)$_SESSION['user_data']['id'] ); if(mysql_num_rows($res) > 0) $data = htmlChars(mysql_fetch_assoc($res));
|
Добавим шаблон во вьюшку:
modules/register/view.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<?php
/** * View of the module of registration * Отображение модуля регистрации * @author IT studio IRBIS-team * @copyright © 2009 IRBIS-team */ /////////////////////////////////////////////////////////
/** * Generation of page of an error at access out of system * Генерация страницы ошибки при доступе вне системы */ if(!defined('IRB_KEY')) { header("HTTP/1.1 404 Not Found"); exit(file_get_contents('../../404.html')); } ///////////////////////////////////////////////////////////
$POST = htmlChars($POST); $GET['id'] = !empty($GET['id'])?htmlChars($GET['id']):''; /** * The switch of templates * Переключатель шаблонов */
switch($GET['rem']) { case 'registration': include './skins/tpl/register/show.tpl';; break; case 'activate': include './skins/tpl/register/form_activate.tpl'; break; case 'enter': include './skins/tpl/register/form_autorize.tpl'; break; case 'office': include './skins/tpl/register/form_office.tpl'; break; case 'restoration': if(!$error || !empty($GET['id'])) include './skins/tpl/register/form_activate.tpl'; else include './skins/tpl/register/form_restoration.tpl'; break; default: include './skins/tpl/register/form_autorize.tpl'; }
|
и добавим ссылку в главный индекс:
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/** * Link enter-exit * Ссылка вход-выход */ if(!isset($_SESSION['user_data'])) $link_registr = '<a href="'.href('page=register', 'rem=enter') .'">Вход</a>'; else $link_registr = '<a href="'.href('page=register', 'rem=office') .'">Личный кабинет</a> <a href="'.href('page=register', 'rem=exit') .'">Выход</a>';
|
Всё. Теперь можно спать спокойно, ни кто не обидится. Еще последний штришок - редирект из контроллера восстановления пароля нужно сделать прямо в личный кабинет, что бы юзер не забыл сменить пароль:
modules/register/activate_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// Удаляем устаревшие записи $res = mysql_query("DELETE FROM `". IRB_DBPREFIX ."user` WHERE `activate` != 1 AND `date` < NOW() - INTERVAL 10 DAY "); redirect('rem=office', 'id=0'); } else $info[] = 'Не верный код';
|
Теперь для полного счастья нужно вынести все служебные слова в языковой файл и радоваться жизни.
Итоги.
Вообще конечно, это очень простая система регистрации. Но мы и не пытались сделать что то сногсшибательное, совершенно непробиваемое. Тут показаны основные моменты, как нужно обращаться с чужой собственностью. Бережно и аккуратно.
Регистрация - дело индивидуальное, отчасти интимное. В боевом исполнении обычно добавляют свои всевозможные фишки - свой алгоритм шифрования пароля, ограничивают число попыток активации, добавляют капчу, привязывают идентификатор сессии к IP пользователя и много еще всяких тонкостей, которые знать никому не положено.
Это дело фантазии.
Но этот скрипт вполне работоспособный, возможности его модифицировать неограничены. Тем более, если Вы изучали все по порядку, уже должны понимать, как это не сложно.
Немного прояснилась картина, как работает модуль посложнее гостевой книги, дальше мы попробуем залезть в еще большие дебри.
Все по порядку.