Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизовывает всех!!!! 
V
    Опции темы
lari1991
Дата 30.11.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Здравствуйте скажите пожалуйста почему у меня при авторизации всё что впишешь в форму так и будет хотя в базе нет  данных кроме одной??
PM MAIL   Вверх
skyboy
Дата 30.11.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



наверное, стоит посмотреть, какой запрос формируется твоим скриптом перед выполнением(т.е. не просто текстовая константа с частями запроса, а весь запрос уже после подстановки значений переменных)
PM MAIL   Вверх
lari1991
Дата 30.11.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Вот скрипт авторизации:

Код
<?php
error_reporting(E_ALL);
if(isset($_POST['auth_submit'])) {
$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$login = $_POST['login'];
$pass = $_POST['pass']; 
$query = "SELECT id, login, pass
FROM admin
WHERE login ='{$login}' AND pass='{$pass}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
}
?>
<?php
session_start();
      $_SESSION['user'] = $login;
      mysql_close($db);
      if (isset($_SERVER['HTTP_REFERER'])) {
         header ("location: ".$_SERVER['HTTP_REFERER']);
       header ("location: index.php");
}
?>
<html>
<head>
<title>Авторизация</title>
</head>
</html>



А этот после:

Код
<?
session_start();
if (isset($_SESSION['user'])) {
   $auth = "Привет ".$_SESSION['user']."!\n";
   $auth .= "<a href='logout.php'>Выйти</a>";

$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$result = mysql_query("SELECT * FROM teh",$db);
if ($myrow = mysql_fetch_array($result))
{
echo "<table border=0 width=90% align=center>\n";
echo "<tr><td><i>Имя:</i></td><td><i>Фамилия:</i></td><td><i>E-mail:</i></td><td><i>Сообщение:</i></td></tr>\n";
do
{
printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", $myrow["imia"], $myrow["famil"], $myrow["mail"], $myrow["soob"]);
}
while ($myrow = mysql_fetch_array($result));
echo "</table>\n";
}
else
{
echo "Данных нет!";
}
$docum = "Эта информация только для зарегистрированных";
 }else {
   $auth = <<< AUTH
   <form method="post" action="avt.php">
      <table align="center">
      <tr>
         <td>Логин</td>
         <td><input type="text" name="login"></td>
      </tr>
      <tr>
         <td>Пароль</td>
         <td><input type="password" name="pass"></td>
      </tr>
      <tr>
         <td><input type="submit" name="auth_submit" value="Войти"></td>
      </tr>
      </table>
   </form>
AUTH;
}
?>
<html>
<head>
<title>Администраторская</title>
</head>
<body>
<? echo $auth; ?>
</body>
</html>


PM MAIL   Вверх
NLspieler
Дата 30.11.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: нет
Всего: 19



Ошибка в том, что производится обращение к базе данных, 
после чего переменная $login введенная пользователем, 
без лишних вопросов и проверок заносится в $_SESSION['user'] 

Код

 $_SESSION['user'] = $login;    //Зачем тогда нужно обращение к БД, если логин так и так заносится в сессию?


Это сообщение отредактировал(а) NLspieler - 30.11.2009, 22:13
PM MAIL   Вверх
lari1991
Дата 1.12.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Цитата(NLspieler @ 30.11.2009,  22:09)
Ошибка в том, что производится обращение к базе данных, 
после чего переменная $login введенная пользователем, 
без лишних вопросов и проверок заносится в $_SESSION['user'] 

Код

 $_SESSION['user'] = $login;    //Зачем тогда нужно обращение к БД, если логин так и так заносится в сессию?

А что мне нужно сделать здесь??
Код
$_SESSION['user'] = $login;

 smile 
PM MAIL   Вверх
capitan
Дата 1.12.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 2
Всего: 13



lari1991,  составьте алгоритм работы скрипта на бумажке и увидите что не правильно.
выполнение скрипта не останавливается на блоке if() {}  а идет дальше.
PM MAIL WWW ICQ   Вверх
lari1991
Дата 1.12.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Цитата(capitan @ 1.12.2009,  15:16)
lari1991,  составьте алгоритм работы скрипта на бумажке и увидите что не правильно.
выполнение скрипта не останавливается на блоке if() {}  а идет дальше.

Если б я умел..
PM MAIL   Вверх
Pitlord
Дата 1.12.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Учиться никогда не поздно.
PM MAIL   Вверх
lari1991
Дата 1.12.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



А может вот так:

Код
<?php
error_reporting(E_ALL);
if(isset($_POST['auth_submit'])) {
$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$login = $_POST['login'];
$pass = $_POST['pass']; 
$query = "SELECT id, login, pass
FROM admin
WHERE login ='{$login}' AND pass='{$pass}'
LIMIT 1";
if (mysql_num_rows($query) != 1) {
         mysql_close($db);
die('Такого пользователя нет!');
}
session_start();
      $_SESSION['user'] = $login;
      mysql_close($db);
      if (isset($_SERVER['HTTP_REFERER'])) {
         header ("location: ".$_SERVER['HTTP_REFERER']);
   }else {
       header ("location: index.php");
}
?>
<html>
<head>
<title>Авторизация</title>
</head>
</html>



Это сообщение отредактировал(а) lari1991 - 1.12.2009, 22:45
PM MAIL   Вверх
Pitlord
Дата 1.12.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



А что будет, если не отправлять POST-данные?

Добавлено через 33 секунды
И mysql_num_rows() неправильно применяешь
PM MAIL   Вверх
lari1991
Дата 1.12.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Ну может так правильно?:
Код


<?php
error_reporting(E_ALL);
if(isset($_POST['auth_submit'])) {
$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$login = $_POST['login'];
$pass = $_POST['pass']; 
$res = mysql_query("SELECT FROM admin WHERE login='$login' AND pass='$pass'");
if (mysql_num_rows($res) < 1) {
         mysql_close($db);
         die('Такого пользователя нет!');
}
session_start();
      $_SESSION['user'] = $login;
      mysql_close($db);
      if (isset($_SERVER['HTTP_REFERER'])) {
         header ("location: ".$_SERVER['HTTP_REFERER']);
   }else {
       header ("location: index.php");
}
?>



<html>
<head>
<title>Авторизация</title>
</head>
</html>
PM MAIL   Вверх
Pitlord
Дата 1.12.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



С логикой уже лучше, но вообще тут ещё присутствует SQL-injection
PM MAIL   Вверх
lari1991
Дата 2.12.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 21.11.2009

Репутация: нет
Всего: нет



Цитата(Pitlord @ 1.12.2009,  23:24)
С логикой уже лучше, но вообще тут ещё присутствует SQL-injection

У меня здесь такую ошибку выдаёт:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Такого пользователя нет!
Код



<?php
error_reporting(E_ALL);
if(isset($_POST['auth_submit'])) {
$db = mysql_connect("localhost", "wmggfg_666","666");
mysql_select_db("wmggfg_666");
$login = $_POST['login'];
$pass = $_POST['pass']; 
$res = mysql_query("SELECT FROM admin WHERE login='$login' AND pass='$pass'");
if (mysql_num_rows($res) < 1) {
         mysql_close($db);
         die('Такого пользователя нет!');
}
session_start();
      $_SESSION['user'] = $login;
      mysql_close($db);
      if (isset($_SERVER['HTTP_REFERER'])) {
         header ("location: ".$_SERVER['HTTP_REFERER']);
   }else {
       header ("location: index.php");
   }
}
?>

<html>
<head>
<title>Авторизация</title>
</head>
</html>

Это сообщение отредактировал(а) lari1991 - 2.12.2009, 00:12
PM MAIL   Вверх
Pitlord
Дата 2.12.2009, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: нет
Всего: 7



Цитата(lari1991 @  2.12.2009,  00:11 Найти цитируемый пост)
res = mysql_query("SELECT FROM admin WHERE login='$login' AND pass='$pass'");

Формат SELECT-запроса какой?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.