За последние 24 часа нас посетили 22565 программистов и 1192 робота. Сейчас ищут 778 программистов ...

Ошибка при авторизации

Тема в разделе "Сделайте за меня", создана пользователем anuar, 16 окт 2013.

  1. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    PHP:
    1. <?php
    2. $megauser=array(19,20,21,22);
    3. $readonly=array(62,23,25,26,27,28,40,65,24,22); //25- Погорелов 28 - Дзибалов 22- Искаков
    4. $v2users=array(19,20,21,24,64,23,28);
    5. $fin_division=array(40,65);
    6. if(empty($_SESSION["id_user"]) && $_SERVER['REQUEST_URI']!="/budget/" && $_SERVER['REQUEST_URI']!="/budget/?err=1"){
    7. //Показать форму ввода логина пароля
    8. header("Location: /budget/");
    9. }elseif(!empty($_POST["password"])){
    10. //Проверить логин и пароль
    11. require_once("classes/sqlsrv.php");
    12. $DB = new sqlsrv;
    13. $DB->db_connect();
    14. $q1=$DB->select("id_user,branch,id_division,FIO, session_hash","BUDGET_USERS","login='".mysql_escape_string($_POST["login"])."' and password='".md5($_POST["password"])."'");
    15. if($DB->has_rows($q1)===true){
    16. //Введенный логин правильный
    17. $tf1=$DB->fetch_row($q1);
    18. if($tf1["session_hash"]=="BLOCKED"){
    19. header("Location: /budget/blocked.php");
    20. die();
    21. }
    22. $_SESSION["id_user"]=$tf1["id_user"];
    23. $_SESSION["FIO"]=$tf1["FIO"];
    24. $_SESSION["branch"]=$tf1["branch"];
    25. $_SESSION["division"]=$tf1["id_division"];
    26.  
    27. $to_update=array(
    28. "lastlogin_IP"=>$_SERVER['REMOTE_ADDR'],
    29. "lastlogin_time"=>date("d.m.Y H:i:s"),
    30. );
    31. $DB->update($to_update,"BUDGET_USERS","id_user=".$tf1["id_user"]);
    32. if(in_array($tf1["id_user"],$megauser) || in_array($tf1["id_user"],$readonly) || in_array($tf1["id_user"],$v2users)){
    33. header("Location: /budget/branches.php");
    34. }elseif($tf1["id_division"]>189){
    35. header("Location: /budget/headoffice.php");
    36. }else{
    37. header("Location: /budget/division.php");
    38. }
    39.  
    40. }else{
    41. //Введен не правильный логин пароль
    42. header("Location: /budget/?err=1");
    43. }
    44. }
    45. ?>
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    ну в третий раз ты хотябы попытался включить bbcode php. увы! на ЭТОМ форуме надо набирать [ code=php ] код [ /code ] - вот так вот неочевидно...

    >> Ошибка при авторизации
    что именно происходит? лично я хочу помочь, но без пояснений сделать это не смогу.
     
  3. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    На главном сайте есть форма, в которую вводишь логин и пароль, при нажатии на кнопку происходит обработка этого логина и пароля, но вылазит ошибка: http://Location:/budget/?err=1 хотя логин и пароль введены правильно, этот сайт разработали до меня пока их не уволили и теперь просят меня исправить эту ошибку
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Ссыку лучше убери, а то найдутся умники, зная исходники поимеют ваш беспризорный сайт )))

    то есть выполняется ветка
    Код (PHP):
    1. //Введен не правильный логин пароль
    2. header("Location: /budget/?err=1"); 
     
  5. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    Спасибо за совет. Да почему так происходит?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    я бы сделал вот что:

    зашел бы в модуль с оболочкой БД (classes/sqlsrv.php ?) и перед mysql_query() воткнул бы die($sql) чтобы увидеть достоверно какой формируется запрос. прогнал бы его в phpmyadmin чтобы знать насколько он верный

    дальше по обстоятельствам

    Добавлено спустя 5 минут 8 секунд:
    вариантов немного:
    - запрос ошибочный;
    - запрос верный, но на вход подаются неверные данные;
    - с запросом и данным порядок, результат выполнения используется неверно.

    чтобы разобраться, надо начать с реального текста запроса - об этом я выше написал.

    Добавлено спустя 1 минуту 20 секунд:
    оффтопик: это как с машиной :) у движка есть всего три источника проблем: бензин, воздух и электричество. если не заводится - проверь их.
     
  7. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    Вот это sqlsrv.php я просто вот не давно начал изучать PHP

    Код (PHP):
    1.  <?php
    2.  
    3. class sqlsrv{
    4.  
    5.      var $db_resourcelink;
    6.      var $stmt;
    7.      var $record_row;
    8.  
    9.       function db_connect($schema= "ORACLETEST"){
    10.         $connectionInfo = array( "Database"=>"MANAGEMENT", "UID"=>"webuser", "PWD"=>"1q2w3e4r%T","CharacterSet" => "UTF-8");
    11.         $this->db_resourcelink=sqlsrv_connect( $schema, $connectionInfo);
    12.  
    13.         if( $this->db_resourcelink ) {
    14.              //;
    15.         }else{
    16.              echo "Connection could not be established.<br />";
    17.              die( print_r( sqlsrv_errors(), true));
    18.         }
    19.  
    20.       }
    21.  
    22.       function query($query){
    23.         $params = array();
    24.         $options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    25.           $this->stmt = sqlsrv_query($this->db_resourcelink, $query, $params, $options);
    26.         if( $this->stmt === false) {
    27.             $this->debug($query);
    28.         }
    29.         //sqlsrv_commit($this->db_resourcelink);
    30.           return $this->stmt;
    31.       }
    32.  
    33.       function select($what,$table,$where='',$order='',$limit='',$group=''){
    34.           $query='SELECT '.$what.' FROM '.$table.'';
    35.           if (strlen($where)){$query.=' WHERE '.$where;}
    36.           if (strlen($group)){$query.=' GROUP BY '.$group;}
    37.           if (strlen($order)){$query.=' ORDER BY '.$order;}
    38. //          if (strlen($limit)){$query.=' LIMIT '.$limit;}
    39.         $this->stmt = $this->query($query);
    40.         return $this->stmt;
    41.       }
    42.  
    43.      function simple_delete( $tbl, $where )
    44.     {
    45.             $query= "DELETE FROM $tbl";
    46.  
    47.             if ( $where )
    48.             {
    49.                     $query.= " WHERE ".$where;
    50.             }
    51.             $this->stmt = $this->query($query);
    52.               return $this->stmt;
    53.     }
    54.  
    55.       function insert($ins_arr,$table){
    56.           if (!is_array($ins_arr)){
    57.                   return "Error: This is not array.";
    58.           }
    59.           $query='INSERT INTO '.$table.' ';
    60.         foreach ($ins_arr as $key=>$value){
    61.             /*if(ereg("^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$",$value)){
    62.                 $b=date_parse($value);
    63.                 if(checkdate($b["month"],$b["day"],$b["year"])){
    64.                     $keys.=$key.", ";
    65.                     $values.="TO_Date('".$value."','DD.MM.YYYY'), ";
    66.                 }else{
    67.                     $keys.=$key.", ";
    68.                     $values.="'".$value."', ";
    69.                 }
    70.             }elseif(ereg("^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4}) ([0-9]{1,2})\:([0-9]{1,2})\:([0-9]{1,2})$",$value)){
    71.                 $b=date_parse($value);
    72.                 if(checkdate($b["month"],$b["day"],$b["year"])){
    73.                     $keys.=$key.", ";
    74.                     $values.="TO_Date('".$value."','DD.MM.YYYY HH24:MI:SS'), ";
    75.                 }else{
    76.                     $keys.=$key.", ";
    77.                     $values.="'".$value."', ";
    78.                 }
    79.             }
    80.             else{*/
    81.                 $keys.=$key.", ";
    82.                 $values.="'".trim($value)."', ";
    83.             //}
    84.         }
    85.          $keys=substr($keys,0,strlen($keys)-2);
    86.          $values=substr($values,0,strlen($values)-strpos(strrev($values),",")-1);
    87.       $query.='('.$keys.') VALUES ('.$values.')';
    88.       $this->stmt = $this->query($query);
    89.       return $this->stmt;
    90.       }
    91.  
    92.       function update($update_arr,$table,$where){
    93.         if (!is_array($update_arr)){
    94.                   return "Error: This is not array.";
    95.           }
    96.           $query="UPDATE ".$table." SET ";
    97.         foreach ($update_arr as $key=>$value){
    98.             /*if(ereg("([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})",$value)){
    99.                 $b=date_parse($value);
    100.                 if(checkdate($b["month"],$b["day"],$b["year"])){
    101.                     $query.=$key."=TO_Date('". $value."','DD.MM.YYYY'), ";
    102.                 }else{
    103.                     $query.=$key."='". $value."', ";
    104.                 }
    105.             }elseif(ereg("^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4}) ([0-9]{1,2})\:([0-9]{1,2})\:([0-9]{1,2})$",$value)){
    106.                 $b=date_parse($value);
    107.                 if(checkdate($b["month"],$b["day"],$b["year"])){
    108.                     $query.=$key."=TO_Date('". $value."','DD.MM.YYYY HH24:MI:SS'), ";
    109.                 }else{
    110.                     $query.=$key."='". $value."', ";
    111.                 }
    112.             }else{     */
    113.                 $query.=$key."='". $value."', ";
    114.             //}
    115.         }
    116.         $query=substr($query,0,strlen($query)-2);
    117.           if (strlen($where)){$query.=' WHERE '.$where;}
    118.  
    119.           $this->stmt=$this->query($query);
    120.           return $this->stmt;
    121.       }
    122.  
    123.     function fetch_row($query_id = "")
    124.     {
    125.             if ($query_id == "")
    126.             {
    127.                     $query_id = $this->stmt;
    128.             }
    129.  
    130.         $this->record_row = sqlsrv_fetch_array($query_id,SQLSRV_FETCH_ASSOC);
    131.  
    132.         return $this->record_row;
    133.     }
    134.  
    135.     function get_num_rows($query_id="")
    136.     {
    137.             if ($query_id == "")
    138.             {
    139.                     $query_id = $this->stmt;
    140.             }
    141.  
    142.         return sqlsrv_num_rows($query_id);
    143.     }
    144.  
    145.     function has_rows($query_id="")
    146.     {
    147.             if ($query_id == "")
    148.             {
    149.                     $query_id = $this->stmt;
    150.             }
    151.  
    152.         return sqlsrv_has_rows($query_id);
    153.     }
    154.  
    155.     function get_num_aff($query_id="")
    156.     {
    157.             if ($query_id == "")
    158.             {
    159.                     $query_id = $this->stmt;
    160.             }
    161.  
    162.         return sqlsrv_rows_affected($query_id);
    163.     }
    164.  
    165.     function free_result($query_id="")
    166.     {
    167.  
    168.                    if ($query_id == "") {
    169.                     $query_id = $this->stmt;
    170.             }
    171.  
    172.             @sqlsrv_free_stmt($query_id);
    173.     }
    174.     function close_db()
    175.     {
    176.             if ($this->db_resourcelink)
    177.             {
    178.                 return @sqlsrv_close( $this->db_resourcelink);
    179.         }
    180.     }
    181.  
    182.    function debug($query){
    183.     var_dump($query);
    184.        print iconv("cp866","UTF-8",print_r(sqlsrv_errors(),true));
    185.    }
    186.  
    187. }
    188.  
    189. ?>
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    судя по всему, обращение идет к Microsoft SQL Server )))
    вот дока по нужной функции: http://www.php.%6eet/manual/ru/function.sqlsrv-query.php

    сначала небольшое отступление:
    меня смущают такие вещи
    надергали с миру по нитке. не надо, блин, обращаясь к MS SQL, фильтровать данные с помощью библиотеки MySQL !
    в сети есть нормальные рецепты http://stackoverflow.com/questions/2146546/mysql-real-escap ... sql-server

    выше я тебе советовал поставить отладочный вывод. подробно: найди функцию
    function select($what,$table,$where='',$order='',$limit='',$group=''){
    и добавь в ней отладку вот так:
    die($query);
    $this->stmt = $this->query($query);

    при отправке формы, на этой строке выполнение прекратится, а на страницу попадет текст запроса чтобы ты мог быстренько его скопировать и сразу закомментировать die()

    потом запускаешь какую-нибудь программу-консоль MS SQL. не знаю что там у вас есть: Enterprise Manager/Query или Navicat for MS SQL- выясни у коллег.
    и там свой скопированный текст запроса испытай. по хорошему он должен выполниться без ошибок и выдать одну строку с данными пользователя. или нет - узнаешь когда попробуешь.

    всё пока!
     
  9. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    я добавил изменение через Notepad++ но он не сохраняет изменения
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    прав не хватает, вероятно. это надо решать с сетевым админом.
     
  11. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    по другому нельзя решить этот вопрос?

    Добавлено спустя 1 минуту 28 секунд:
    А ты не можешь проделать этот весь процесс пожалуйста!
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    раздел viewforum.php?f=36 готов принять твою тему. переносить? ;)
     
  13. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    Был бы признателен
     
  14. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    какой запрос надо послать чтобы получить данные ползователя
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    куда послать? =)
     
  16. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    отправить

    Добавлено спустя 4 минуты 59 секунд:
    при отправке формы, на этой строке выполнение прекратится, а на страницу попадет текст запроса чтобы ты мог быстренько его скопировать и сразу закомментировать die() - КАК ЭТО СДЕЛАТЬ
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    die() это функция такая. что ты в скобочках напишешь - то и выведет. при этом выполнение скрипта остановится.
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    если непонятна работа какой-то функции, здесь на этом сайте наверху есть огромная строка поиска (это как-раз по документации, а не по форуму, как может показаться), пишешь туда die и давишь Enter - получишь помощь.

    оффтопик: господин 440Hz конечно молодец, что породил и видимо башляет за существование этого форума, но сделал он его очень спорно и никакого фидбека не хочет, похоже.
     
  19. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    вообщем я послал запрос select * from BUDGET_USERS и проверил правильность логина и пароля который я ввожу в сайте
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    при правильном логине/пароле запрос вернул тебе одну строку?

    Добавлено спустя 10 минут 35 секунд:
    если запрос верный, проверяем реакцию на результат выполнения запроса.

    в скрипте написано:
    Код (PHP):
    1. if($DB->has_rows($q1)===true){ 
    смотрим что за метод такой has_rows:
    Код (PHP):
    1.     function has_rows($query_id="")
    2.     {
    3.             if ($query_id == "")
    4.             {
    5.                     $query_id = $this->stmt;
    6.             }
    7.  
    8.         return sqlsrv_has_rows($query_id);
    9.     } 
    то есть возвращает в точности результат библиотечной функции, смотрим
    edited 2013-10-21 begin ========================
    доку:
    то есть вот это
    должно срабатывать. получается всё вродебы рабочее! (как ниже написал автор, проблема была в неправильно сохраненном пароле)
    edited 2013-10-21 end ========================

    а вообще в данном случае достаточно было бы if($DB->has_rows($q1)){
     
  21. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    anuar, не молчи. как твои дела, всё получилось? или надо что-то пояснить?
     
  22. anuar

    anuar Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    13
    Симпатии:
    0
    Спасибо за советы получилось... все в принципе правильно работало просто я проверил данные пользователей(а логин и пароль дал мне мой начальник, у которого пароль не был закодирован в MD5 как у всех остальных), и поэтому он не авторизововался. Все оказалось намного проще ))) потом я ему зашифровал его пароль и все получилось
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    ясно. я кстати не на ту функцию доку процитировал ))) извиняюсь. был невнимателен -- исправил ради будущих читателей )))