Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой логин с помощью ajax и mysql 
:(
    Опции темы
gta4kv
Дата 26.11.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Данная статья(если это можно так назвать) посвещается созданию просто системы логинации при помощи
PHP, MySQL, Ajax.

Думаю подробнее тут не скажешь, начнем сразу с кода. smile

Нам понадобится 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 &copy; 2007';" >
        All Rights Reserved &copy; 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 ;


Это мой вариант, как сделаете вы зависит только от количества вашей фантазии. Собственно все готово.

Профи если что не так - поправьте, а остальные задавайте вопросы. smile


© gta4kv


Это сообщение отредактировал(а) gta4kv - 16.6.2015, 11:42

Присоединённый файл ( Кол-во скачиваний: 188 )
Присоединённый файл  jsHttpRequest.zip 11,45 Kb
PM MAIL   Вверх
mikla
Дата 9.12.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



вопрос. как можно все это легко отлаживать ? мне приходилось писать все в лог
--------------------
PM MAIL ICQ Skype   Вверх
Feldmarschall
Дата 11.12.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



А какой смысл делать авторизацию средствами АЯКС, если всё равно зарегистрированный пользователь видит совсем не то, что незарегистрированный? То есть, страницу целиком менять надо будет, что равнозначно перезагрузке при обычной авторизации, без АЯКС.
PM   Вверх
Astraller
Дата 11.12.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 1.8.2007
Где: $Украина[Кры м]->Феодосия

Репутация: 1
Всего: 5



Feldmarschall, а немного развить мысль? smile 
Ведь есть же проекты основанные на Ajax. А так же бывают проекты у которых при логинизации меняется не многое smile


--------------------
A.S.T.R.A.L.L.E.R.: Artificial Synthetic Technician Responsible for Assassination, Logical Learning and Efficient Repair
PM MAIL WWW ICQ   Вверх
skyboy
Дата 11.12.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Feldmarschall @  11.12.2007,  11:14 Найти цитируемый пост)
всё равно зарегистрированный пользователь видит совсем не то, что незарегистрированный?

почему же? на этом вот форуме гость видит почти то же, что и зарегистрированный.
только некоторые функции недоступны.
PM MAIL   Вверх
Topclub
Дата 21.12.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 21.12.2007

Репутация: нет
Всего: нет



А почему после удачного входа отсутвует какое-то привествие, вывод имени пользователя? как это реализовать?
PM MAIL   Вверх
gta4kv
Дата 21.12.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



После setcookie :

Код

 $GLOBALS['_RESULT'] = "Здесь выводите юзеру что хотите.";

PM MAIL   Вверх
NNaarreekk
Дата 10.2.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: нет
Всего: 3



Спасибо, давно ищу что-то подобное!

А ты не мог бы мне в личку написать тот же код но без всяких проверок, a то с Ajax-ом еще не знаком трудно разобратся smile 
PM MAIL WWW   Вверх
boogi
Дата 11.6.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 12.2.2008

Репутация: -2
Всего: -4



"Ваш" код ужасен! Да и вообще все "произведения" Котерова должны быть в /dev/null. А их модификации вообще не существовать.
PM MAIL   Вверх
Nikitozz
Дата 23.6.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 19.9.2007
Где: Москва

Репутация: нет
Всего: 0



Цитата

"Ваш" код ужасен! Да и вообще все "произведения" Котерова должны быть в /dev/null. А их модификации вообще не существовать. 


Так эту статью "Умник" написал ?  smile  smile  smile 

Пора переписывать книги...
PM MAIL WWW   Вверх
gta4kv
Дата 24.6.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Nikitozz, нет статья моя.

Цитата

"Ваш" код ужасен

это он мне мстил

От Котерова здесь тока библиотека jsHTTPRequest
PM MAIL   Вверх
IIaBeJI
Дата 10.7.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.7.2008

Репутация: нет
Всего: нет



Ребят ещё подскажите пожалуйста как сделать вывод: "Добро пожаловать на сайт имя(по логину)"
PM MAIL   Вверх
vitnet
Дата 12.11.2012, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.11.2012

Репутация: нет
Всего: нет



У меня почему то не работает, дальше "Юзер с такими данными не найден. Назад" не проходит  smile 

Это сообщение отредактировал(а) vitnet - 12.11.2012, 01:39
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1353 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.