Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Header и exit. Проблемы, ошибки.


Автор: frops 12.12.2011, 13:01
Проблема такова. Есть код: 

Код

if ([УСЛОВИЕ]) {
     [ВЫПОЛНЕНИЕ_НЕКОГО_СЦЕНАРИЯ]
      
      header("Location: index.php?m=".urlencode("Вход выполнен"));   //Тут редирект
      exit;  //Выход
    }


Со страницы он не выходит, но и дальше ее уже не выполняет. В чем проблема? В другом проекте работала.

P.S. Без exit; переходит на туже страницу, на которой находится. Но это уже не нормально, что не так?

Автор: ayax2005 12.12.2011, 13:07
exit() - функция.

Автор: frops 12.12.2011, 13:11
Цитата(ayax2005 @ 12.12.2011,  13:07)
exit() - функция.

Спасибо за подсказку, но суть дела не меняется. Все так же. Кстати, раньше пользовался exit; и все работало)

Автор: $дмитрий 12.12.2011, 13:18
Покажи целиком код

Автор: frops 12.12.2011, 13:23
Код

<?
if ($act=="" || $act=="login") {  
  if ($_POST["login"]&&$_POST["passw"]) { //Отправленная форма
    $login  = htmlspecialchars($_POST["login"]);
    $passw  = htmlspecialchars($_POST["passw"]);
       
    if ($DB_VAR::getVarDB("SELECT COUNT(*) FROM alcont_users WHERE ((LOWER(login) LIKE LOWER('".$login."')) OR (LOWER(email) LIKE LOWER('".$login."'))) AND passw LIKE md5('".$passw."') LIMIT 1")>0) {
      list($id_user,$login,$email,$name,$rights) = $DB::getRowDB("SELECT id_user, LOWER(login), LOWER(email), name, rights FROM ".DB_PREF."users WHERE ((LOWER(login) LIKE LOWER('".$login."')) OR (LOWER(email) LIKE LOWER('".$login."')))  AND passw LIKE md5('".$passw."')");
      $_SESSION["id_user"]      = $id_user;        
      $_SESSION["name_user"]    = $name;        
      $_SESSION["login_user"]   = $login;        
      $_SESSION["email_user"]   = $email;        
      $_SESSION["rights_user"]  = $rights;
      
      header("Location: index.php?m=".urlencode("Вход выполнен"));
      exit;
    } else {
      header("Location: index.php?em=".urlencode("Неверный логин/email или пароль"));
      exit;
    } 
  } else {
    $auth_act_tpl = new template(TPL."auth/authlogin.tpl",R1, 1);
    $cont = $auth_act_tpl->show_template();
  }
  
} elseif ($act=="exit") {
  unset($_SESSION["idUser_lp"]);
  unset($_SESSION["nameUser_lp"]);        
  unset($_SESSION["loginUser_lp"]);        
  unset($_SESSION["emailUser_lp"]);        
  unset($_SESSION["rightsUser_lp"]);
  unset($_SESSION["rights_lp"]);
  
  header("Location: /?m=".urlencode("Выход выполнен"));
  exit;
} else {
  //Раздела не существует
  header("Location: /");
  exit;
}

?>

Автор: bars80080 12.12.2011, 13:35
ну, какова проблема? начинаем заниматься отладкой. раставляем везде чекпоинты, вроде echo 1; echo 2; и т.д. и смотрим, где происходит сбой.

да, вопрос №0: показ ошибок включён?

Автор: $дмитрий 12.12.2011, 13:53
Смотри
Здесь, в случаи успешной авторизации, перекидываем пользователя на текущию страницу
Код

header("Location: index.php?m=".urlencode("Вход выполнен"));

Однако, благодаря условию $act=="" пользователю все равно будет отображаться форма авторизации. Короче путаница с условиями

С сессиями тоже каша. При авторизации создается сессия с одними ключами, а при выходе прибиваешь совершенно другие ключи

И еще советую подумать над безопасностью скрипта, не исключена SQL-инъекция 

Автор: frops 12.12.2011, 14:20
Цитата($дмитрий @ 12.12.2011,  13:53)
Смотри
Здесь, в случаи успешной авторизации, перекидываем пользователя на текущию страницу
Код

header("Location: index.php?m=".urlencode("Вход выполнен"));

Однако, благодаря условию $act=="" пользователю все равно будет отображаться форма авторизации. Короче путаница с условиями

С сессиями тоже каша. При авторизации создается сессия с одними ключами, а при выходе прибиваешь совершенно другие ключи

И еще советую подумать над безопасностью скрипта, не исключена SQL-инъекция

Это не index.php, это страница auth.php, подключаемая в скрипт в случае адреса: site.ru/auth

Сессия для примера, я их переименовывал. Пока роли не играют.

Он также не перекидывает на главную страницу. (((

Насчет всего, спасибо. Теперь, что-то можете еще предложить?

Добавлено через 2 минуты и 42 секунды
Цитата(bars80080 @ 12.12.2011,  13:35)
ну, какова проблема? начинаем заниматься отладкой. раставляем везде чекпоинты, вроде echo 1; echo 2; и т.д. и смотрим, где происходит сбой.

да, вопрос №0: показ ошибок включён?

Чек боксы ставил! Показывает echo перед header, после уже не показывает. То есть доходит до:

Код

 $_SESSION["rights_user"]  = $rights;
      
      echo "Сюда доходит";
      header("Location: index.php?m=".urlencode("Вход выполнен"));
      exit;
      echo "здесь уже нет";
    } else {



Автор: $дмитрий 12.12.2011, 14:40
Вместо
Код

header("Location: index.php?m=".urlencode("Вход выполнен"));

Временно пропиши
Цитата

header("Location: http://ya.ru&quot;);

Что бы наглядно было видно

Если при авторизации не перекинуло на http://ya.ru, но при этом выдало надпись "Сюда доходит", значит скрипт отработал с ошибкой "Cannot modify header information", в этом легко убедится включив вывод ошибок на экран
 

Автор: frops 12.12.2011, 14:48
Дима, огромное спасибо! Включил ошибки. Действительно Cannot modify... Дальше как-то Сам ))  smile 

Ответ всегда до безумства прост, если уже долго ищешь причину ошибки )))

Автор: $дмитрий 12.12.2011, 14:49
И еще, конструкция exit означает "прекратить дальнейшее выполнения скрипта". Поэтому ставить после него какие-либо метки не имеет смысла
Код

exit;
      echo "здесь уже нет";


Добавлено через 1 минуту и 6 секунд
Без проблем, обращайся smile

Автор: Evghenusi 12.12.2011, 15:12
Код
exit('здесь уже нет');

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