[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация на сайте. Обработчик
Xsoo
Я уже 2,5 часа мучаюсь над этим кодом, и нифига не получается.... Решил обратиться на свой любимый форум))
<?php
include_once '../code/db_connect.php';
if (!empty($_POST['login']) && !empty($_POST['pass']) && $_POST['button'] == 1) {
$login = $_POST['login'];
$pass = $_POST['pass'];
$login = htmlspecialchars($login);
$pass = htmlspecialchars($pass);
$login = trim($login);
$pass = trim($pass);
$pass = md5($pass);
$result = mysql_query("SELECT * FROM `users` WHERE `login` = ".$login." AND `pass` = ".$pass."", $db);
if ($result == true) {
if (mysql_num_rows($result) > 0) {
$myrow = mysql_fetch_assoc($result);
$_SESSION['login'] = $myrow['login'];
$_SESSION['pass'] = $myrow['pass'];
header ("Location:../userprofile.php");
}

else {
echo "There is no such user in our database";}
}


else {
echo "Can't connect the database...";
}

}


else {
echo "You didn't write all! Return and write, please.";
}

?>

Вот. При работе скрипт не выводит вообще ничего......



Спустя 6 минут, 17 секунд (2.06.2011 - 17:50) sharki написал(а):
Проанализируй итоговый код

include_once '../code/db_connect.php';
if (!empty($_POST['login']) && !empty($_POST['pass']) && $_POST['button'] == 1) {
$login = $_POST['login'];
$pass = $_POST['pass'];
$login = trim($login);
$pass = trim($pass);
$pass = md5($pass);
$result = mysql_query("SELECT *
FROM `users`
WHERE `login` = '"
.mysql_real_escape_string($login)."'
AND `pass` = '"
.mysql_real_escape_string($pass)."'",
$db);
if (mysql_num_rows($result)) {
$myrow = mysql_fetch_assoc($result);
$_SESSION['login'] = $myrow['login'];
$_SESSION['pass'] = $myrow['pass'];
header ("Location:../userprofile.php");
}
else {
echo "There is no such user in our database";
}

}

else {
echo "You didn't write all! Return and write, please.";
}

Спустя 1 минута, 3 секунды (2.06.2011 - 17:51) sharki написал(а):
И еще, настрой свой редактор так, чтобы ВМЕСТО ТАБУЛЯЦИИ ОН СТАВИЛ 4 ПРОБЕЛА!! видишь какой неровный код

Спустя 3 минуты, 45 секунд (2.06.2011 - 17:55) Xsoo написал(а):
"You didn't write all! Return and write, please." - Нет какого-то еще варианта?
Ps - Сделал. Согласен, чище выглядит

Спустя 1 минута, 20 секунд (2.06.2011 - 17:56) sharki написал(а):
Xsoo
if ($result == true) { данная проверка лишняя

И еще там кое-что изменилось, из-за этого и не работал код

Спустя 37 секунд (2.06.2011 - 17:57) denash написал(а):
Покажи файл include_once '../code/db_connect.php';

Спустя 4 минуты, 34 секунды (2.06.2011 - 18:01) Xsoo написал(а):
<?php
$db = mysql_connect ("Localhost", "xsoo", "zZFVGUbCrVaBNEK5");
mysql_select_db ("internet", $db);

mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
?>

Спустя 4 минуты, 15 секунд (2.06.2011 - 18:06) sharki написал(а):
denash
У него проблема была в кавычках =)

Спустя 3 минуты, 22 секунды (2.06.2011 - 18:09) Xsoo написал(а):
Неа, по-моему что-то другое... Все равно результат - "я ничего не ввел", хотя введено все..

Спустя 2 минуты, 25 секунд (2.06.2011 - 18:11) sharki написал(а):
Xsoo
Убери с первого условия вот это && $_POST['button'] == 1

Спустя 1 минута, 17 секунд (2.06.2011 - 18:13) denash написал(а):
Цитата (sharki @ 2.06.2011 - 15:06)
denash
У него проблема была в кавычках =)

Не вижу, покажи этот участок кода, где именно

Спустя 2 минуты, 5 секунд (2.06.2011 - 18:15) denash написал(а):
Цитата (sharki @ 2.06.2011 - 15:11)
Xsoo
Убери с первого условия вот это && $_POST['button'] == 1

Если я правильно понял, то у него вообще ничего не выводит и не выполняется редирект, так или нет.

Спустя 19 секунд (2.06.2011 - 18:15) sharki написал(а):
`login` = ".$login." AND `pass` = ".$pass."


UP
У него щас все время выводится You didn't write all! Return and write, please

Спустя 4 минуты, 8 секунд (2.06.2011 - 18:19) denash написал(а):
"SELECT * FROM `users` WHERE `login` = ".$login." AND `pass` = ".$pass.""

а нужно так

"SELECT * FROM `users` WHERE `login` = ' ".$login." ' AND `pass` = ' ".$pass." ' "

Спустя 35 секунд (2.06.2011 - 18:20) sharki написал(а):
denash
посмотри второй пост =)

Спустя 1 минута, 7 секунд (2.06.2011 - 18:21) Игорь_Vasinsky написал(а):
намудрил ты конечно dry.gif

Спустя 32 секунды (2.06.2011 - 18:22) Xsoo написал(а):
Проверку убрал, это помогло! Редирект прошел, правда на файле в который перенаправляет код (userprofile.php) вывелись ошибки.... Но их я уже, скорее всего, смогу исправить и сам! СПС ОГРОМНОЕ!!!
Зы. А кавычки, оказывается не при чем...

Спустя 5 минут, 6 секунд (2.06.2011 - 18:27) denash написал(а):
Sharki
Ты на счёт этого && $_POST['button'] == 1 .
А что тут смотреть, если он для того чтобы логин и пароль пробить, делает полную выборку таблицы, и в sql запрос загоняет данные от пользователя не обработанные mysql_real_escape_string (в данном случае нужно было только логин обрабатыввать, пароль бузопасен, так как в md5($pass) не будет ничего опасного для запроса)

Спустя 4 минуты, 15 секунд (2.06.2011 - 18:31) Xsoo написал(а):
Чтож, опыт приходит с годами)) Я вообще за php 1,5 месяца). А на счет mysql_real_escape_string - так я его просто забыл... Помнил, что что-то надо еще, а что именно - вылетело из башки. Щас запишу и привешу на стенку над столом)))

Спустя 1 минута (2.06.2011 - 18:32) denash написал(а):
Цитата (Xsoo @ 2.06.2011 - 15:22)
Проверку убрал, это помогло! Редирект прошел, правда на файле в который перенаправляет код (userprofile.php) вывелись ошибки.... Но их я уже, скорее всего, смогу исправить и сам! СПС ОГРОМНОЕ!!!
Зы. А кавычки, оказывается не при чем...

Кавычки ещё как причём!!!!!

Спустя 22 секунды (2.06.2011 - 18:32) sharki написал(а):
denash
Это для симетрии wink.gif

И плюс я указал тебе на второй пост, т.к я проставил кавычки

Спустя 15 секунд (2.06.2011 - 18:33) Xsoo написал(а):
Зы. У меня в таблице все-равно пока-что 3 поля(id, pass, login).

Спустя 31 секунда (2.06.2011 - 18:33) Xsoo написал(а):
Может быть, надо попробовать без них. Опять же, для опыта.

Спустя 1 минута, 21 секунда (2.06.2011 - 18:34) denash написал(а):
У тебя запрос не должен работать без кавычек, так как mysql должен сразу понять, что логин это строка.
ты же не можешь в php оформить строку как
$str=my string;
Ты её оформляешь как $str='my string'; или $str="my string";

Спустя 3 минуты, 14 секунд (2.06.2011 - 18:38) Xsoo написал(а):
Да. Согласен, это серьезно... Только что попробовал без них. Ладно, спасибо всем за помощь!!!!

Спустя 45 секунд (2.06.2011 - 18:38) denash написал(а):
Цитата (sharki @ 2.06.2011 - 15:32)
denash
Это для симетрии  wink.gif

И плюс я указал тебе на второй пост, т.к я проставил кавычки

Да, я потом заметил, просто я очень не внимательный. Пардон! А если честно, я что-то сглючил, я вместо того, чтобы на второй пост посмотреть посмотрел на вторую строку в листенге.

Спустя 1 час, 3 минуты, 3 секунды (2.06.2011 - 19:41) ИНСИ написал(а):
Цитата
Решил обратиться на свой любимый форум))

Нормально :) На форуме всего 20 часов, а уже любимый! :)

Цитата
Проанализируй итоговый код

Я бы сделал чуть по другому, примерно так:
include_once '../code/db_connect.php';
if(isset($_POST['login'],$_POST['pass'])) {

function safesql($source) {
$source = trim($source);
if(get_magic_quotes_gpc()) $source = stripslashes($source);
return mysql_real_escape_string($source);
}

$rows = mysql_query("
SELECT *
FROM `users`
WHERE `login` = '"
.safesql($_POST['login'])."' AND `pass` = '".md5($_POST['pass'])."'
LIMIT 1
"
) or die(mysql_error());

if(mysql_num_rows($rows) > 0) {
$_SESSION['login'] = safesql($_POST['login']);
//$_SESSION['pass'] = $myrow['pass']; - Не надо хранить пароль в сессии

header ('Location: www.mySite.ru/profile.php');
} else {
echo 'There is no such user in our database';
}
}
else {
echo 'You didn\'t write all! Return and write, please.';
}

Спустя 6 минут, 7 секунд (2.06.2011 - 19:48) sharki написал(а):
velbox
Ну это уже оберточки =)

$_SESSION['login'] = safesql($_POST['login']) данная часть кода лишняя, т.к если подделанный логин не прошел бы в БД, то и не прошел бы и в сессию.

if(mysql_num_rows($rows) > 0)
Здесь > 0 лишне, т.к если результата 0 то для IF'a это будет означать FALSE, следовательно условие не пройдет, всё это мелочи, так сказать оптимизация smile.gif


Спустя 2 минуты, 45 секунд (2.06.2011 - 19:50) denash написал(а):
velbox
А вот это уже не мелочи: где session_start();

Спустя 16 минут, 8 секунд (2.06.2011 - 20:06) ИНСИ написал(а):
Цитата
Ну это уже оберточки =)

Не согласен. Ты забыл про волшебные ковычки на сервере + несколько моих заметок:
Цитата
!empty($_POST['pass'])

А что если пароль является числом: 0? Тогда, проверка даст сбой.

Цитата
$login = $_POST['login'];
$pass = $_POST['pass'];
$login = trim($login);
$pass = trim($pass);
$pass = md5($pass);

Зачем делать столько манипуляций? Лучше в запросе это сделать с переменной, то есть обрабатывать данные там, где они используются.
Цитата
if (mysql_num_rows($result)) {

А это что? Функция успешно сработает и вернет true, но проверка будет осуществлена и вернет число 0. Но это неверно, мое мнение, так как нам надо проверить на количество записей.
Цитата
$_SESSION['pass'] = $myrow['pass'];

Зачем в сессии хранить пароль?

Цитата
$_SESSION['login'] = safesql($_POST['login']) данная часть кода лишняя, т.к если подделанный логин не прошел бы в БД, то и не прошел бы и в сессию.

Не совсем понял, что ты имеешь в виду? То, что перед тем как занести в сессию я обрабатываю логин?
Цитата
if(mysql_num_rows($rows) > 0)
Здесь > 0 лишне, т.к если результата 0 то для IF'a это будет означать FALSE,

Чушь

Спустя 3 минуты, 12 секунд (2.06.2011 - 20:10) ИНСИ написал(а):
Цитата
А вот это уже не мелочи: где session_start();

Про это, автор уже сам должен думать. Имею в виду в самом начале файла должен прописывать.

Спустя 3 минуты, 24 секунды (2.06.2011 - 20:13) php-doctor написал(а):
хорошая тема smile.gif

Спустя 53 минуты, 53 секунды (2.06.2011 - 21:07) Xsoo написал(а):
Да уж... Столько дискуссий из-за одного обработчика...

Спустя 6 минут, 42 секунды (2.06.2011 - 21:14) sharki написал(а):
Xsoo
Это всегда так =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.