Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрипт не правильно проверяет логин/пароль из базы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
foozzi
Отправлено: 02 Декабря, 2011 - 00:02:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




Вот скрипт
PHP:
скопировать код в буфер обмена
  1. <?
  2. if(!isset($_POST['submit']))
  3. {
  4.         echo "<center><form action='./login.php' method=post>
  5.         <table width=200 border=1>
  6.         <tr height=30><td width=50 valign=center align=center><b>Login:</b></td><td width=50 valign=center align=center><input type=text name=login size=10></td></tr>
  7.         <tr height=30><td width=50 valign=center align=center><b>Password:</b></td><td width=50 valign=center align=center><input type=password name=pass size=10></td></tr>
  8.         </table><br>
  9.         <input type=submit name=submit value=Войти> <input type=reset value=Очистить></form>
  10.         </center>";
  11. }
  12. else
  13. {
  14.         $_POST['pass'] = md5($_POST['pass']);
  15.         $_POST['login'] = mysql_escape_string($_POST['login']);
  16.         require_once "../core/config.php";
  17.         $query = mysql_query("SELECT '.PREFIX.'admins WHERE `login` = '$_POST[login]' AND `password` = '$_POST[pass]'");
  18.         if(mysql_num_rows($query)>0)
  19.         {
  20.                 $r = mysql_fetch_array($query);
  21.                 session_start();
  22.                 session_register("admincp");
  23.                 $_SESSION['login'] = $_POST['login'];
  24.                 $_SESSION['status'] = $r['status'];
  25.                 echo "Вход выполнен успешно, сейчас вы будете автоматически перенаправлены на главную страницу.";
  26.                 echo "<meta http-equiv='refresh' content='3; URL=index.php'>"; 
  27.         } else echo "Неверный логин\пароль<br><a href='./login.php'>Назад</a>";
  28. }
  29. ?>


вот что находится в таблице admins


Ввожу все правильно, пишет что не правильно...
в чем я ошибся?


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
CenapaTop
Отправлено: 02 Декабря, 2011 - 00:14:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009  


Помог: 1 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT '.PREFIX.'admins WHERE `login` = '$_POST[login]' AND `password` = '$_POST[pass]

select что?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE ...

(Отредактировано автором: 02 Декабря, 2011 - 00:17:58)

 
 Top
foozzi
Отправлено: 02 Декабря, 2011 - 00:37:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




все равно не пускает


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
etoYA
Отправлено: 02 Декабря, 2011 - 00:49:03
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Вариант 1 - при авторизации не шифруете данные из поле pass

(Отредактировано автором: 02 Декабря, 2011 - 00:50:44)

 
 Top
Panoptik
Отправлено: 02 Декабря, 2011 - 00:54:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




в запросе как уже вам подсказали выше напишите
CODE (PHP):
скопировать код в буфер обмена
  1.  
  2.     mysql_query('SELECT 1 `'.PREFIX.'admins` WHERE `login` = \''.$_POST[login].'\' AND `password` = \''.$_POST[pass].'\'');
  3.  

(Добавление)
кстати хеширование правильно производится? может там еще соль добавлена к мд5?


-----
Just do it
 
 Top
foozzi
Отправлено: 02 Декабря, 2011 - 01:13:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




соли там нет, запрос попробовал выше, тож самое.

вот как созадвал я таблицу
PHP:
скопировать код в буфер обмена
  1. $name = @$_REQUEST['name'];
  2.                 if ($name == '') $name = $login;
  3.                 mysql_query('INSERT INTO '.PREFIX.'admins SET
  4.                    login = "'.$login.'",
  5.                         status = "admin",
  6.                         password = "'.md5($pass).'"')  or die(mysql_error());


собственно вот весь установочник

PHP:
скопировать код в буфер обмена
  1.  
  2. <? require_once("../core/locale.php"); ?>
  3. <?PHP
  4. #### Если файл lock есть, выходим из установки ####
  5. if(is_file('../core/lock'))
  6.         exit($locale['i11']);
  7. ?>
  8. <?PHP
  9. #### Вывод ошибок ####
  10. ini_set('display_errors',1);
  11. #### Функция-инсталлятор ####
  12. function install_gnub() {
  13.         include_once('../core/config.php');
  14.         $shr = mysql_query('SHOW TABLES');
  15.         for ($tables=array(); $row3=mysql_fetch_array($shr); $tables[$row3[0]]=true); // Сотрим таблицы
  16.         if (!isset($tables[PREFIX.'categories']))  //Если таблиц еще не существует
  17.         {
  18. #### Создаем табличку admins ####
  19.   mysql_query ('CREATE TABLE '.PREFIX.'admins (
  20.   id tinyint(4) NOT NULL auto_increment,
  21.   login tinytext NOT NULL,
  22.   password tinytext NOT NULL,
  23.   status enum("admin") NOT NULL,
  24.   PRIMARY KEY  (`id`)
  25. ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 AUTO_INCREMENT=8;') or die(mysql_error());
  26.  
  27. #### Создаем табличку config ####
  28.   mysql_query('CREATE TABLE '.PREFIX.'config (
  29.   site_name text NOT NULL,
  30.   quotes_num tinyint(4) default NULL
  31. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;') or die(mysql_error());
  32.  
  33.  
  34. #### Создаем табличку logs ####
  35.   mysql_query('CREATE TABLE '.PREFIX.'logs (
  36.   id tinyint(4) NOT NULL auto_increment,
  37.   qid tinyint(4) NOT NULL,
  38.   ip tinytext NOT NULL,
  39.   rating enum("plus","minus") default NULL,
  40.  PRIMARY KEY  (`id`)
  41. ) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 AUTO_INCREMENT=39;') or die(mysql_error());
  42.  
  43.  
  44. #### Создаем табличку quotes ####
  45.   mysql_query('CREATE TABLE '.PREFIX.'quotes (
  46.   id tinyint(4) NOT NULL auto_increment,
  47.   moderator tinytext NOT NULL,
  48.   date tinytext NOT NULL,
  49.   rating tinyint(4) NOT NULL,
  50.   content text,
  51.   status enum("checked","unchecked") NOT NULL,
  52.  PRIMARY KEY  (`id`)
  53. ) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;') or die(mysql_error());
  54.  
  55. #### Заносим данные админа в таблицу admins ####
  56. $name = @$_REQUEST['name'];
  57.                 if ($name == '') $name = $login;
  58.                 mysql_query('INSERT INTO '.PREFIX.'admins SET
  59.                    login = "'.$login.'",
  60.                         status = "admin",
  61.                         password = "'.md5($pass).'"')  or die(mysql_error());
  62. #### Ставим блокировку на повторную установку ####
  63. $lockt = 'lock';
  64. $lock = fopen ('../core/lock', "w");
  65. fwrite ($lock, $lockt);
  66. fclose ($lock);                        
  67. require_once("../core/locale.php");
  68. echo $locale['i9']; // Вывод сообщения об удачной установке :)
  69. }
  70.  
  71. else
  72. {
  73.         echo $locale['i10']; // Вывод сообщение об не удачной установке :(
  74.         }
  75.  
  76. }  
  77. ?>
  78.  
  79. <?PHP
  80. #### Если кнопка "Поехали" в форме нажата, заполняем массив ####
  81. if (isset($_REQUEST['install']))
  82.         {
  83.                 $config = array();
  84. #### Заполняем массив настроек тем, что пришло из формы ####      
  85.                 $config['login'] = $_REQUEST['login'];
  86.                 $config['pass'] = $_REQUEST['pass'];
  87.                 $config['servdb'] = $_REQUEST['servdb'];
  88.                 $config['userdb'] = $_REQUEST['userdb'];
  89.                 $config['passwd'] = $_REQUEST['passwd'];
  90.                 $config['namedb'] = $_REQUEST['namedb'];
  91.                 $config['PREFIX'] = $_REQUEST['prefix'];
  92. #### Берем шаблон config.php ####
  93.                 $config_tmpl = file_get_contents('config_tmpl.txt');
  94. #### обходим в цикле, заменяя части шаблона на элементы конф. массива ####
  95.                 foreach ($config as $key=>$value) $config_tmpl = str_replace("<%$key%>", $value, $config_tmpl);
  96.                 $cfg = fopen ('../core/config.php', "w");
  97.                 fwrite ($cfg, $config_tmpl);
  98.                 fclose ($cfg);
  99. #### Запуск функции установки ####
  100.                 install_gnub();
  101.         }
  102. ?>
  103. <center>
  104. <form action="./install.php" method="post" >
  105. <? print_r ($locale['i1']); ?><br><input type="text" name="userdb" value="root" /><br>
  106. <? print_r ($locale['i2']); ?><br><input type="text" name="namedb" value="gnub" /><br>
  107. <? print_r ($locale['i3']); ?><br><input type="text" name="passwd" value="passwd" /><br>
  108. <? print_r ($locale['i4']); ?><br><input type="text" name="servdb" value="localhost" /><br>
  109. <? print_r ($locale['i5']); ?><br><input type="text" name="prefix" value="gnub_" /><br>
  110. <? print_r ($locale['i6']); ?><br>
  111. <? print_r ($locale['i7']); ?><br><input type="text" name="login" value="admin" /><br>
  112. <? print_r ($locale['i8']); ?><br><input type="text" name="pass" value="pass" /><br>
  113. <input type="submit" name="install" value="Поехали" /><br>
  114. </form>
  115. </center>
  116.  

(Отредактировано автором: 02 Декабря, 2011 - 01:40:12)



-----
90% ошибок находятся в полуметре от монитора...
 
 Top
foozzi
Отправлено: 02 Декабря, 2011 - 03:26:32
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




Вычислил траблу, запрос был не виноват
CODE (SQL):
скопировать код в буфер обмена
  1.         $query = mysql_query("SELECT * FROM  '.PREFIX.'`admins` WHERE `login` = '$_POST[login]' AND `password` = '$_POST[passwd]'");

все дело было в константе PREFIX , когда я прописал полное название базы с префиксом, все заработало.

а теперь вопрос, как мне константу префикса вставить в запрос?


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
filkeith
Отправлено: 02 Декабря, 2011 - 08:14:14
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




foozzi пишет:
как мне константу префикса вставить в запрос?

мб я не все посмотрел но разве у переменных не должно быть значка $ доллара перед именем ?
т.е.
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("SELECT * FROM  '.$PREFIX.'`admins` WHERE `login` = '$_POST[login]' AND `password` = '$_POST[passwd]'");
 
 Top
Мелкий Супермодератор
Отправлено: 02 Декабря, 2011 - 08:15:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




foozzi, подсветка форума намекает.
Спойлер (Отобразить)

(Добавление)
filkeith пишет:
мб я не все посмотрел но разве у переменных не должно быть значка $ доллара перед именем ?

Переменная != константа.


-----
PostgreSQL DBA
 
 Top
filkeith
Отправлено: 02 Декабря, 2011 - 08:20:39
Post Id



Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Июль 2011  


Помог: 2 раз(а)




Мелкий пишет:
Переменная != константа.

Ясно, не всё просмотрел
тогда мб не хватает точек раз строка
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("SELECT * FROM  '.PREFIX.'`admins` WHERE `login` = '.$_POST[login].' AND `password` = '.$_POST[passwd].';");
 
 Top
foozzi
Отправлено: 02 Декабря, 2011 - 08:26:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




не выходит так, скуля не туда лезит, пробовал даже так:
PHP:
скопировать код в буфер обмена
  1.     $query = mysql_query("SELECT * FROM ` .PREFIX.admins` WHERE `login` = '.$_POST[login].' AND `password` = '.$_POST[passwd].';");


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
Panoptik
Отправлено: 02 Декабря, 2011 - 08:44:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




так точно не получится, у вас константа в строке интерпретируется как обычное слово. вообще пробуйте вывести значение константы и строку квери перед запросом и посмотрите что туда попадает
PHP:
скопировать код в буфер обмена
  1.  
  2. define(PREFIX,'myprefix');
  3. //..... php_code ....
  4.  
  5. echo PREFIX;
  6. echo 'SELECT * FROM `' .PREFIX.'admins` WHERE `login` = \''.$_POST[login].'\' AND `password` = \''.$_POST[passwd].'\';'
  7.  


и вы опять поубирали кавычки вокруг строковых значений, а это к добру не приведет.
попробуйте вывести результат. если визуально запрос вроде правильный, выполните его в phpmyadmin или непосредственно в консоли mysql
и вообще выводите echo mysql_error() , мускул сам подскажет что не так, если допущена ошибка


-----
Just do it
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Декабря, 2011 - 08:53:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("SELECT * FROM `".PREFIX."admins` WHERE `login` = '".$_POST['login']."' AND `password` = '".$_POST['passwd']."';");

Мужики запутались в кавычках...

(Отредактировано автором: 02 Декабря, 2011 - 08:53:55)

 
 Top
foozzi
Отправлено: 02 Декабря, 2011 - 08:59:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 283
Дата рег-ции: Май 2011  
Откуда: rm -rf /


Помог: 0 раз(а)




DeepVarvar помогло спасиб) в репу +


-----
90% ошибок находятся в полуметре от монитора...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB