Ошибка в проверки

Статус
В этой теме нельзя размещать новые ответы.

sasha14486

Создатель
Регистрация
27 Июл 2008
Сообщения
24
Реакции
0
Вот рабочая авторизация,но в файле проверки check.php происходит ошибка print "Хм, что-то не получилось";
Непойму токо почему она там случается,помогите исправить.

PHP:
login.php

<?
// Страница авторизации


# Функция для генерации случайной строки
function generateCode($length=6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}


# Соединямся с БД
mysql_connect("localhost", "****", "*****");
mysql_select_db("testblog");

if(isset($_POST['submit']))
{
# Вытаскиваем из БД запись, у которой логин равняеться введенному
$query = mysql_query("SELECT user_id, user_password FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
$data = mysql_fetch_assoc($query);

# Соавниваем пароли
if($data['user_password'] === md5(md5($_POST['password'])))
{
# Генерируем случайное число и шифруем его
$hash = md5(generateCode(10));

if(!@$_POST['not_attach_ip'])
{
# Если пользователя выбрал привязку к IP
# Переводим IP в строку
$insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
}

# Записываем в БД новый хеш авторизации и IP
mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");

# Ставим куки
setcookie("id", $data['user_id'], time()+60*60*24*30);
setcookie("hash", $hash, time()+60*60*24*30);

# Переадресовываем браузер на страницу проверки нашего скрипта
header("Location: check.php"); exit();
}
else
{
print "Вы ввели неправильный логин/пароль";
}
}
?>
<form method="POST">
Логин <input name="login" type="text"><br>
Пароль <input name="password" type="password"><br>
Не прикреплять к IP(не безопасно) <input type="checkbox" name="not_attach_ip"><br>
<input name="submit" type="submit" value="Войти">
</form>



check.php

<?
// Скрипт проверки

# Соединямся с БД
mysql_connect("localhost", "****", "****");
mysql_select_db("testblog");

if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{
$query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
$userdata = mysql_fetch_assoc($query);

if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0")))
{
setcookie("id", "", time() - 3600*24*30*12, "/");
setcookie("hash", "", time() - 3600*24*30*12, "/");
print "Хм, что-то не получилось";
}
else
{
print "Привет, ".$userdata['user_login'].". Всё работает!";
}
}
else
{
print "Включите куки";
}
?>

На одном форуме спрашивал,но так ответа некто и не дал,может здесь поможете,буду очень всем благодарен за ответ.;)
 
Тут отлаживать надо вопрос что выводит: $userdata['user_ip'
 
по приведенному вашему коду сложно определить причину.
смотрите что чему не равно и выводите эхом переменные для предварительного просмотра!!!
причина в этом коде:
PHP:
if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0")))
 
В аське же ответил. Если не понятно- можно переспросить)
PHP:
($userdata['user_id'] !== $_COOKIE['id']) лишнее ибо всегда равно
Но Ошибка тут
PHP:
($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])
Почему? Ответ мускула user_ip содержит одну инфу а INET_NTOA(user_ip) совершенно другую

+ Ах, да исправляем говнокод тройные сравнения совернно тут не нужны. При них ещё проверяются типы переменных. Но в коде нет ни одного контроля типов.
PHP:
1==='1' // FALSE
1===(int)'1' // TRUE
1=='1'          // TRUE
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху