Система регистрации пользователей на PHP, MySql и jQuery
Сегодня мы сделаем простую и красивую систему регистрации и авторизации пользователей.
Для создания нашей авторизационной формы мы будем использовать sliding jQuery panel. Также вы можете посмотреть, как создать регистрацию в один клик от Google
MySql
Для начала нам необходимо создать таблицу, которая будет хранить записи о регистрациях.
CREATE TABLE `tz_members` ( `id` int(11) NOT NULL auto_increment, `usr` varchar(32) collate utf8_unicode_ci NOT NULL default '', `pass` varchar(32) collate utf8_unicode_ci NOT NULL default '', `email` varchar(255) collate utf8_unicode_ci NOT NULL default '', `regIP` varchar(15) collate utf8_unicode_ci NOT NULL default '', `dt` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `usr` (`usr`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Поле id — auto_increment, это значит, что для каждого нового пользователя автоматически будет назначаться новый id, на единицу больше предыдущего. Поле usr — unique, тем самым у нас не будет двух пользователей с одинаковыми логинами. Также необходимо указать параметры для соединения с базой в файле connect.php.
HTML
Файл index.php. Регистрационная форма:
<!-- Panel -->
<div id="toppanel">
<div id="panel">
<div>
<div>
<h1>The Sliding jQuery Panel</h1>
<h2>A register/login solution</h2>
<p>You are free to use this login and registration system in you sites!</p>
<h2>A Big Thanks</h2>
<p>This tutorial was built on top of <a href="http://web-kreation.com/index.php/tutorials/nice-clean-sliding-login-panel-built-with-jquery" title="Go to site">Web-Kreation</a>'s amazing sliding panel.</p>
</div>
<?php
if(!$_SESSION['id']):
// если не авторизован
?>
<div>
<!-- Login Form -->
<form action="" method="post">
<h1>Member Login</h1>
<?php
if($_SESSION['msg']['login-err'])
{
echo '<div>'.$_SESSION['msg']['login-err'].'</div>';
unset($_SESSION['msg']['login-err']);
// вывод сообщений об ошибках при авторизации
}
?>
<label for="username">Username:</label>
<input type="text" name="username" id="username" value="" size="23" />
<label for="password">Password:</label>
<input type="password" name="password" id="password" size="23" />
<label><input name="rememberMe" id="rememberMe" type="checkbox" checked="checked" value="1" /> Remember me</label>
<div></div>
<input type="submit" name="submit" value="Login" />
</form>
</div>
<div>
<!-- Register Form -->
<form action="" method="post">
<h1>Not a member yet? Sign Up!</h1>
<?php
if($_SESSION['msg']['reg-err'])
{
echo '<div>'.$_SESSION['msg']['reg-err'].'</div>';
unset($_SESSION['msg']['reg-err']);
// вывод ошибок регистрации
}
if($_SESSION['msg']['reg-success'])
{
echo '<div>'.$_SESSION['msg']['reg-success'].'</div>';
unset($_SESSION['msg']['reg-success']);
// сообщение об успешной регистрации
}
?>
<label for="username">Username:</label>
<input type="text" name="username" id="username" value="" size="23" />
<label for="email">Email:</label>
<input type="text" name="email" id="email" size="23" />
<label>A password will be e-mailed to you.</label>
<input type="submit" name="submit" value="Register" />
</form>
</div>
<?php
else:
// если авторизован
?>
<div>
<h1>Members panel</h1>
<p>You can put member-only data here</p>
<a href="registered.php">View a special member page</a>
<p>- or -</p>
<a href="?logoff">Log off</a>
</div>
<div>
</div>
<?php
endif;
?>
</div>
</div> <!-- /login -->
<!-- The tab on top -->
<div>
<ul>
<li> </li>
<li>Hello <?php echo $_SESSION['usr'] ? $_SESSION['usr'] : 'Guest';?>!</li>
<li>|</li>
<li id="toggle">
<a id="open" href="#"><?php echo $_SESSION['id']?'Open Panel':'Log In | Register';?></a>
<a id="close" style="display: none;" href="#">Close Panel</a>
</li>
<li> </li>
</ul>
</div> <!-- / top -->
</div> <!--panel -->
В массиве $_SESSION хранятся данные о сессии. В нашем коде мы проверяем $_SESSION[‘usr’] и $_SESSION[‘id’], если эти переменные заданы, значит посетитель авторизован, что открывает ему доступ к данным, которые недоступны незарегистрированным пользователям. Основное содержание страницы:
<div> <div id="main"> <div> <h1>A Cool Login System</h1> <h2>Easy registration management with PHP & jQuery</h2> </div> <div> <p>This is a ...</p> <div></div> </div> </div>
PHP
Настало время приступить к серверной части нашей системы регистрации.
define('INCLUDE_CHECK',true);
require 'connect.php';
require 'functions.php';
session_name('tzLogin');
// создаем сессию
session_set_cookie_params(2*7*24*60*60);
// время хранения cookie 2 недели
session_start();
if($_SESSION['id'] && !isset($_COOKIE['tzRemember']) && !$_SESSION['rememberMe'])
{
// если авторизован, но не было задано Remember me:
$_SESSION = array();
session_destroy();
// удаляем сессию
}
if(isset($_GET['logoff']))
{
$_SESSION = array();
session_destroy();
header("Location: demo.php");
exit;
}
if($_POST['submit']=='Login')
{
$err = array();
// хранит ошибки
if(!$_POST['username'] || !$_POST['password'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
$_POST['rememberMe'] = (int)$_POST['rememberMe'];
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));
if($row['usr'])
{
// если все правильно
$_SESSION['usr']=$row['usr'];
$_SESSION['id'] = $row['id'];
$_SESSION['rememberMe'] = $_POST['rememberMe'];
setcookie('tzRemember',$_POST['rememberMe']);
}
else $err[]='Wrong username and/or password!';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
// сохраняем сообщение об ошибке
header("Location: demo.php");
exit;
}
Если не задан параметр tzRemember (например, из-за перезапуска браузера) мы удаляем сессию, т.к. пользователь не отметил «Remember me».
else if($_POST['submit']=='Register')
{
$err = array();
if(strlen($_POST['username'])<4 || strlen($_POST['username'])>32)
{
$err[]='Your username must be between 3 and 32 characters!';
}
if(preg_match('/[^a-z0-9\-\_\.]+/i',$_POST['username']))
{
$err[]='Your username contains invalid characters!';
}
if(!checkEmail($_POST['email']))
{
$err[]='Your email is not valid!';
}
if(!count($err))
{
// если нет ошибок
$pass = substr(md5($_SERVER['REMOTE_ADDR'].microtime().rand(1,100000)),0,6);
// Generate a random password
$_POST['email'] = mysql_real_escape_string($_POST['email']);
$_POST['username'] = mysql_real_escape_string($_POST['username']);
mysql_query(" INSERT INTO tz_members(usr,pass,email,regIP,dt)
VALUES(
'".$_POST['username']."',
'".md5($pass)."',
'".$_POST['email']."',
'".$_SERVER['REMOTE_ADDR']."',
NOW()
)");
if(mysql_affected_rows($link)==1)
{
send_mail( 'demo-test@example.com',
$_POST['email'],
'Registration System Demo - Your New Password',
'Your password is: '.$pass);
$_SESSION['msg']['reg-success']='We sent you an email with your new password!';
}
else $err[]='This username is already taken!';
}
if(count($err))
{
$_SESSION['msg']['reg-err'] = implode('<br />',$err);
}
header("Location: demo.php");
exit;
}
$script = '';
if($_SESSION['msg'])
{
// показываем авторизационную форму.
$script = '
<script type="text/javascript">
$(function(){
$("div#panel").show();
$("#toggle a").toggle();
});
</script>';
}
Мы храним ошибки в массиве сессии, это позволит нам использовать их даже после редиректа.
CSS
Код css для формы доступен в исходниках. Код страницы:
body,h1,h2,h3,p,quote,small,form,input,ul,li,ol,label{
/* The reset rules */
margin:0px;
padding:0px;
}
body{
color:#555555;
font-size:13px;
background: #eeeeee;
font-family:Arial, Helvetica, sans-serif;
width: 100%;
}
h1{
font-size:28px;
font-weight:bold;
font-family:"Trebuchet MS",Arial, Helvetica, sans-serif;
letter-spacing:1px;
}
h2{
font-family:"Arial Narrow",Arial,Helvetica,sans-serif;
font-size:10px;
font-weight:normal;
letter-spacing:1px;
padding-left:2px;
text-transform:uppercase;
white-space:nowrap;
margin-top:4px;
color:#888888;
}
#main p{
padding-bottom:8px;
}
.clear{
clear:both;
}
#main{
width:800px;
/* Centering it in the middle of the page */
margin:60px auto;
}
.container{
margin-top:20px;
background:#FFFFFF;
border:1px solid #E0E0E0;
padding:15px;
/* Rounded corners */
-moz-border-radius:20px;
-khtml-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius:20px;
}
.err{
color:red;
}
.success{
color:#00CC00;
}
a, a:visited {
color:#00BBFF;
text-decoration:none;
outline:none;
}
a:hover{
text-decoration:underline;
}
.tutorial-info{
text-align:center;
padding:10px;
}
jQuery
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <!-- PNG FIX for IE6 --> <!-- http://24ways.org/2007/supersleight-transparent-png-in-ie6 --> <!--[if lte IE 6]> <script type="text/javascript" src="login_panel/js/pngfix/supersleight-min.js"></script> <![endif]--> <script src="login_panel/js/slide.js" type="text/javascript"></script> <?php echo $script; ?>
Наша система регистрации готова!







У вас ошибка в файлах. В исходниках вместо demo.php файл называется index.php, в результате система не работает. Новичкам будет сложно разобраться в этом.
Здравствуйте!
Странности и у вас в коде творятся, где есть проверка на существование переменной, где нет.
не работает, пишет что ник уже занят