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
Форумы портала PHP.SU :: Версия для печати :: Скрипт не правильно проверяет логин/пароль из базы
Форумы портала PHP.SU » » Вопросы новичков » Скрипт не правильно проверяет логин/пароль из базы

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

1. foozzi - 02 Декабря, 2011 - 00:02:57 - перейти к сообщению
Вот скрипт
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


Ввожу все правильно, пишет что не правильно...
в чем я ошибся?
2. CenapaTop - 02 Декабря, 2011 - 00:14:51 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT '.PREFIX.'admins WHERE `login` = '$_POST[login]' AND `password` = '$_POST[pass]

select что?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE ...
3. foozzi - 02 Декабря, 2011 - 00:37:45 - перейти к сообщению
все равно не пускает
4. etoYA - 02 Декабря, 2011 - 00:49:03 - перейти к сообщению
Вариант 1 - при авторизации не шифруете данные из поле pass
5. Panoptik - 02 Декабря, 2011 - 00:54:16 - перейти к сообщению
в запросе как уже вам подсказали выше напишите
CODE (PHP):
скопировать код в буфер обмена
  1.  
  2.     mysql_query('SELECT 1 `'.PREFIX.'admins` WHERE `login` = \''.$_POST[login].'\' AND `password` = \''.$_POST[pass].'\'');
  3.  

(Добавление)
кстати хеширование правильно производится? может там еще соль добавлена к мд5?
6. foozzi - 02 Декабря, 2011 - 01:13:58 - перейти к сообщению
соли там нет, запрос попробовал выше, тож самое.

вот как созадвал я таблицу
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.  
7. foozzi - 02 Декабря, 2011 - 03:26:32 - перейти к сообщению
Вычислил траблу, запрос был не виноват
CODE (SQL):
скопировать код в буфер обмена
  1.         $query = mysql_query("SELECT * FROM  '.PREFIX.'`admins` WHERE `login` = '$_POST[login]' AND `password` = '$_POST[passwd]'");

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

а теперь вопрос, как мне константу префикса вставить в запрос?
8. filkeith - 02 Декабря, 2011 - 08:14:14 - перейти к сообщению
foozzi пишет:
как мне константу префикса вставить в запрос?

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

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

Переменная != константа.
10. filkeith - 02 Декабря, 2011 - 08:20:39 - перейти к сообщению
Мелкий пишет:
Переменная != константа.

Ясно, не всё просмотрел
тогда мб не хватает точек раз строка
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("SELECT * FROM  '.PREFIX.'`admins` WHERE `login` = '.$_POST[login].' AND `password` = '.$_POST[passwd].';");
11. foozzi - 02 Декабря, 2011 - 08:26:38 - перейти к сообщению
не выходит так, скуля не туда лезит, пробовал даже так:
PHP:
скопировать код в буфер обмена
  1.     $query = mysql_query("SELECT * FROM ` .PREFIX.admins` WHERE `login` = '.$_POST[login].' AND `password` = '.$_POST[passwd].';");
12. Panoptik - 02 Декабря, 2011 - 08:44:08 - перейти к сообщению
так точно не получится, у вас константа в строке интерпретируется как обычное слово. вообще пробуйте вывести значение константы и строку квери перед запросом и посмотрите что туда попадает
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() , мускул сам подскажет что не так, если допущена ошибка
13. DeepVarvar - 02 Декабря, 2011 - 08:53:06 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $query = mysql_query("SELECT * FROM `".PREFIX."admins` WHERE `login` = '".$_POST['login']."' AND `password` = '".$_POST['passwd']."';");

Мужики запутались в кавычках...
14. foozzi - 02 Декабря, 2011 - 08:59:51 - перейти к сообщению
DeepVarvar помогло спасиб) в репу +

 

Powered by ExBB FM 1.0 RC1