Несколько раз обновить страницу

Статус
В этой теме нельзя размещать новые ответы.

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
823
Реакции
342
Есть задача несколько раз обновить страницу при условии, что переменная пустая. Обновить допустим 5 раз и проверять не появились ли данные в переменной. Если появятся, перестать обновлять и вывести эти данные. Если не появятся, то вывести заглушку.

Я вот придумал такую конструкцию на сессиях:
PHP:
$text = "здесь данные могут быть, а могут и не быть"

if (empty($text)) {
                
                    if(!isset($_SESSION['reload'])) $_SESSION['reload'] = '0';
                
                    if($_SESSION['reload'] == '0') {
                        $_SESSION['reload'] = '1';
                        header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);                    
                    }
                
                    if($_SESSION['reload'] == '1') {
                        $_SESSION['reload'] = '2';
                        header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);                    
                    }
                
                    if($_SESSION['reload'] == '2') {
                        $_SESSION['reload'] = '3';
                        header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);                    
                    }
                
                    if($_SESSION['reload'] == '3') {
                        $_SESSION['reload'] = '4';
                        header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);                    
                    }
                
                    if($_SESSION['reload'] == '4') {
                        $_SESSION['reload'] = '5';
                        header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);                    
                    }                
                
                    if($_SESSION['reload'] == '5') {
                          unset($_SESSION['reload']);
                          $text = "Заглушка";   
                     }      
                                
                         
}

echo  $text;

Этот велосипед работает только наполовину. Т.е. обновления происходят, пока в переменной $text не появятся данные. Когда появляются, то они выводятся, как положено.
Но в случае если данные так и не появились, заглушка не выводится и страница уходит в бесконечное обновление.

Два вопроса с знатокам:

1. Как сделать код не таким нубским, а более вменяемым и коротким?
2. Почему не выводится заглушка?

Заранее спасибо :)
 
Нужно при условии что переменная текст пустая или нету параметра обновлять страницу с неким get параметром, и когда переменная текст не пустая то обновить страницу без параметра. Как-то так
 
Нужно при условии что переменная текст пустая или нету параметра обновлять страницу с неким get параметром, и когда переменная текст не пустая то обновить страницу без параметра. Как-то так
Зачем? Мне и на сессиях подходит. Лишние движухи со ссылкой мне ни к чему. Потому что там всё построено на аяксе и все ссылки состоят исключительно из GET
 
if($_SESSION['reload'] > 0 && $_SESSION['reload'] < 5) {
$_SESSION['reload']++;
header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);
}
else {
unset($_SESSION['reload']);
$text = "Заглушка";
}
 
if($_SESSION['reload'] > 0 && $_SESSION['reload'] < 5) {
$_SESSION['reload']++;
header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);
}
else {
unset($_SESSION['reload']);
$text = "Заглушка";
}
Не работает, потому что для того, чтобы делать проверку
PHP:
$_SESSION['reload'] > 0 && $_SESSION['reload'] < 5
нужно чтобы
PHP:
$_SESSION['reload']
была уже определена, а её нет. А если прописать вначале к примеру
PHP:
$_SESSION['reload'] = '1';
то происходит по такому же сценарию, как я описывал - если переменная $text пустая, происходит бесконечное обновление.
Но за наводку с коротким кодом спасибо :)
 
session_start();

$text = "";

if(!isset($_SESSION['reload'])) {
$_SESSION['reload'] = 0;
}

if (empty($text)) {
if($_SESSION['reload'] >= 0 && $_SESSION['reload'] <= 5) {
echo $_SESSION['reload'];
++$_SESSION['reload'];
header("Refresh:0");
//header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);
}
else {
unset($_SESSION['reload']);
$text = "Заглушка";
}
}

echo $text;

Попробуйте использовать вместо Location -> Refresh:0
 
session_start();

$text = "";

if(!isset($_SESSION['reload'])) {
$_SESSION['reload'] = 0;
}

if (empty($text)) {
if($_SESSION['reload'] >= 0 && $_SESSION['reload'] <= 5) {
echo $_SESSION['reload'];
++$_SESSION['reload'];
header("Refresh:0");
//header("Location: http://".DOMAIN.$_SERVER['REQUEST_URI']);
}
else {
unset($_SESSION['reload']);
$text = "Заглушка";
}
}

echo $text;

Попробуйте использовать вместо Location -> Refresh:0
У меня всё так же построено.
А если прописать
PHP:
header("Refresh:0");
то страница загружается, но заглушка не выводится и при этом страница бесконечно обновляется :)

В общем не работает вывод заглушки, хоть ты тресни. И не понятно почему.
Получается что $_SESSION['reload'] всегда меньше пяти, если срабатывает обновление.
Только что выяснил, что она всегда равна единице, т.е. не увеличивается.

Знатоки, подскажите, как в этом случае можно отдебажить всё это дело с обновлениями?
 
Последнее редактирование:
В общем всё получилось. были проблемы с session_start(); :confused:
@dejurin спасибо за помощь :)
 
В общем всё получилось. были проблемы с session_start(); :confused:
@dejurin спасибо за помощь :)
Вот как бывает, я как чувствовал, что у вас в коде нет session_start(); и добавил его к ответу, хотя думал вы эту функцию просто опустили.
Кстати, рассмотрите мой вариант с короткой конструкцией, меньше кода - меньше ресурсов.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху