Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Авторизация с помощью AJAX


Автор: supercelt 1.8.2008, 12:28
Не могу разобраться, совсем запутался. Суть такова, что хотел сделать что бы когда входишь на сайт, вместо полей появлялись данные пользователя без перезагрузки страницы. Использовал 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']));
}
?>


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

Смысл в том, что после ввода пароля и логина они появляются в диве, но если перейти на другую стр, то снова появляются поля, хотя сессия есть. 

Автор: Toivonen 1.8.2008, 12:32
Ну вы бы сначала определили,  что именно у вас не получается. Например: уходит ли запрос? ожидаем ли ответ сервера по запросу?

Автор: supercelt 1.8.2008, 12:46
Запрос уходит, нет ответа

Автор: Sanchezzz 1.8.2008, 14:57
/*Ловим данные */

Код

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








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

Автор: bars80080 1.8.2008, 15:59
а каков тип поля user_password ? varchar(?)

Добавлено через 1 минуту и 25 секунд
кстати, смысла нет mysql_escape_string, если используешь md5

Автор: supercelt 1.8.2008, 16:15
с пассвордом разобрался, действительно поле было коротковато. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)