<?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 - Сделал. Согласен, чище выглядит
Ps - Сделал. Согласен, чище выглядит
Спустя 1 минута, 20 секунд (2.06.2011 - 17:56) sharki написал(а):
Xsoo
if ($result == true) { данная проверка лишняя
И еще там кое-что изменилось, из-за этого и не работал код
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
Убери с первого условия вот это && $_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." ' "
а нужно так
"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 написал(а):
намудрил ты конечно
Спустя 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) не будет ничего опасного для запроса)
Ты на счёт этого && $_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
Это для симетрии
И плюс я указал тебе на второй пост, т.к я проставил кавычки
Это для симетрии
И плюс я указал тебе на второй пост, т.к я проставил кавычки
Спустя 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";
ты же не можешь в 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 Это для симетрии И плюс я указал тебе на второй пост, т.к я проставил кавычки |
Да, я потом заметил, просто я очень не внимательный. Пардон! А если честно, я что-то сглючил, я вместо того, чтобы на второй пост посмотреть посмотрел на вторую строку в листенге.
Спустя 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, следовательно условие не пройдет, всё это мелочи, так сказать оптимизация
Ну это уже оберточки =)
$_SESSION['login'] = safesql($_POST['login']) данная часть кода лишняя, т.к если подделанный логин не прошел бы в БД, то и не прошел бы и в сессию.
if(mysql_num_rows($rows) > 0)
Здесь > 0 лишне, т.к если результата 0 то для IF'a это будет означать FALSE, следовательно условие не пройдет, всё это мелочи, так сказать оптимизация
Спустя 2 минуты, 45 секунд (2.06.2011 - 19:50) denash написал(а):
velbox
А вот это уже не мелочи: где session_start();
А вот это уже не мелочи: где 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 написал(а):
хорошая тема
Спустя 53 минуты, 53 секунды (2.06.2011 - 21:07) Xsoo написал(а):
Да уж... Столько дискуссий из-за одного обработчика...
Спустя 6 минут, 42 секунды (2.06.2011 - 21:14) sharki написал(а):
Xsoo
Это всегда так =)
Это всегда так =)