Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация с помощью AJAX 
:(
    Опции темы
supercelt
Дата 1.8.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не могу разобраться, совсем запутался. Суть такова, что хотел сделать что бы когда входишь на сайт, вместо полей появлялись данные пользователя без перезагрузки страницы. Использовал JsHttpRequest, но чего-то не получается. Привожу свой код, но может есть какие-нибудь другие логики построения данной задачи, а то я думаю, что моя не годится

Код

<?php
session_start();
echo '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>
<table width="100%" border="1" align="center" cellpadding="1" cellspacing="1">
  <tr>
    <td width="18%" align="center" valign="top">';
    include('login.php');
    echo '</td>
    <td width="82%">some text</td>
  </tr>
</table>
</body>
</html>';

Это главная страница, слева встроен файл в котором люди логинятся



Код

<script type="text/javascript" src="lib/JsHttpRequest/JsHttpRequest.js"></script>
<script type="text/javascript">
function showload(){document.getElementById('ajaxload').style.display = "block"}
function hideload(){document.getElementById('ajaxload').style.display = "none"}
function getID(val){return document.getElementById(val);}

function add_coment(){
var ZNACENIE=document.getElementById('name').value;//login
var PASS=document.getElementById('pass').value;//pass
var req = new JsHttpRequest(); //создаем обьект
//showload()ж
req.onreadystatechange = function() {                
if (req.readyState == 4) {//load complite
//hideload();
getID('result').innerHTML = req.responseJS.otvet; //otvet - это то что мы отправляем из php 
 }
}
req.open('POST', 'login_handler.php', true);// куда отправлять
req.send({action:'add_coment',LOGIN:ZNACENIE, PASSWORD:PASS}); //    LOGIN & PASSWORD будешь ловить в php 
 
document.getElementById('result').style.display="block"; 
document.getElementById('forma').style.display="none";     
}

</script>
<?php
//login
if(isset($_SESSION['user']))
{
  $q='SELECT * FROM `users` WHERE `user_login="'.$_SESSION['user'].'" LIMIT 1';
  $f=mysql_query($q);
  if(mysql_num_rows($f))
  {
  $res=mysql_fetch_array($f);
  }
}
else
{
echo '
<div id="forma">
<form id="form1" name="form1" method="post" action="">
<input type="text" name="login" id="name" /><br />
<input type="password" name="password" id="pass" />
</form>
<input type="button" value="Enter" onclick="add_coment()" />
<br /></div>';
}
echo '<div id="result">'.$res['user_login'].'<br />'.$res['user_name'].'</div>';
?>

Это сам файл логина


Код

<?php
@session_start();
require_once('lib/JsHttpRequest/JsHttpRequest.php'); //подклучаем файл
$Js = new JsHttpRequest('windows-1251'); //кодировка ответов UTF-8

/*Ловим данные */
if($_REQUEST['action']=="add_coment")
{
$q='SELECT * FROM `ajax` WHERE `user_login="'.mysql_escape_string($_POST['LOGIN']).'" AND user_password="'.mysql_escape_string(md5($_POST['PASSWORD'])).'" LIMIT 1';
$f=mysql_query($q);
if(mysql_num_rows($f))
{
$_SESSION['user']=mysql_escape_string($_POST['LOGIN']);
}
// тут твой код добавления в БД или куда тебе нужно...
//далее тебе нужно прочитать все данные заново и вывести их
//готовим ответ 
$GLOBALS['_RESULT']['otvet']=mysql_escape_string($_POST['LOGIN']).'<br />'.mysql_escape_string(md5($_POST['PASSWORD']));
}
?>


А это обработчик логина

Смысл в том, что после ввода пароля и логина они появляются в диве, но если перейти на другую стр, то снова появляются поля, хотя сессия есть. 
PM   Вверх
Toivonen
Дата 1.8.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну вы бы сначала определили,  что именно у вас не получается. Например: уходит ли запрос? ожидаем ли ответ сервера по запросу?
PM   Вверх
supercelt
Дата 1.8.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Запрос уходит, нет ответа
PM   Вверх
Sanchezzz
  Дата 1.8.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



/*Ловим данные */

Код

if($_REQUEST['action']=="add_coment")
{


$q='SELECT * FROM `ajax` WHERE `user_login="'.mysql_escape_string($_POST['LOGIN']).'" AND user_password="'.mysql_escape_string(md5($_POST['PASSWORD'])).'" LIMIT 1';
$f=mysql_query($q);
if(mysql_num_rows($f)==1){

//тут отсылаешь что такой пользователь есть
$_SESSION['user']=mysql_escape_string($_POST['LOGIN']);

//вот это ты отсылаешь назад
$GLOBALS['_RESULT']['otvet']=$_REQUEST['LOGIN']."<br> ".$_REQUEST['PASSWORD'];
}

}


1 поверь запрос и MD5 пользуйся в mySQl, скрипт будет быстрей работать.
2 JsHttpRequest есть отладчик PHP который может перехватывать php ошибки в JS req.errors покажет ошибки про отладчики на сайте JsHttpRequest










--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
supercelt
Дата 1.8.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Sanchezzz, запрос проверил была ошибка синтаксиса, но это не повлияло. Появилась другая проблема. Вот когда я регю пользователя в базе. $pass=mysql_escape_string(md5($_POST('password')));, тут всё понятно. И тащу данные из базы для сравнения так же WHERE `user_password`="'.mysql_escape_string(md5($_POST['password'])).'"/ короче почему-то хэш получается разный и сравнение не идёт.
Вот хэш при реге - 03e0704b5690a2dee186
А вот от авторизации - 03e0704b5690a2dee1861dc3ad3316c9
Что-то почему-то туда добавляется, не знаю что.
И ещё вопрос, а как мд5 использовать в мускуле?
PM   Вверх
bars80080
Дата 1.8.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



а каков тип поля user_password ? varchar(?)

Добавлено через 1 минуту и 25 секунд
кстати, смысла нет mysql_escape_string, если используешь md5
PM MAIL WWW   Вверх
supercelt
Дата 1.8.2008, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



с пассвордом разобрался, действительно поле было коротковато. 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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