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


Автор: JORDAN 1.5.2008, 19:14
Сразу говорю - я только учусь, так что ногами не бить. Сканировал форум часа три, думал найти ответ сам...
Короче идея простая: пишу гостевуху одним файлом, без БД. Проблема - вывести что-то вроде "Сообщение добавлено", а потом переадресовать на главную (ну с 2-хсекундной задержкой скажем). Но до header ничего выводить нельзя. 
Поэтому пока остановился на 

die("<script language='JavaScript'>window.location='index.php'</script>"); 

но сообщения так не выведешь, т.к. сразу вылетаю на index.php.

Заранее благодарю за дельные советы.

Автор: Feldmarschall 1.5.2008, 19:20
Ну, во-первых, все поголовно гостевые после добавления выводят не на главную, а на список сообщений. И человек видит свое сообщение - то есть, ему не нужно писать бессмысленных, по сути, фраз.
Это я считаю наиболее адекватным решением. 
а в яваскрипте есть средства задержки выполнения скрипта.

Автор: JORDAN 1.5.2008, 20:12
Спасибо за критику конечно. Но по делу ничего конкретного.
Главная и имелась ввиду главная гостевой со списком сообщений.О бессмысленности данной задачи позволь мне самому решать. 
И просьба у кого нет конкретных предложений - ну не тратьте свое и мое время на всякий флуд. 
Если есть средства - то какие, а так... И интересно было бы решение чисто на пхп. Хотя и java тоже пишите (просто с java мало знаком). 

Автор: Feldmarschall 1.5.2008, 20:29
Жесть.
Кто-нибудь ещё здесь критику видит? =)

Добавлено через 4 минуты и 23 секунды
JORDAN, если хочется критики, то в качестве совета: мне кажется, что брать такой капризный тон с первых же сообщений на форуме - не лучшая идея.

Автор: Fortop 1.5.2008, 20:44
JORDAN, 
Тебе нужен переход на другую страницу через несколько секунд?
А по темам ты внимательно искал?

http://forum.vingrad.ru/forum/topic-188801/unread-1/hl/refresh/index.html

Автор: Azalis 1.5.2008, 20:45
Вопрос вообще говоря не по адресу, так как его скорее в JS нада...

А ответ примерно такой:
Код

<script language="javascript" type="text/javascript">
setInterval("top.location.href='{LOCATION}'",{TIMER});
</script>

Где:
{LOCATION} - Путь куда нада переносить
{TIMER} - Время через которое переносить

Автор: JORDAN 2.5.2008, 09:41
Благодарю за ваши ответы. 
Feldmarschall, извини за тон, не хотел обидеть.

Автор: Feldmarschall 2.5.2008, 09:52
Вообще-то, обидеть меня - задача не самая тривиальная ;-)

Добавлено через 4 минуты и 24 секунды
Недостаток всех методов с задержкой состоит в том, что они не выполняют главную функцию редиректа - защиту от повторного сабмита.
То есть, по-хорошему, надо сначала делать редирект нормальным локейшеном, который уже, при желании, может вести на страницу с двухсекундным сообщением.

Автор: JORDAN 2.5.2008, 11:53
Если можно, то на примере покажи.
И можно ли такое сделать в одном файле? В принципе для меня не так важно сколько файлов, но если можно одним без особых ухищрений и извращений то хотелось бы освоить.
А с location я не раздуплил как сделать. Ведь перед ним ничего нельзя выводить (типа Сообщение добавлено успешно).
Выше приведенные методы кстати работали как-то криво. Основная идея была, чтобы форма пропадала после ввода данных, и выводилась надпись "". Так вот  при использовании

<script language="javascript" type="text/javascript">
setInterval("top.location.href='{LOCATION}'",{TIMER});
</script>

просто была задержка, а переадресации вообще не было.

То же с МЕТА.

Нашел такую фишку

<script language='Javascript'>function reload() {location = 'index.php'}; setTimeout('reload()', 1500);</script>
 
переадресацию делает, но форма остается, а надпись выскакивает ниже формы.

Выходит проще всего обработчик вынести в отдельный файл...

Автор: Feldmarschall 2.5.2008, 12:13
Непонятно, какие претензии к форме и надписи.
они выводятся там, где ты их сам выводишь.
если надпись выводится ниже формы - значит, в твоем скрипте она прописана ниже формы. тебе нужен дядя с форума, чтобы подсказать поменять их местами?
чтобы ничего не не выводилось после надписи, есть оператор exit

Автор: NNaarreekk 2.5.2008, 13:55
Вот так тоже красиво получаетсяsmile
Код

if($x='add' && empty($_SESSION['xxx'])){
.....
....
$_SESSION['xxx']=1;
header("Location: index.php?x=$x");
}
if($x='add' && !empty($_SESSION['xxx']){
echo"OK";
$_SESSION['xxx']=0;
}


Я лично так делаю!

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