Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Автоматический переход на страницу


Автор: Vigoroso 25.7.2006, 11:39
к примеру у меня ситуация со входом(регистрации т.п.) на сайт, я хочу чтобы у меня отдельный php файл обрабатывал полученные переменные из формы, но если возможно так:
 - незаметно для пользователя, т.е. только на сервере, а потом выдавал результат работы на главную страницу
 - или же просто на странице отображались результаты работы... и потом он автоматически переходил на главную... 

Автор: BobiKK 25.7.2006, 11:55
1) Чтобы было совсем незаметно, надо использовать AJAX
2) Второй вариант гораздо проще. Данные обрабаываешь, а потом переадресовываешь любым известным тебе способом 

Автор: Vigoroso 25.7.2006, 12:02
про 2ой вариант, именно, чтобы автоматически передавлись данные, без учестия пользователя... подскажите как реализовать? 

Автор: BobiKK 25.7.2006, 12:17
В смысле автоматически без участия пользователя? Немного не понял
Пользователь заполняет форму, жмет на кнопочку "Войти", скрипт обрабатывает даныне и перенаправляет куда надо? 

Автор: Vigoroso 25.7.2006, 12:40
не совсем так...
к примеру в файле input.php - форма с полями, все данные она отправляет в work.php - который обрабатывает запрос  и потом work.php автоматически перехожит на index.php если вход был ужачным или же о5 на input.php если встретились какого-то рода ошибки 

Автор: AztEK 25.7.2006, 12:53
Код

header('Location: index.php');
 

Автор: Vigoroso 25.7.2006, 13:03
Цитата(AztEK @ 25.7.2006,  12:53)
Код

header('Location: index.php');

спасибо, сейчас попробую 

Автор: Mal Hack 25.7.2006, 13:05
exit() после header'a не забываем ставить. 

Автор: quarz 25.7.2006, 13:09
Vigoroso, если ты хочешь именно так как написал - 
Цитата(Vigoroso @  25.7.2006,  15:40 Найти цитируемый пост)
к примеру в файле input.php - форма с полями, все данные она отправляет в work.php - который обрабатывает запрос  и потом work.php автоматически перехожит на index.php если вход был ужачным или же о5 на input.php если встретились какого-то рода ошибки  


то переход можно сделать с помощью <Meta http-equiv=refresh content='0; URL=your_script.php?param=$param'>
эту строчку ты соответственно вписываешь в work.php с переадресацией на index.php если авторизация прошла успешно и на input.php?err="Login error" при ошибке авторизации. 

Автор: Vigoroso 25.7.2006, 13:36
а как установить время задержки? 

Автор: Vigoroso 25.7.2006, 14:45
это index.php
Код

        require 'functions.php';
    
    if(!(isset($_REQUEST[session_name()]))){
        $error = p_POST('login_error');
        if(!empty($error)) echo $error;
        require 'login.php';
    }
    else{
        session_start();
        echo "U are logged as $_SESSION('login')";
    }


а вот это файл logindone.php на который ссылается login.php и которому передаются логин и пароль.
я хочу чтобы он отработал так: если такой пользователь есть, то он стартует сессию и все ок, если нет, то мы в посте в переменной login_error помещаем причину ошибки и в index.php она выводится.
Код

require 'config.php';
    require 'functions.php';
    
    if (!isset($_POST('login_error'))) $_POST('login_error')="";
    
    $login = p_POST('login');
    $pass = p_POST('pass');
    
    if (!empty($login) && !empty($password)){
        query = "    SELECT client_Status 
                    FROM Client 
                    WHERE client_Login='$login' AND client_Password='$pass'
                ";
        $result = mysql_query($query);
        $status = mysql_fetch_row($result);
        
        if (empty($status[0])){
            echo " There is no registered user as $login ";
        }
        else{
            switch ($status[0]){
                0:1:
                    session_start();
                    $_SESSION('login')=$login;
                    $_SESSION('status')=$status[0];
                    //echo " You are logged successfully as $login";
                break;
                2: $_POST('login_error')="You account $login is banned";
                break;
            }
        }
    }
    else{
        $_POST('login_error')="The login or password is incorrect";
    }
    
    header('Location: index.php');
    exit();

на данный момент у меня БД пуста, т.е. после ввода пароля и логина я должен вернуться на главную страницу с сообщением что такого пользователя нет и ещё раз увидеть форму для входа в систму, это теоретически, практически оно так не работает  

Автор: Vigoroso 25.7.2006, 22:14
мне кажется это header не так должен работать... или что? 

Автор: szz 25.7.2006, 22:23
Что за прикол:
Цитата
$_POST('login_error')


Разве так можно обращаться к массиву - индекс в скобки ставить? Впервые вижу...
  Шас проверил - ругается...

Как это у тебя вообще работает?

Добавлено @ 22:27 
Код

 switch ($status[0]){
                0:1:


    Оёёй!   а почему не 
Код

 switch ($status[0]){
                case 0: case 1:

???

   Как у тебя это вообще запускается, ума не приложу!!!

Добавлено @ 22:31 
Цитата
мне кажется это header не так должен работать... или что?  



 К массивам обращаемся не так:
Код

$some_array('sme_index')

 а так:
Код

$some_array['sme_index']

  обрати внимание на квадратные скобки вместо круглых.
    Иначе - фатальная ошибка!

 case проставь в switch!

  Что такое p_POST() - это у тебя функция своя - обертка для $_POST или ты ошибся, написав букву "p" вместо "$"?


  Вот потом посмотри будет ли работать, если нет - опять приводи уже _исправленный_ код и будет дальше лечить. 

Автор: BobiKK 25.7.2006, 22:32
display_errors off наверное smile 

Автор: Vigoroso 25.7.2006, 22:33
Цитата(szz @ 25.7.2006,  22:23)
Что за прикол:
Цитата
$_POST('login_error')


Разве так можно обращаться к массиву - индекс в скобки ставить? Впервые вижу...
  Шас проверил - ругается...

Как это у тебя вообще работает?

Добавлено @ 22:27 
Код

 switch ($status[0]){
                0:1:


    Оёёй!   а почему не 
Код

 switch ($status[0]){
                case 0: case 1:

???

   Как у тебя это вообще запускается, ума не приложу!!!

Добавлено @ 22:31 
Цитата
мне кажется это header не так должен работать... или что?  



 К массивам обращаемся не так:
Код

$some_array('sme_index')

 а так:
Код

$some_array['sme_index']

  обрати внимание на квадратные скобки вместо круглых.
    Иначе - фатальная ошибка!

 case проставь в switch!

  Что такое p_POST() - это у тебя функция своя - обертка для $_POST или ты ошибся, написав букву "p" вместо "$"?


  Вот потом посмотри будет ли работать, если нет - опять приводи уже _исправленный_ код и будет дальше лечить.

это просот капец... я сутки за компом... это результаты...
снкс 

Автор: szz 25.7.2006, 22:34
Проспись, monsir!   smile  smile  smile   Завтра продолжим 

Автор: Vigoroso 25.7.2006, 23:04
Код

require 'config.php';
    require 'functions.php';
    
    if (!isset($_POST['login_error'])) $_POST['login_error']="";
    
    $login = p_POST('login');
    $pass = p_POST('pass');
    
    if (!empty($login) && !empty($password)){
        query = "    SELECT client_Status 
                    FROM Client 
                    WHERE client_Login='$login' AND client_Password='$pass'
                ";
        $result = mysql_query($query);
        $status = mysql_fetch_row($result);
        
        if (empty($status[0])){
            echo " There is no registered user as $login ";
        }
        else{
            switch ($status[0]){
                case 0: case 1:
                    session_start();
                    $_SESSION['login']=$login;
                    $_SESSION['status']=$status[0];
                    //echo " You are logged successfully as $login";
                break;
                case 2: $_POST['login_error']="You account $login is banned";
                break;
            }
        }
    }
    else{
        $_POST['login_error']="The login or password is incorrect";
    }
    
    header('Location: index.php');
    exit();

как бы все исправлено... но все равно скрипт не выболняет поставленной задачи 
p_POST это я не перепутал, как ты выразился - это обертка для $_POST 

Автор: S.A.P. 25.7.2006, 23:39
Vigoroso, убери пока редирект и смотри какие ошибки валятся. С ходу уже вижу, что переменная query записана без доллара. 

Автор: szz 26.7.2006, 08:56
  Например вот так попробуй:

Код

       ...
        if (empty($status[0])){
            $the_message =  " There is no registered user as $login ";
        }
        else{
            switch ($status[0]){
                case 0: case 1:
                    session_start();
                    $_SESSION['login']=$login;
                    $_SESSION['status']=$status[0];
                    $the_message = " You are logged successfully as $login";
                break;
                case 2: $the_message = "You account $login is banned";
                break;
            }
        }
    }
    else{
        $the_message = "The login or password is incorrect";
    }
    
    header('Location: index.php?login_error='.urlencode($the_message));


   Что-то в этом роде. 

Автор: jzZ 26.7.2006, 10:06
Скрипту отправляются пост данные, значит заголовки уже отправлены, следовательно никаких header()... smile 
Значит можно так:
Код

echo "<script language='JavaScript'> document.location.href = 'http://forum.vingrad.ru/index.php?showtopic=105451&st=15';</script>";

 

Автор: szz 26.7.2006, 10:26
Цитата
Скрипту отправляются пост данные, значит заголовки уже отправлены, следовательно никаких header()...


  С каких это пор хедеры нельзя выводить из-за пост данных?
    Насколько я знаю - главное в output ничего не вывести перед хедерами. А пост-данные вполне можно отправлять - сколько раз я такое делал - получал пост данные, обрабатывал их и затем хедером редиректил! 

Автор: jzZ 26.7.2006, 12:28
szz
Ах да ссорри обшибся, я в сценарии накосячил с хтмл )

Добавлено @ 12:28 
не судите строго тока учусь ) 

Автор: Vigoroso 26.7.2006, 12:29
Ты предлагаешь передать сообщение об ошибке через Get... а через POST никак не получится?...
твой варинт сработал, просот я не хочу чтобы пользователь в адресной строке видел какие-либо переменные. 
мой прежний вариент с постом не работает... =\ 

Автор: szz 26.7.2006, 12:53
Что-что-что?! У тебя работает если передавалось через гет?!
Закомменть хедер, посмотри, выпадают ли ошибки!

Добавлено @ 12:58 
Нельзя передавать логин и ПАРОЛЬ через гет, что за бред?!  

Автор: Vigoroso 26.7.2006, 13:04
Кажись не правильно работает запрос 
-----------------
я не передаю пароль и логин через гет, это все через пост, ты мне предложил сообщение об ошибке, если таковая имеется передавать через гет, я вообще не люблю гет... стоит им пользоваться только в крайних случаях

Добавлено @ 13:18 
по идее он как минимум должен был мне вывести "Array", но в ответ тишина
Код

$status = mysql_fetch_array($result,MYSQL_ASSOC);
echo $status;
 

Автор: szz 26.7.2006, 13:20
Цитата
гет... стоит им пользоваться только в крайних случаях

   Нет, бывают случаи, когда он нужен - например для того, чтоб ссылку сделать. Представь себе в этом форуме все эти переменные, которые через гет - передавались бы через пост - тогда бы я не мог никому кинуть ссылку на конкретный топик.

  А редирект через хедер придется через гет пускать, другого способа я не знаю. Ну разве что следать скрытую форму и жаваскриптом засубмитить, например так:
вместо header('Location: index.php?login_error='.urlencode($the_message));
Код

echo "
<form action=index.php method=post name=submitbypost>
<input type=hidden name=login_error value='".htmlspecialchars($the_message)."'>
</form>
<script>document.submitbypost.submit()</script>
";


  Но это все таки извращение какое-то получается. Впрочем, дело вкуса - если уж настолько не любишь гет...  smile

Добавлено @ 13:26 
Цитата

echo $status;

  вообще чтоб дебагить используй 
Код

echo '<pre>';ver_dump(status);echo '</pre>';

   Так ты точно увидишь что там в переменной, даже если тишина - то и ее увидишь smile

Цитата
должен был мне вывести "Array"

   Ну почему же, если ничего не выбралось, то и ничего и не вернулось 

Автор: Vigoroso 26.7.2006, 13:30
Всем спасибо за помощь, во всем разобрался 

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