Главная » 2013 Ноябрь 28 » Создание формы входа с PHP, MySQL и Jquery
21:45 Создание формы входа с PHP, MySQL и Jquery |
Создание формы входа
с PHP, MySQL и Jquery Сегодня мы делаем простую систему Входа /
регистрации. Это даст возможность посетителям войти на ваш сайт и пройти простой
процесс регистрации. Шаг 1 - MySQL Сначала мы должны создать таблицу, которая будет содержать
все регистрационные данные. Этот код доступен в table.sql . table.sql -- -- Table structure for table `tz_members` -- 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; Обратите внимание, что мы определили идентификатор в виде
целого числа с auto_increment - он автоматически назначается
каждому посетителю сайта. Кроме того, мы определили USR
в качестве уникального ключа - нет двух пользователей с одинаковыми
именами. Мы позже используем это в регистрации, чтобы определить, было ли
принято имя пользователя. После создания таблицы, не забудьте заполнить учетные данные
базы данных в connect.php так что вы можете запустить демо на
своем сервере. Шаг 2 - XHTML Во-первых, мы должны включать форму веб-Kreation в нашей странице. demo.php <!-- Panel --> <div id="toppanel"> <div id="panel"> <div class="content clearfix"> <div class="left"> <h1>The Sliding jQuery Panel</h1> <h2>A register/login solution</h2> <p class="grey">You are free to
use this login and registration system in you sites!</p> <h2>A Big Thanks</h2> <p class="grey">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']): // If you are not logged in ?> <div class="left"> <!-- Login Form --> <form class="clearfix"
action="" method="post"> <h1>Member Login</h1> <?php if($_SESSION['msg']['login-err']) { echo
'<div
class="err">'.$_SESSION['msg']['login-err'].'</div>';
unset($_SESSION['msg']['login-err']); //
This will output login errors, if any } ?> <label class="grey"
for="username">Username:</label> <input class="field"
type="text" name="username" id="username"
value="" size="23" /> <label class="grey"
for="password">Password:</label> <input class="field"
type="password" name="password" id="password"
size="23" /> <label><input
name="rememberMe" id="rememberMe" type="checkbox"
checked="checked" value="1" /> Remember
me</label> <div class="clear"></div> <input type="submit"
name="submit" value="Login" class="bt_login"
/> </form> </div> <div class="left right"> <!-- Register Form --> <form action=""
method="post"> <h1>Not a member yet? Sign Up!</h1> <?php if($_SESSION['msg']['reg-err']) { echo
'<div class="err">'.$_SESSION['msg']['reg-err'].'</div>';
unset($_SESSION['msg']['reg-err']); //
This will output the registration errors, if any } if($_SESSION['msg']['reg-success']) { echo
'<div
class="success">'.$_SESSION['msg']['reg-success'].'</div>';
unset($_SESSION['msg']['reg-success']); //
This will output the registration success message } ?> <label class="grey"
for="username">Username:</label> <input class="field"
type="text" name="username" id="username"
value="" size="23" /> <label class="grey"
for="email">Email:</label> <input class="field"
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"
class="bt_register" /> </form> </div> <?php else: // If you are logged in ?> <div class="left"> <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 class="left right"> </div> <?php endif; // Closing the IF-ELSE construct ?> </div> </div> <!-- /login --> <!-- The tab on top --> <div class="tab"> <ul class="login"> <li
class="left"> </li> <li>Hello <?php echo $_SESSION['usr']
? $_SESSION['usr'] : 'Guest';?>!</li> <li class="sep">|</li> <li id="toggle"> <a id="open"
class="open" href="#"><?php echo
$_SESSION['id']?'Open Panel':'Log In | Register';?></a> <a id="close" style="display:
none;" class="close" href="#">Close Panel</a> </li> <li
class="right"> </li> </ul> </div> <!-- / top --> </div> <!--panel --> В нескольких местах в этом коде есть некоторые PHP
операторы, которые проверяют li $ _SESSION ['USR'] или $
_SESSION ['ID'] определены. Это справедливо только если
посетитель страницы регистрируется на сайте, что позволяет нам, показать конкретное
содержание пользователям сайта. <div class="pageContent"> <div id="main"> <div class="container"> <h1>A Cool Login System</h1> <h2>Easy registration management with PHP
& jQuery</h2> </div> <div class="container"> <p>This is a ...</p> <div class="clear"></div> </div> </div> Шаг 3 - PHP Пора преобразовать форму полной регистрации и авторизации
системы. Чтобы добиться этого, нам понадобится больше, чем обычное,
количество PHP. Я разделил код на две части. Если вы планируете добавить больше кода, было бы хорошей
идеей, разбить его на несколько файлов, которые включаются при
необходимости. Это способствует развитию крупных проектов и позволяет
повторное использование кода в разных частях сайта. Но давайте посмотрим, как мы сделали это здесь. demo.php define('INCLUDE_CHECK',true); require 'connect.php'; require 'functions.php'; // Those two files can be included only if
INCLUDE_CHECK is defined session_name('tzLogin'); // Starting the session session_set_cookie_params(2*7*24*60*60); // Making the cookie live for 2 weeks session_start(); if($_SESSION['id'] &&
!isset($_COOKIE['tzRemember']) && !$_SESSION['rememberMe']) { // If
you are logged in, but you don't have the tzRemember cookie (browser restart) //
and you have not checked the rememberMe checkbox:
$_SESSION = array();
session_destroy(); //
Destroy the session } if(isset($_GET['logoff'])) {
$_SESSION = array();
session_destroy();
header("Location: demo.php"); exit; } if($_POST['submit']=='Login') { //
Checking whether the Login form has been submitted $err
= array(); //
Will hold our errors
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'];
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members
WHERE usr='{$_POST['username']}' AND
pass='".md5($_POST['password'])."'"));
if($row['usr']) {
// If everything is OK login
$_SESSION['usr']=$row['usr'];
$_SESSION['id'] = $row['id'];
$_SESSION['rememberMe'] = $_POST['rememberMe'];
// Store some data in the session
setcookie('tzRemember',$_POST['rememberMe']);
// We create the tzRemember cookie }
else $err[]='Wrong username and/or password!'; }
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
// Save the error messages in the session
header("Location: demo.php"); exit; } Здесь tzRemember действует как контроль, должны
ли мы войти в выключения пользователей, которые не отмечены в "запомнить
меня" флажок. Если нет (из-за перезапуска браузера) и посетитель не
проверил опцию Remember Me, мы уничтожаем сессию. Сам сеанс остается в течение двух недель (как
установлено session_set_cookie_params ). Давайте посмотрим, вторую часть demo.php . else if($_POST['submit']=='Register') { // If
the Register form has been submitted $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)) { // If there are no errors
$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']);
// Escape the input data
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@tutorialzine.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']) { // The
script below shows the sliding panel on page load
$script = '
<script type="text/javascript">
$(function(){
$("div#panel").show();
$("#toggle a").toggle(); }); </script>'; } Мы храним все встречающиеся ошибки в ошибаться $ массива,
который позже назначенного на $ _SESSION переменной. Это
позволяет ему быть доступным после перенаправления браузера. Вы могли заметить, на некоторых сайтах, что, когда вы заполнили
форму, а затем обновите страницу, данные передаются снова и снова. Это
может стать проблематичным, поскольку это может привести к двойной регистрации
и ненужной нагрузке на сервер. Мы используем функцию заголовка, чтобы предотвратить это,
путем перенаправления браузера на той же странице. Это будет обновление на
страницы, без браузера, связывающей его с формой входа. Результатом
является то, что, при обновлении страницы, никакие данные не отправляются. Также обратите внимание, как мы создаем дополнительный
скрипт (строки 60-70 из второй части кода PHP), которая показывает панель при
загрузке страницы, так что сообщения могут видеть пользователи. Теперь давайте взглянем на CSS. Шаг 4 - CSS Раздвижная панель поставляется со своей собственной таблицей
стилей. Это означает, что нам осталось создать только стили страницы. файлы demo.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; } Шаг 5 - JQuery Раздвижная панель имеет собственные файлы JQuery. demo.php <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> Сначала мы включаем библиотеку
JQuery от CDN
Google. Позже специальное
исправление для вопросов прозрачности в IE6 PNG и, наконец, сценарий Группы
вход. В нижней части страницы находится переменная $ сценарий -
это показывает панель при загрузке страницы, если это необходимо. Вывод Сегодня мы узнали, как использовать фантастический компонент
формы и превратить его в функциональный Вход / Регистрация. |
|
Всего комментариев: 0 | |