Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Авторизовывает всех!!!!


Автор: lari1991 30.11.2009, 17:07
Здравствуйте скажите пожалуйста почему у меня при авторизации всё что впишешь в форму так и будет хотя в базе нет  данных кроме одной??

Автор: skyboy 30.11.2009, 17:43
наверное, стоит посмотреть, какой запрос формируется твоим скриптом перед выполнением(т.е. не просто текстовая константа с частями запроса, а весь запрос уже после подстановки значений переменных)

Автор: lari1991 30.11.2009, 20:25
Вот скрипт авторизации:

Код
<?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>


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

Код

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

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

Код

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

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

 smile 

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

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

Если б я умел..

Автор: Pitlord 1.12.2009, 22:25
Учиться никогда не поздно.

Автор: lari1991 1.12.2009, 22:37
А может вот так:

Код
<?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>


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

Добавлено через 33 секунды
И mysql_num_rows() неправильно применяешь

Автор: lari1991 1.12.2009, 23:10
Ну может так правильно?:
Код


<?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>

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

Автор: lari1991 2.12.2009, 00:11
Цитата(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>

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

Формат SELECT-запроса какой?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)