PHP: <?php error_reporting(7); session_start(); $megauser=array(19,20,21,22); $readonly=array(62,23,25,26,27,28,40,65,24,22); //25- Погорелов 28 - Дзибалов 22- Искаков $v2users=array(19,20,21,24,64,23,28); $fin_division=array(40,65); if(empty($_SESSION["id_user"]) && $_SERVER['REQUEST_URI']!="/budget/" && $_SERVER['REQUEST_URI']!="/budget/?err=1"){ //Показать форму ввода логина пароля header("Location: /budget/"); }elseif(!empty($_POST["password"])){ //Проверить логин и пароль require_once("classes/sqlsrv.php"); $DB = new sqlsrv; $DB->db_connect(); $q1=$DB->select("id_user,branch,id_division,FIO, session_hash","BUDGET_USERS","login='".mysql_escape_string($_POST["login"])."' and password='".md5($_POST["password"])."'"); if($DB->has_rows($q1)===true){ //Введенный логин правильный $tf1=$DB->fetch_row($q1); if($tf1["session_hash"]=="BLOCKED"){ header("Location: /budget/blocked.php"); die(); } $_SESSION["id_user"]=$tf1["id_user"]; $_SESSION["FIO"]=$tf1["FIO"]; $_SESSION["branch"]=$tf1["branch"]; $_SESSION["division"]=$tf1["id_division"]; $to_update=array( "lastlogin_IP"=>$_SERVER['REMOTE_ADDR'], "lastlogin_time"=>date("d.m.Y H:i:s"), ); $DB->update($to_update,"BUDGET_USERS","id_user=".$tf1["id_user"]); if(in_array($tf1["id_user"],$megauser) || in_array($tf1["id_user"],$readonly) || in_array($tf1["id_user"],$v2users)){ header("Location: /budget/branches.php"); }elseif($tf1["id_division"]>189){ header("Location: /budget/headoffice.php"); }else{ header("Location: /budget/division.php"); } }else{ //Введен не правильный логин пароль header("Location: /budget/?err=1"); } } ?>
ну в третий раз ты хотябы попытался включить bbcode php. увы! на ЭТОМ форуме надо набирать [ code=php ] код [ /code ] - вот так вот неочевидно... >> Ошибка при авторизации что именно происходит? лично я хочу помочь, но без пояснений сделать это не смогу.
На главном сайте есть форма, в которую вводишь логин и пароль, при нажатии на кнопку происходит обработка этого логина и пароля, но вылазит ошибка: http://Location:/budget/?err=1 хотя логин и пароль введены правильно, этот сайт разработали до меня пока их не уволили и теперь просят меня исправить эту ошибку
Ссыку лучше убери, а то найдутся умники, зная исходники поимеют ваш беспризорный сайт ))) то есть выполняется ветка Код (PHP): //Введен не правильный логин пароль header("Location: /budget/?err=1");
я бы сделал вот что: зашел бы в модуль с оболочкой БД (classes/sqlsrv.php ?) и перед mysql_query() воткнул бы die($sql) чтобы увидеть достоверно какой формируется запрос. прогнал бы его в phpmyadmin чтобы знать насколько он верный дальше по обстоятельствам Добавлено спустя 5 минут 8 секунд: вариантов немного: - запрос ошибочный; - запрос верный, но на вход подаются неверные данные; - с запросом и данным порядок, результат выполнения используется неверно. чтобы разобраться, надо начать с реального текста запроса - об этом я выше написал. Добавлено спустя 1 минуту 20 секунд: оффтопик: это как с машиной у движка есть всего три источника проблем: бензин, воздух и электричество. если не заводится - проверь их.
Вот это sqlsrv.php я просто вот не давно начал изучать PHP Код (PHP): <?php class sqlsrv{ var $db_resourcelink; var $stmt; var $record_row; function db_connect($schema= "ORACLETEST"){ $connectionInfo = array( "Database"=>"MANAGEMENT", "UID"=>"webuser", "PWD"=>"1q2w3e4r%T","CharacterSet" => "UTF-8"); $this->db_resourcelink=sqlsrv_connect( $schema, $connectionInfo); if( $this->db_resourcelink ) { //; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); } } function query($query){ $params = array(); $options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET ); $this->stmt = sqlsrv_query($this->db_resourcelink, $query, $params, $options); if( $this->stmt === false) { $this->debug($query); } //sqlsrv_commit($this->db_resourcelink); return $this->stmt; } function select($what,$table,$where='',$order='',$limit='',$group=''){ $query='SELECT '.$what.' FROM '.$table.''; if (strlen($where)){$query.=' WHERE '.$where;} if (strlen($group)){$query.=' GROUP BY '.$group;} if (strlen($order)){$query.=' ORDER BY '.$order;} // if (strlen($limit)){$query.=' LIMIT '.$limit;} $this->stmt = $this->query($query); return $this->stmt; } function simple_delete( $tbl, $where ) { $query= "DELETE FROM $tbl"; if ( $where ) { $query.= " WHERE ".$where; } $this->stmt = $this->query($query); return $this->stmt; } function insert($ins_arr,$table){ if (!is_array($ins_arr)){ return "Error: This is not array."; } $query='INSERT INTO '.$table.' '; foreach ($ins_arr as $key=>$value){ /*if(ereg("^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$",$value)){ $b=date_parse($value); if(checkdate($b["month"],$b["day"],$b["year"])){ $keys.=$key.", "; $values.="TO_Date('".$value."','DD.MM.YYYY'), "; }else{ $keys.=$key.", "; $values.="'".$value."', "; } }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)){ $b=date_parse($value); if(checkdate($b["month"],$b["day"],$b["year"])){ $keys.=$key.", "; $values.="TO_Date('".$value."','DD.MM.YYYY HH24:MI:SS'), "; }else{ $keys.=$key.", "; $values.="'".$value."', "; } } else{*/ $keys.=$key.", "; $values.="'".trim($value)."', "; //} } $keys=substr($keys,0,strlen($keys)-2); $values=substr($values,0,strlen($values)-strpos(strrev($values),",")-1); $query.='('.$keys.') VALUES ('.$values.')'; $this->stmt = $this->query($query); return $this->stmt; } function update($update_arr,$table,$where){ if (!is_array($update_arr)){ return "Error: This is not array."; } $query="UPDATE ".$table." SET "; foreach ($update_arr as $key=>$value){ /*if(ereg("([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})",$value)){ $b=date_parse($value); if(checkdate($b["month"],$b["day"],$b["year"])){ $query.=$key."=TO_Date('". $value."','DD.MM.YYYY'), "; }else{ $query.=$key."='". $value."', "; } }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)){ $b=date_parse($value); if(checkdate($b["month"],$b["day"],$b["year"])){ $query.=$key."=TO_Date('". $value."','DD.MM.YYYY HH24:MI:SS'), "; }else{ $query.=$key."='". $value."', "; } }else{ */ $query.=$key."='". $value."', "; //} } $query=substr($query,0,strlen($query)-2); if (strlen($where)){$query.=' WHERE '.$where;} $this->stmt=$this->query($query); return $this->stmt; } function fetch_row($query_id = "") { if ($query_id == "") { $query_id = $this->stmt; } $this->record_row = sqlsrv_fetch_array($query_id,SQLSRV_FETCH_ASSOC); return $this->record_row; } function get_num_rows($query_id="") { if ($query_id == "") { $query_id = $this->stmt; } return sqlsrv_num_rows($query_id); } function has_rows($query_id="") { if ($query_id == "") { $query_id = $this->stmt; } return sqlsrv_has_rows($query_id); } function get_num_aff($query_id="") { if ($query_id == "") { $query_id = $this->stmt; } return sqlsrv_rows_affected($query_id); } function free_result($query_id="") { if ($query_id == "") { $query_id = $this->stmt; } @sqlsrv_free_stmt($query_id); } function close_db() { if ($this->db_resourcelink) { return @sqlsrv_close( $this->db_resourcelink); } } function debug($query){ var_dump($query); print iconv("cp866","UTF-8",print_r(sqlsrv_errors(),true)); } } ?>
судя по всему, обращение идет к 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- выясни у коллег. и там свой скопированный текст запроса испытай. по хорошему он должен выполниться без ошибок и выдать одну строку с данными пользователя. или нет - узнаешь когда попробуешь. всё пока!
по другому нельзя решить этот вопрос? Добавлено спустя 1 минуту 28 секунд: А ты не можешь проделать этот весь процесс пожалуйста!
отправить Добавлено спустя 4 минуты 59 секунд: при отправке формы, на этой строке выполнение прекратится, а на страницу попадет текст запроса чтобы ты мог быстренько его скопировать и сразу закомментировать die() - КАК ЭТО СДЕЛАТЬ
die() это функция такая. что ты в скобочках напишешь - то и выведет. при этом выполнение скрипта остановится.
если непонятна работа какой-то функции, здесь на этом сайте наверху есть огромная строка поиска (это как-раз по документации, а не по форуму, как может показаться), пишешь туда die и давишь Enter - получишь помощь. оффтопик: господин 440Hz конечно молодец, что породил и видимо башляет за существование этого форума, но сделал он его очень спорно и никакого фидбека не хочет, похоже.
вообщем я послал запрос select * from BUDGET_USERS и проверил правильность логина и пароля который я ввожу в сайте
при правильном логине/пароле запрос вернул тебе одну строку? Добавлено спустя 10 минут 35 секунд: если запрос верный, проверяем реакцию на результат выполнения запроса. в скрипте написано: Код (PHP): if($DB->has_rows($q1)===true){ смотрим что за метод такой has_rows: Код (PHP): function has_rows($query_id="") { if ($query_id == "") { $query_id = $this->stmt; } return sqlsrv_has_rows($query_id); } то есть возвращает в точности результат библиотечной функции, смотрим edited 2013-10-21 begin ======================== доку: то есть вот это должно срабатывать. получается всё вродебы рабочее! (как ниже написал автор, проблема была в неправильно сохраненном пароле) edited 2013-10-21 end ======================== а вообще в данном случае достаточно было бы if($DB->has_rows($q1)){
Спасибо за советы получилось... все в принципе правильно работало просто я проверил данные пользователей(а логин и пароль дал мне мой начальник, у которого пароль не был закодирован в MD5 как у всех остальных), и поэтому он не авторизововался. Все оказалось намного проще ))) потом я ему зашифровал его пароль и все получилось
ясно. я кстати не на ту функцию доку процитировал ))) извиняюсь. был невнимателен -- исправил ради будущих читателей )))