· 7 years ago · Jan 14, 2019, 01:58 PM
1SQL таблица `users` (база `lessons`)
2
3Код
4CREATE TABLE IF NOT EXISTS `users` (
5 `id` bigint(20) NOT NULL AUTO_INCREMENT,
6 `login` char(64) NOT NULL,
7 `password` char(64) NOT NULL,
8 `email` char(64) NOT NULL,
9 `ip` char(20) NOT NULL,
10 `browser` char(255) NOT NULL,
11 `date` datetime NOT NULL,
12 `activation` tinyint(1) NOT NULL,
13 PRIMARY KEY (`id`)
14) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
15
16
17index.php
18
19Код
20<html>
21<head>
22<title>ÐšÐ¾Ñ€Ð½ÐµÐ²Ð°Ñ Ñтраница Ñайта</title>
23<link rel="stylesheet" href="style.css">
24</head>
25<body>
26
27<table class=round width=800 align=center cellspacing=4><tr>
28<td align=center>
29<form action="enter.php" method=POST>
30<input type=text name=login placeholder=Логин >
31<input type=password name=password placeholder=Пароль >
32<input class=button type=submit value=Войти>
33<a href=registration.php>РегиÑтрациÑ</a>
34<a href=passwordrepair.php>ВоÑÑтановить пароль</a>
35</form></td></tr></table>
36
37</body>
38</html>
39
40
41
42registration.php
43
44Код
45<html>
46<head>
47<title>РегиÑтрациÑ</title>
48<script type="text/javascript" src="jquery-1.7.min.js"></script>
49<script type="text/javascript" src="check.js"></script>
50<link rel="stylesheet" href="style.css">
51</head>
52<body onLoad=page_load();>
53
54<table class=round width=800 align=center cellspacing=4>
55<form action="">
56<tr><td valign=top width=50% align=right><input type=text name=login id=login placeholder=Логин onChange=check_login();></td><td><div id=result_login></div></td></tr>
57<tr><td valign=top width=50% align=right><input type=password name=password id=password placeholder=Пароль onChange=check_password();></td><td><div id=result_password></div></td></tr>
58<tr><td valign=top width=50% align=right><input type=text name=email id=email placeholder=Eail onChange=check_email();></td><td><div id=result_email></div></td></tr>
59<tr><td valign=top width=50% align=right><input type=button value=РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ onClick=send();></td><td><div id=result></div></td></tr>
60</form>
61</table>
62
63</body>
64</html>
65
66
67activation.php
68
69Код
70<?php
71include "functions.php"
72?>
73<html>
74<head>
75<title>ÐктивациÑ</title>
76<link rel="stylesheet" href="style.css">
77</head>
78<body>
79
80<table class=round width=800 align=center cellspacing=4>
81<tr><td align=center>
82
83<?php
84//чиÑтим неактивных
85mysql_query("DELETE FROM users WHERE activation='0' AND UNIX_TIMESTAMP()-UNIX_TIMESTAMP(date)>3600");
86//код активации
87if(isset($_GET['code'])) {$code =$_GET['code']; }
88//еÑли не указали code, то выдаем ошибку
89else{
90print "<font color=#ff0000> <small>код активации не обнаружен</small></font>";
91goto_index();
92exit;
93}
94//id,который нужно активировать
95if (isset($_GET[id])) {$id=$_GET[id];}
96//еÑли не указали id, то выдаем ошибку
97else{
98print "<font color=#ff0000> <small>ID Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ обнаружен</small></font>";
99goto_index();
100exit;
101}
102//получаем логин по ID пользователÑ
103$sql = mysql_fetch_array(mysql_query("SELECT id, login FROM users WHERE id='$id'"));
104$activation = md5($id).md5($sql[login]);//Ñоздаем такой же код подтверждениÑ
105//Ñравниваем полученный из url и Ñгенерированный код, еÑли равны, то активируем пользователÑ
106if ($activation==$code){
107mysql_query("UPDATE users SET activation='1' WHERE id='$id'");
108unset($activation);
109print "<font color=#339900> <small>код активации подтвержден</small></font>";
110goto_index();
111exit;
112}
113//еÑли же полученный из url и Ñгенерированный код не равны, то выдаем ошибку
114else {
115print "<font color=#ff0000> <small>код активации не подтвержден</small></font>";
116goto_index();
117exit;
118}
119?>
120</td></tr></table>
121
122</body>
123</html>
124
125
126login.php
127
128Код
129<html>
130<head>
131<title>ÐвторизациÑ</title>
132<script type="text/javascript" src="jquery-1.7.min.js"></script>
133<script type="text/javascript" src="check.js"></script>
134</head>
135<body>
136
137<table>
138<form action="enter.php" method=POST>
139<tr><td><input type=text name=login placeholder=Логин ></td>
140<td><input type=password name=password placeholder=Пароль ></td>
141<td><input class=button type=submit value=Войти></td></tr>
142</form>
143</table>
144
145</body>
146</html>
147
148
149logout.php
150
151Код
152<?
153session_start();
154include "functions.php";
155
156if(!empty($_GET[login])){
157session_unset();
158session_destroy();
159$_SESSION = array();
160goto_index_quick();
161}
162?>
163
164
165main.php
166
167Код
168<?
169session_start();
170include "functions.php";
171?>
172<html>
173<head>
174<title>Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ñтраница</title>
175<script type="text/javascript" src="hideshow.js"></script>
176<link rel="stylesheet" href="style.css">
177</head>
178<body>
179<table class=round width=800px align=center><tr>
180<td valign=top width=50% align=left>
181<?
182if((!empty($_GET[login]))AND(!empty($_SESSION[login]))AND($_GET[login]==$_SESSION[login])){
183print "<font color=#339900> <small>Доброго времени Ñуток </small><b>$_GET[login]</b></font>";
184 $sql = mysql_fetch_array(mysql_query("SELECT activation FROM users WHERE login='$_GET[login]'"));
185 if($sql[activation]==0){
186 print "<font color=#ff0000> <small>ваш аккаунт еще не активирован. Отключаю...</small></font>";
187 goto_index();
188 exit;
189 }
190}
191else{
192print "<font color=#ff0000> <small>логин и/или ÑеÑÑÐ¸Ñ Ð½Ðµ Ñовпадают</small></font>";
193goto_index();
194exit;
195}
196?>
197</td>
198<td valign=top width=50% align=right><a href="logout.php?login=<?print $_SESSION[login];?>">Выход</a></td>
199</tr></table>
200
201</body>
202</html>
203
204
205passwordrepair.php
206
207Код
208<html>
209<head>
210<title>ВоÑÑтановление паролÑ</title>
211<script type="text/javascript" src="jquery-1.7.min.js"></script>
212<script type="text/javascript" src="check.js"></script>
213<link rel="stylesheet" href="style.css">
214</head>
215<body>
216
217<table class=round width=800 align=center cellspacing=4>
218<tr><td align=center>
219<form action="">
220<input type=text class=reg_email name=email id=email placeholder="введите eail указаный при региÑтрации" onChange=test_email();>
221<div id=result_test_email></div>
222</form>
223</td></tr></table>
224
225</body>
226</html>
227
228
229enter.php
230
231Код
232<?
233session_start();
234include "functions.php";
235?>
236<html>
237<head>
238<title>ÐктивациÑ</title>
239<link rel="stylesheet" href="style.css">
240</head>
241<body>
242
243<table class=round width=800 align=center cellspacing=4>
244<tr><td align=center>
245
246<?php
247$password_md = md5($_POST[password]);
248
249if((!empty($_POST[login]))AND(!empty($_POST[password]))){
250$sql = mysql_fetch_array(mysql_query("SELECT login, password FROM users WHERE login='$_POST[login]'"));
251 if(($sql[login]==$_POST[login])AND($sql[password]==$password_md)){
252 //print "<font color=#339900> <small>входим на Ñайт</small></font>";
253 //print "<br><small><font color=#999999>DB логин:</font></small> $sql[login]<br><small><font color=#999999>POST логин:</font></small> $_POST[login]<br><small><font color=#999999>DB пароль:</font></small> $sql[password]<br><small><font color=#999999>POST пароль:</font></small> $password_md";
254 $_SESSION[login]=$_POST[login];
255 goto_main($_POST[login]);
256 }
257 else{
258 print "<font color=#ff0000> <small>логин и пароль не Ñовпадают</small></font>";
259 //print "<br><small><font color=#999999>DB логин:</font></small> $sql[login]<br><small><font color=#999999>POST логин:</font></small> $_POST[login]<br><small><font color=#999999>DB пароль:</font></small> $sql[password]<br><small><font color=#999999>POST пароль:</font></small> $password_md";
260 goto_index();
261 }
262}else goto_index_quick();
263?>
264</td></tr></table>
265
266</body>
267</html>
268
269
270check.php
271
272Код
273<?
274session_start();
275include "functions.php";
276
277//конвертер utf8 в WINDOWS-1251
278$login = iconv("utf-8","windows-1251",$_POST[login]);
279$password = iconv("utf-8","windows-1251",$_POST[password]);
280$email = iconv("utf-8","windows-1251",$_POST[email]);
281
282if(!empty($_POST[test_email])){
283 //проверка Ñреди пользователей
284 $sql = mysql_num_rows(mysql_query("SELECT id FROM users WHERE email='$_POST[test_email]'"));
285 if($sql==0){
286 if($mode==0) print "<font color=#ff0000> <small>eail не найден</small></font>";
287 //$_SESSION[errors]+=1;
288 }
289 else{
290 if($mode==0) print "<font color=#339900> <small>новый пароль отправлен на e-mail</small></font>";
291 //генерируем новый пароль
292 $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
293 $max=10;
294 $size=StrLen($chars)-1;
295 $password=null;
296 while($max--)$password.=$chars[rand(0,$size)];
297 //шифруем и обновлÑем Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ email
298 mysql_query("UPDATE users SET password='".md5($password)."' WHERE email='$_POST[test_email]'");
299 //отправлÑем Ñообщение пользователю
300 send_new_password($password, $_POST[test_email]);
301 goto_index();
302 }
303}
304
305if((!empty($_POST[login]))AND(!empty($_POST[password]))AND(!empty($_POST[email]))){
306check_login($login,1);
307check_password($password,1);
308check_email($email,1);
309
310 if($_SESSION[errors]==0){
311 $sql = mysql_query("INSERT INTO users (login,password,email,ip,browser,date) VALUES ('$login', '".md5($password)."', '$email', '".ip()."', '".browser()."', NOW())");
312 if($sql=='TRUE'){
313 send_activation_code($login, $email);
314 print "<font color=#339900> <small>региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÑпешно завершена!</small></font>";
315 unset($_SESSION[errors]);
316 goto_index();
317 }
318 }
319 else{
320 print "<font color=#ff0000> <small>региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°</small></font>";
321 unset($_SESSION[errors]);
322 }
323}
324else{
325if(!empty($_POST[login]))check_login($login,0);
326if(!empty($_POST[password]))check_password($password,0);
327if(!empty($_POST[email]))check_email($email,0);
328}
329?>
330
331
332functions.php
333
334Код
335<?
336session_start();
337//уÑтанавливаем наÑтройки ÑоединениÑ
338$host=$_SERVER['REMOTE_ADDR'];
339$user='root';
340$login='';
341$base='lessons';
342//подключаемÑÑ Ðº Ñерверу
343$sql = mysql_connect ($host, $user, $login);
344if(!$sql){
345exit('Error'.mysql_error());
346}
347//выбираем БД
348mysql_select_db ($base,$sql);
349if(!mysql_select_db ($base,$sql)){
350exit('Error'.mysql_error());
351}
352//при необходимоÑти уÑтанавливаем кодировку запроÑов cp1251 или utf8
353mysql_query("SET NAMES 'cp1251'");
354//mysql_query("SET NAMES 'utf8'");
355
356//**********************************************************************************************\
357function goto_index()
358{
359 $dir='../lessons/'; //здеÑÑŒ менÑем путь к корневой директории Ñ Ð²Ð°ÑˆÐ¸Ð¼ проектом
360 $ip=$_SERVER['REMOTE_ADDR']; //здеÑÑŒ менÑем ip вашего Ñервера (на Денвере Ñто 127.0.0.1)
361 print "<script>setTimeout('index()', 5000);
362 function index(){
363 location='http://".$ip."/".$dir."';
364 }</script>";
365}
366//**********************************************************************************************\
367function goto_index_quick()
368{
369 $dir='../lessons/'; //здеÑÑŒ менÑем путь к корневой директории Ñ Ð²Ð°ÑˆÐ¸Ð¼ проектом
370 $ip=$_SERVER['REMOTE_ADDR']; //здеÑÑŒ менÑем ip вашего Ñервера (на Денвере Ñто 127.0.0.1)
371 print "<script>setTimeout('index()', 0);
372 function index(){
373 location='http://".$ip."/".$dir."';
374 }</script>";
375}
376//**********************************************************************************************\
377function goto_main($login)
378{
379 $dir='../lessons/'; //здеÑÑŒ менÑем путь к корневой директории Ñ Ð²Ð°ÑˆÐ¸Ð¼ проектом
380 $ip=$_SERVER['REMOTE_ADDR']; //здеÑÑŒ менÑем ip вашего Ñервера (на Денвере Ñто 127.0.0.1)
381 print "<script>setTimeout('index()', 0);
382 function index(){
383 location='http://".$ip."/".$dir."main.php?login=$login';
384 }</script>";
385}
386//**********************************************************************************************\
387function goto_login()
388{
389 $dir='../lessons/'; //здеÑÑŒ менÑем путь к корневой директории Ñ Ð²Ð°ÑˆÐ¸Ð¼ проектом
390 $ip=$_SERVER['REMOTE_ADDR']; //здеÑÑŒ менÑем ip вашего Ñервера (на Денвере Ñто 127.0.0.1)
391 print "<script>setTimeout('index()', 5000);
392 function index(){
393 location='http://".$ip."/".$dir."login.php';
394 }</script>";
395}
396//**********************************************************************************************\
397function check_login($login,$mode)
398{
399//проверка запрещенных Ñимволов
400if(!preg_match("/^[Ð-Яа-Ñ ÐÑ‘ a-zA-Z0-9]+$/",$login)){
401if($mode==0) print "<font color=#ff0000> <small>логин</small> <b>$login</b> <small>Ñодержит запрещенные Ñимволы</small></font>";
402$_SESSION[errors]+=1;
403}
404 else{
405 //проверка количеÑтва Ñимволов
406 if (strlen ($login)<3 || strlen ($login)>20){
407 if($mode==0) print "<font color=#ff0000> <small>логин должен быть от 3 до 20 Ñимволов</small></font>";
408 $_SESSION[errors]+=1;
409 }
410 else{
411 //проверка Ñреди пользователей
412 $sql = mysql_num_rows(mysql_query("SELECT id FROM users WHERE login='$login'"));
413 if($sql!=0){
414 if($mode==0) print "<font color=#ff0000> <small>логин</small> <b>$login</b> <small>занÑÑ‚</small></font>";
415 $_SESSION[errors]+=1;
416 }
417 else{
418 //еÑли вÑе ок, выводим Ñообщение зеленого цвета
419 if($mode==0) print "<font color=#339900> <small>логин</small> <b>$login</b> <small>Ñвободен</small></font>";
420 //$_SESSION[errors]=0;
421 }
422 }
423 }
424}
425//**********************************************************************************************\
426function check_password($password,$mode)
427{
428//проверка количеÑтва Ñимволов
429if (strlen ($password)<8 || strlen ($password)>32){
430if($mode==0) print "<font color=#ff0000> <small>пароль должен быть от 8 до 32 Ñимволов</small></font>";
431$_SESSION[errors]+=1;
432}
433 else{
434 //проверка запрещенных Ñимволов
435 if(!preg_match("/^[Ð-Яа-ÑÐÑ‘a-zA-Z0-9]+$/",$password)){
436 if($mode==0) print "<font color=#ff0000> <small>пароль Ñодежит недопуÑтимые Ñимволы</small></font>";
437 $_SESSION[errors]+=1;
438 }
439 else{
440 //еÑли вÑе ок, выводим Ñообщение зеленого цвета
441 if($mode==0) print "<font color=#339900> <small>пароль корректный</small></font>";
442 //$_SESSION[errors]=0;
443 }
444 }
445}
446//**********************************************************************************************\
447function check_email($email,$mode)
448{
449//проверка eail на валидноÑть
450if(!preg_match('/^[_.0-9a-z-]{1,}@[_.0-9a-z-]{1,}.[_.0-9a-z-]{2,}$/',$email)){
451if($mode==0) print "<font color=#ff0000> <small>e-mail:</small> <b>$email</b> <small>некорректный</small></font>";
452$_SESSION[errors]+=1;
453}
454 else{
455 //проверка Ñреди пользователей
456 $sql = mysql_num_rows(mysql_query("SELECT id FROM users WHERE email='$email'"));
457 if($sql!=0){
458 if($mode==0) print "<font color=#ff0000> <small>пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ e-mail уже зарегиÑтрирован</small></font>";
459 $_SESSION[errors]+=1;
460 }
461 else{
462 //еÑли вÑе ок, выводим Ñообщение зеленого цвета
463 if($mode==0) print "<font color=#339900> <small>e-mail:</small> <b>$email</b> <small>корректный</small></font>";
464 //$_SESSION[errors]=0;
465 }
466 }
467}
468//**********************************************************************************************\
469function ip()
470{
471 $ip = $_SERVER['REMOTE_ADDR'];
472 return $ip;
473}
474//**********************************************************************************************\
475function browser()
476{
477 $browser = strtoupper($_SERVER['HTTP_USER_AGENT']);
478 if (strpos($browser, 'MSIE') !== false) { $browser = 'Internet Explorer';}
479 else if (strpos($browser, 'FIREFOX') !== false){ $browser = 'Firefox'; }
480 else if (strpos($browser, 'KONQUEROR') !== false){ $browser = 'Konqueror'; }
481 else if (strpos($browser, 'LYNX') !== false){ $browser = 'Lynx'; }
482 else { $browser = $_SERVER['HTTP_USER_AGENT']; }
483 return $browser;
484}
485//**********************************************************************************************\
486function send_activation_code($login, $email)
487{
488$sql = mysql_fetch_array(mysql_query ("SELECT id FROM users WHERE login='$login'"));
489 $dir='lessons'; //здеÑÑŒ менÑем название директории Ñ Ð²Ð°ÑˆÐ¸Ð¼ проектом
490 $sender='ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÐŸÑ€Ð¾ÐµÐºÑ‚Ð° localhost'; //здеÑÑŒ менÑем Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ
491 $activation = md5($sql[id]).md5($login);
492 $subject = "Подтверждение региÑтрации";
493 $message = "Доброго времени Ñуток ".$login."! СпаÑибо за региÑтрацию на ".$_SERVER['REMOTE_ADDR']."n
494 Перейдите по ÑÑылке, чтобы активировать ваш аккаунт:nhttp://".$_SERVER['REMOTE_ADDR']."/".$dir."/activation.php?id=".$sql[id]."&code=".$activation."n
495 С уважением,n ".$sender."";
496 mail($email,$subject,$message, "Content-type:text/plain; Charset=windows-1251rn");
497}
498//**********************************************************************************************\
499function send_new_password($password, $email)
500{
501 $dir='lessons'; //здеÑÑŒ менÑем название директории Ñ Ð²Ð°ÑˆÐ¸Ð¼ проектом
502 $sender='ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÐŸÑ€Ð¾ÐµÐºÑ‚Ð° localhost'; //здеÑÑŒ менÑем Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ
503 $subject = "ВоÑÑтановление паролÑ";
504 $message = "Доброго времени Ñуток!n
505 Ваш новый пароль: ".$password."n
506 С уважением,n ".$sender."";
507 mail($email,$subject,$message, "Content-type:text/plain; Charset=windows-1251rn");
508}
509//**********************************************************************************************\
510?>
511
512
513check.js
514
515Код
516function check_login(){
517var login=$("#login").val()
518 $.ajax({
519 type: "POST", url: "check.php", data: {login: login},
520 success: function(html) {
521 $("#result_login").empty();
522 $("#result_login").append(html);
523 }
524 });
525}
526function check_password(){
527var password=$("#password").val()
528 $.ajax({
529 type: "POST", url: "check.php", data: {password: password},
530 success: function(html) {
531 $("#result_password").empty();
532 $("#result_password").append(html);
533 }
534 });
535}
536function check_email(){
537var email=$("#email").val()
538 $.ajax({
539 type: "POST", url: "check.php", data: {email: email},
540 success: function(html) {
541 $("#result_email").empty();
542 $("#result_email").append(html);
543 }
544 });
545}
546function send(){
547var login = $("#login").val()
548var password = $("#password").val()
549var email = $("#email").val()
550 $.ajax({
551 type: "POST", url: "check.php", data: {login: login, password: password, email: email},
552 success: function(html) {
553 $("#result").empty();
554 $("#result").append(html);
555 }
556 });
557}
558function test_email(){
559var email=$("#email").val()
560 $.ajax({
561 type: "POST", url: "check.php", data: {test_email: email},
562 success: function(html) {
563 $("#result_test_email").empty();
564 $("#result_test_email").append(html);
565 }
566 });
567}
568function page_load(){
569document.getElementById('result_login').innerHTML = '<small><font color=Silver>логин должен быть от 3 до 20 Ñимволов</font></small>';
570document.getElementById('result_password').innerHTML = '<small><font color=Silver>пароль должен быть от 8 до 32 Ñимволов</font></small>';
571document.getElementById('result_email').innerHTML = '<small><font color=Silver>eail должен быть рабочим, на него придет код активации</font></small>';
572}
573
574
575style.css
576
577Код
578a:link {color:Blue; text-decoration:none;}
579a:visited {color:Blue; text-decoration:none;}
580a:active {color:Blue; text-decoration:none;}
581a:hover {color:DodgerBlue; text-decoration:none;}
582
583body, table, div {
584font-family: sans-serif;
585font-size: 11pt;
586vertical-align: baseline;
587}
588input {
589backgroundolor: White;
590border-collapse: separate;
591font-family: sans-serif;
592font-size: 9pt;
593vertical-align: baseline;
594border: 1px solid DarkGray;
595border-radius: 4px;
596width: 130px;
597}
598
599.button {
600background-color: White;
601border-collapse: separate;
602font-family: sans-serif;
603font-size: 9pt;
604vertical-align: baseline;
605border: 1px solid DarkGray;
606border-radius: 4px;
607width: 60px;
608}
609.reg_email {
610background-color: White;
611border-collapse: separate;
612font-family: sans-serif;
613font-size: 9pt;
614vertical-align: baseline;
615border: 1px solid DarkGray;
616border-radius: 4px;
617width: 300px;
618}
619.round {
620background-color: GhostWhite;
621border-collapse: separate;
622padding: 8px;
623border: 1px solid DarkGray;
624border-radius: 8px;
625boxadow: inset 0 1px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0,0,0,0.3), 0 0 4px 1px rgba(0,0,0,0.2);