Данная статья(если это можно так назвать) посвещается созданию просто системы логинации при помощи PHP, MySQL, Ajax.
Думаю подробнее тут не скажешь, начнем сразу с кода. 
Нам понадобится jsHttpRequest(js и пхп файл ( приложил их в аттаче ) ) библиотека от Котерева и прямые руки. Создадим папку "login" на сервере.
Итак для начала создаем нашу форму с логином,
| Код | <!-- index.html --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <title>template{page_title}</title> <script type="text/javascript" src="js/JsHttpRequest.js"></script> <!-- ПУТЬ к jshttprequest библиотеке --> <script type="text/javascript" src="js/siteFunctional.js"></script> <!-- ПУТЬ к нашим функциям --> </head> <body>
<div id="header"> <div id="logo"> <h1><a href="#">Создания логинации ajax mysql</a></h1> </div> <div id="menu"> <ul> </ul> </div> </a> </div>
<div id="page">
<div id="sidebar"> <ul> <li id="login"> <fieldset> <label>Логин:</label> <input type="text" name="login" id="log" /> <br /> <label>Пароль:</label> <input type="password" name="pass" id="ps" /> <br /> <br /> <input type="submit" value="Войти" onclick="doLogin('log', 'ps');" /> <br /> </fieldset> </li> </ul> </div> <div id="content"> Пусто тут :) </div>
<div id="footer"> <p class="legal" id="copyright" onmouseover="this.innerHTML = 'All Rights fucked.';" onmouseout="this.innerHTML = 'All Rights Reserved © 2007';" > All Rights Reserved © 2007 </p> </div>
</body> </html>
<!-- end of index.html -->
|
Это обычная форма, в которой по нажатию кнопки "Войти" происходит функция doLogin, в которою передаются имена;
Дальше сама функция doLogin ( из расчета того что jsHttpRequest.js находится в папка login/js/ )
Теперь файл который мы инклюдили в самом начале, siteFunctional.js
| Код | function doLogin(loginField,passField) { var login = document.getElementById(loginField); var password = document.getElementById(passField); document.getElementById("login").innerHTML = "[здесь вы можете вставить картинку загрузки] думаю..."; JsHttpRequest.query( 'ajaxpage.php', { 'user_l': login.value, 'user_p': password.value }, function(result, errors) { document.getElementById("login").innerHTML = errors; document.getElementById("login").innerHTML = result; } ); }
function showloginfield() { document.getElementById("login").innerHTML = "<fieldset> <label>Логин:</label> <input type='text' name='login' id='log' /> <br /> <label>Пароль:</label><input type='password' name='pass' id='ps' /> <br /> <br /><input type='submit' value='Войти' onclick='doLogin(\"log\", \"ps\");' /> <br /></fieldset> "; }
|
doLogin() - обращается к ajaxpage.php и передает два значения, логин и пароль. showloginfield() - увидите позже.
Дальше сам ajaxpage.php:
| Код | <?php ob_start(); include("JsHttpRequest.php"); // указываем путь к файлу, сам файл в аттаче. $JsHttpRequest =& new JsHttpRequest("windows-1251"); $login = $_POST['user_l']; $password = $_POST['user_p']; sleep(1); mysql_connect('localhost','root', 'spoon'); // ПРАВЬТЕ НА СВОЁ! mysql_select_db('simple_login');
if( $login == "" ) // Если логин пустой - значит возвращаем ошибку! { $GLOBALS['_RESULT'] = ' <span style="color:red;"> Поле логин не может быть пустое. </span> '; $error = 1; // ошибка = да }
if( !preg_match('/[a-zA-Z0-9]/' , $login ) ) // Вы можете править регулярное выражение под себя, в данном случае в логине разрешаются только англиские буквы и цифры { $GLOBALS['_RESULT'] = ' <span style="color:red;">В логине могут использоваться только латинские буквы, цифры, и некоторые символы. </span>'; $error = 1; // ошибка = да }
$login_tmp = mysql_real_escape_string( $login ); // escape'м строчку
if( $login != $login_tmp ) // В общем то эту проверку можно убрать, так, на всякий случай. { $GLOBALS['_RESULT'] = ' <span style="color:red;">В логине использованы запрещенные символы. </span>'; $error = 1; // ошибка = да }
if( $error == 1 ){ // Если есть ошибка(и) добавляем ссылку "назад" $GLOBALS['_RESULT'] .= '<br /> <a href="#" onclick="showloginfield();">Назад</a>'; }
if( $error == 0 ) // если есть ошибки - {
$query = mysql_query(' select f.upassword from users f where f.ulogin = "'.$login.'"'); if( mysql_num_rows( $query ) == 0) // Если результатов нет, значит и логина нет :) { $GLOBALS['_RESULT'] = ' <span style="color:red;"> Юзер с такими данными не найден. </span>'; $GLOBALS['_RESULT'] .= '<br /> <a href="#" onclick="showloginfield();">Назад</a>'; return; // выход } $result = mysql_fetch_array( $query ); // получаем результат $password = md5( $password ); // переводим пароль в md5 if( $password != $result['upasswa'] ) // если введенный пароль не равен паролю в базе, значит ошибка { $GLOBALS['_RESULT'] = ' <span style="color:red;"> Юзер с такими данными не найден. </span>'; $GLOBALS['_RESULT'] .= '<br /> <a href="#" onclick="showloginfield();">Назад</a>'; return; // выход } // если же все хорошо ставим куки setcookie( 'loggined', '1', time()+50000 ); } ob_end_flush(); ?>
|
Во бщем то все постарался закомментировать, здесь как я и обещал используется js функция showloginfiled(), предназначена она для того что бы вернуть пользователю форму логинации без всяких перезагрузок и переходов на другую страницу.
Теперь структура таблицы users:
| Код | CREATE TABLE `zl_users` ( `uid` int(11) NOT NULL auto_increment, `ulogin` text NOT NULL, `uname` varchar(32) NOT NULL, `uemail` varchar(60) NOT NULL, `upasswa` text NOT NULL, `uregdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `uactivate_code` text NOT NULL, `uacc_active` int(11) NOT NULL default '0', `ugroup` int(11) NOT NULL default '1', `upassresets` int(11) NOT NULL default '0', `avatar` text NOT NULL, `ureg_ip` varchar(16) NOT NULL, `uent_ip` varchar(16) NOT NULL, `utempl_selected` varchar(50) default 'default', `ulang_selected` varchar(20) default 'ru', `ugallerys_count` int(11) NOT NULL default '0', `uimages_count` int(11) NOT NULL default '0', PRIMARY KEY (`uid`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
Это мой вариант, как сделаете вы зависит только от количества вашей фантазии. Собственно все готово.
Профи если что не так - поправьте, а остальные задавайте вопросы. 
© gta4kv
|