Показать полную графическую версию : JQuery post запрос и PHP
darksmoke
31-10-2009, 17:32
Добрый день.
Ломаю голову уже неделю. Все сил нет, мозг весь съеден.
Как сделать автаризацию? Не могу разделить положительный ответ выданный PHP от ошибки. Т.е. чтобы при положительном ответе пускало в админ панель, а при ошибке выдавала ошибку, мол не правильные логин и пароль или логин может состоять только из латинских букв и знака подчеркивания. И все это без перезагрузки естественно.
имею:
index.php
<!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>Центр авторизации</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#error').hide();
$('#btnSubmit').click(function(){
var name = $('#name').val();
var password = $('#password').val();
if ((name=='')&&(password==''))
{
$('#error').text("Введите ваше имя и пароль");
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
}
else if (name=='')
{
$('#error').text("Введите ваше имя");
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
}
else if (password=='')
{
$('#error').text("Введите пароль");
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
}
else
{
$.ajax({
type: "POST",
url: "test.php",
data: "name="+name+"&password="+password,
success: function(html){
$("#error").append(html);
$("#error").slideDown('slow');
}
});
}
});
});
</script>
</head>
<body>
<div id="error"></div>
<div id="auth">
<span>Центр авторизации</span>
<form action="#" method="post">
<div class="formLine">
<label>Имя:</label><input name="name" type="text" size="20" maxlength="20" id="name"/>
</div>
<div class="formLine">
<label>Пароль:</label><input name="password" type="password" size="20" maxlength="20" id="password"/>
</div>
<div class="formLine">
<input name="btnSubmit" type="button" value="Войти" id="btnSubmit"/>
</div>
</form>
</div>
</body>
</html>
test.php
<?php
include './inc/db_config.inc.php';
if($_POST)
{
$name = addslashes(trim($_POST['name']));
$query = "SELECT * FROM `User` WHERE `name`='".mysql_real_escape_string($name)."' LIMIT 1";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if(!$row<1)
{
print_r($row);
}
else
{
echo 'Fack';
}
}
else
{
echo "net";
}
mysql_close($link);
?>
$name = addslashes(trim($_POST['name'])); »
addslashes не нужен, ибо mysql_real_escape_string (лишние слеши будут)
if(!$row<1) »
$row у вас массив, поэтому это непрокатит. нужно в if или count($row) или $row[0]
$.ajax({
type: "POST",
url: "test.php",
data: "name="+name+"&password="+password,
success: function(html){
$("#error").append(html);
$("#error").slideDown('slow');
}
}); »
данные нужно кодировать функцией encodeURIComponent (если не кодируется - не знаю).
вообще нужно запрос проследить firebug'ом (или подобным софтом), чтобы убедиться каким методом шлется все, ибо я не уверен в строке data: (у вас же проверка на $_POST идет).
у вас же в методе "success:" можно все разрулить (проверять ответ скрипта)...
darksmoke, как это, пускало в админпанель, но без перезагрузки.
Эта самая панель такая маленькая, что её можно встроить в обычную страницу?
darksmoke
03-11-2009, 00:00
Всмысле маленькая - нет не маленькая.
Я имел ввиду, что после того как человек прошел авторизацию, он попал в панель администрирования.
Пример с почтой. Вводишь логин и пароль, и попадаешь на свою почту.
darksmoke
04-11-2009, 17:41
Небыло Интернета, раздуплился в JavaScripte. Но вот как сделать что бы дальше попадал человек в защещенную часть сайта, немогу понять. Помогите! Сил нет!
Вот что получилось:
Index.html
<!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>Центр авторизации</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#error').hide();
$('#btnSubmit').click(function(){
var name = $('#name').val();
var password = $('#password').val();
if ((name=='')&&(password==''))
{
$('#error').text("Введите ваше имя и пароль");
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
return false;
}
else if (name=='')
{
$('#error').text("Введите ваше имя");
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
return false;
}
else if (password=='')
{
$('#error').text("Введите пароль");
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
return false;
}
else
{
$.ajax({
type: "POST",
url: "test1.php",
data: "name="+name+"&password="+password,
success: function(res){
var r = '**';
var a = new Array();
a = res.split(r);
var result = a[0];
var err = a[1];
if(result=='Fuck')
{
$('#error').text('');
$('#error').append(err);
$('#error').fadeIn(("slow"),function(){
setTimeout(function(){
$('#error').fadeOut("slow");
},3000);
});
return false;
}
else
{
var r = '**';
var a = new Array();
a = res.split(r);
var ip = a[0];
var id = a[1];
alert(ip+id);
}
}
});
}
});
});
</script>
</head>
<body>
<div id="error"></div>
<div id="auth">
<span>Центр авторизации</span>
<form action="#" method="post" name="auth">
<div class="formLine">
<label>Имя:</label><input name="name" type="text" size="20" maxlength="14" id="name"/>
</div>
<div class="formLine">
<label>Пароль:</label><input name="password" type="password" size="20" maxlength="14" id="password"/>
</div>
<div class="formLine">
<input name="btnSubmit" type="button" id="btnSubmit" value="Войти"/>
</div>
</form>
</div>
</body>
</html>
test1.php
<?php
include './inc/db_config.inc.php';
if($_POST)
{
$black_list = mysql_query("SELECT * FROM `IP_Black_List` WHERE `ip`='".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."' LIMIT 1");
$row = mysql_fetch_assoc($black_list);
if(!$row || $row['try']<7)
{
//если IP в блэк листе нет или кол-во попыток не больше 7, проверяем логин и пароль.
$user_name = addslashes(htmlspecialchars(substr(trim($_POST['name']),0,14)));
$user_password = addslashes(htmlspecialchars(substr(trim($_POST['password']),0,14)));
$auth = "SELECT * FROM `User` WHERE `name`='".mysql_real_escape_string($user_name)."' AND `password`='".mysql_real_escape_string($user_password)."' LIMIT 1";
$result_auth = mysql_query($auth);
$row_auth = mysql_fetch_assoc($result_auth);
if($row_auth)
{
session_start();
echo $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']. '**' .$_SESSION['id'] = session_id();
mysql_query("DELETE FROM `IP_Black_List` WHERE `ip`='".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."'");
}
else if(!$row)
{
//Авторизацию не прошли. Если такого IP еще нет, записываем в блэк лист
$date = date("Y-m-d");
mysql_query("INSERT INTO `IP_Black_List` (`id`,`ip`,`try`,`date`)VALUES('','".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."','1','".mysql_real_escape_string($date)."')");
echo 'Fuck**Неверное имя или пароль. У вас осталось 6 попыток.';exit;
}
else
{
//Авторизацию не прошли. IP уже есть - добавляем к нему одну попытку
$row['try']++;
mysql_query("UPDATE `IP_Black_List` set `try`='".mysql_real_escape_string($row['try'])."' WHERE (`ip`='".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."')");
switch ($row['try']) {
case 2:$b="5 попыток"; break;
case 3:$b="4 попытки"; break;
case 4:$b="3 попытки"; break;
case 5:$b="2 попытки"; break;
case 6:$b="1 попытка"; break;
case 7:$b="Ваш IP адрес заблокирован"; break;
}
if($row['try']!==7)
{
echo 'Fuck**Не верное имя или пароль. У вас осталось '.$b;
}
else
{
echo 'Fuck**'.$b;
}
}
}
else if($row>6)
{
//Если кол-во попыток больше 7 - баним.
echo 'Fuck**Ваш IP адрес заблокирован'; exit;
}
}
else
{
// Если POST'а небыло - отправляем на авторизацию
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']));
}
mysql_close($link);
?>
Я сделал немного по-другому, потому и спрашивал. Пользователь вводит ник и пароль, если они неправильны - выводится сообщение об ошибке. Если они верны, делается редирект. Потому как движок сайта опирается на куки, сесии и т.д. По мне проще сделать редиректкуда надо, чем разбирать ответ от сервера на клиенте. Хотя может быть это я так сейчас считаю. :)
else if($row>6) »
я же писал, что $row это массив, а в условии у вас как целое число... разберитесь
if(!$row || $row['try']<7) »
$row - у вас это двухмерный массив (массив из других массивов), значит $row['try'] там нету, а есть $row[0]['try']
исправляйте ошибки.
darksmoke
05-11-2009, 10:26
$row - у вас это двухмерный массив (массив из других массивов), значит $row['try'] там нету, а есть $row[0]['try']
исправляйте ошибки. »
Что-то не пойму. сделал echo $row['try'] выводит число которое находится в БД. А если пишу echo $row[0]['try']? то ничего не выводит.
P.S print_r($row); выводит Array ( [id] => 13 [ip] => 127.0.0.1 [try] => 2 [date] => 2009-11-05 )
darksmoke, все правильно, это mysql_query двухмерный отдает, я лажанулся :tomato2: ...
но вот это else if($row>6) » все равно не прокатит...
AND `password`='".mysql_real_escape_string($user_password)."' L »
если пароль хранится в базе в открытом виде, то так не делается, нужно хешировать перед вставкой, еще лучше, с генерацией соли (дополнительная хеш-строка)...
echo $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']. '**' .$_SESSION['id'] = session_id(); »
эта строка вообще непонятная, скорее всего ошибка...
вообще установка сессии через AJAX весьма глючный вариант, особенно для старых браузеров, поэтому кукисы сессии лучше дополнительно ставить в JS (session_name() = session_id()), предварительно проверив установку.
darksmoke
06-11-2009, 12:11
Sham,
поэтому кукисы сессии лучше дополнительно ставить в JS (session_name() = session_id()), предварительно проверив установку. »
А пример можно.. это надо с явоскриптом делать?
echo $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']. '**' .$_SESSION['id'] = session_id(); » »
Это строка возвращает результат в яваскрипт.
А пример можно.. это надо с явоскриптом делать? »
в jQUERY должна быть функция установки кукисов, поищите. Вообще в вашем случае для отправки лучше юзать формат JSON (чтобы слать не строки, а массивы к примеру, и получать уже как массив)...
Это строка возвращает результат в яваскрипт. »
строка всегда будет true возвращать (результат операции присваивания)... имхо перемудрили и ошиблись, иначе объяните для понимания....
darksmoke
08-11-2009, 21:14
Sham,
Ну я думал так: если тру значит что-то произошло и редиректим в админку, в админке проверяем ид сессии, ИП к примеру. Если совпадаетто пускаем, нет - авторизуемся.
А?
if($row_auth)
{
session_start();
echo $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']. '**' .$_SESSION['id'] = session_id();
mysql_query("DELETE FROM `IP_Black_List` WHERE `ip`='".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."'");
} »
зачем echo сразу то? вам же сначала переменную надо определить...
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']. '**' .session_id();
echo $_SESSION['ip'];
и после нужен редирект сделать куда надо. В PHP это header('Location: ...'), а в JS это window.location = URL
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC