Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/36: Рейтинг темы: голосов - 36, средняя оценка - 4.64
DexusMaximus
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 9
1

PHP redirect с данными из POST Как обмануть?

22.11.2012, 11:53. Просмотров 6874. Ответов 12
Метки нет (Все метки)

Здравствуйте, уважаемые гуру. Подскажите, есть ли возможность автоматического редиректа на новый URL с данными, полученными из формы методом POST
Стандартно - не работает, поскольку заголовок уже существует.
PHP
1
2
3
4
5
6
7
8
9
10
<?php
 
$host  = $_SERVER['HTTP_HOST'];
$newurl1=$_GET["menu"];
$newurl2=$_GET["menu1"];
$newurl= "http://$host/$newurl1/$newurl2";
    header('Location: ' . $newurl);
    exit();
 
?>
Выдает Cannot modify header information - headers already sent by

Может есть способ как это обойти?
Заранее безмерно благодарен.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 11:53
Ответы с готовыми решениями:

Redirect с параметром, методом POST
Делаю Redirect с параметром ,по умолчанию испоьзуется метод GET и все...

Php redirect
Ув. юзеры) имеется код(ниже кинул). Как сделать, чтобы успешно авторизованного...

Redirect 301 и 410 на PHP
Привет Всем! Подскажите, как сделать редирект на PHP нескольких страниц....

В ASP Response.Redirect(...). Есть ли аналог в PHP ?
В ASP Response.Redirect(...). Есть ли аналог в PHP ? Стоит IIS+фильтр PHP....

Вапрос как в php отправить post запрос
Как в php отправить post запрос на страничку напримерь 1.ru/index.php

12
SATMAN
52 / 52 / 9
Регистрация: 09.10.2009
Сообщений: 984
22.11.2012, 12:17 2
Странно , ты пишешь про POST , а ипользуешь $_GET["menu"]; ???
Попробуй использовать SESSION .
0
DexusMaximus
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 9
22.11.2012, 12:21  [ТС] 3
Цитата Сообщение от SATMAN Посмотреть сообщение
Странно , ты пишешь про POST , а ипользуешь $_GET["menu"]; ???
Разумеется POST. Не успел исправить код.
Цитата Сообщение от SATMAN Посмотреть сообщение
Попробуй использовать SESSION
Можно простой пример конструкции?
Спасибо
0
NEbO
593 / 460 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 3
22.11.2012, 13:24 4
неважно что использовать. код правильный, замечание: при использовании редиректа не на основную страницу (http://example.com), адрес сайта можно не указывать, можно просто header('Location: /path/to/page.html') -- вдруг сервер HTTP_HOST не передает, или передает но неправильно? ) а ошибка эта возникает из-за того, что где-то до этого происходит вывод. советы тоже стандартные: проверить, чтоб ни в одном скрипте, до этой строчки не было небуферизированного echo или каких-либо символов до "<?php". если же они есть и убрать сложно, достаточно в стартовом скрипте указать ob_start().

Добавлено через 5 минут
ах, да. еще возможны какие-то сообщения/предупреждения -- это тоже вывод. например, если в $_SERVER вдруг по какой-то причине не оказалось HTTP_HOST или $_POST['menu1'] не определена -- выводится E_NOTICE с сообщением undefined index at тра-ля-ля. лучше все-таки на всякий пожарный проверять:
PHP
1
2
$newurl1 = isset($_POST['menu']) ? $_POST['menu'] : '';
$newurl2 = isset($_POST['menu1']) ? $_POST['menu1'] : '';
ну или, в крайнем случае, error_reporting(0)
0
DexusMaximus
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 9
22.11.2012, 13:35  [ТС] 5
Пробую
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
ob_start();
$host  = $_SERVER['HTTP_HOST'];
$newurl1 = isset($_POST['menu']) ? $_POST['menu'] : '';
$newurl2 = isset($_POST['menu1']) ? $_POST['menu1'] : '';
$newurl= "http://$host/$newurl1/$newurl2";
 
  header('Location: ' . $newurl);
    exit();
 
?>
Тот же результат. $host убирал - не реагирует
0
NEbO
593 / 460 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 3
22.11.2012, 13:42 6
из браузера обращение идет именно к этому скрипту (всмысле, он не подключается из другого)?

"<?php" идет точно в самом начале файла, и до него нет ни одного символа (пробелы тоже считаются как символ)?
0
DexusMaximus
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 9
22.11.2012, 13:44  [ТС] 7
скрипт получает данные из формы test.html
<?php в самом начале скрипта
0
NEbO
593 / 460 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 3
22.11.2012, 13:57 8
значит содержимое файлов примерно такое:
test.html:
HTML5
1
2
3
4
5
<form action="/redirect.php" method="post">
<input type="hidden" name="menu" value="folder"/>
<input type="hidden" name="menu1" value="file.html"/>
<input type="submit"/>
</form>
а redirect.php -- это код, который выше.
все так?
1. зачем в коде стоит exit?
2. какой-то вывод, кроме "Cannot modify header information - headers already sent by" присутствует?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
22.11.2012, 13:59 9
кодировка самого скрипта какая?

Добавлено через 1 минуту
Цитата Сообщение от NEbO Посмотреть сообщение
1. зачем в коде стоит exit?
чтобы скрипт закончил выполняться если там еще что то есть
1
NEbO
593 / 460 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 3
22.11.2012, 14:01 10
точно. utf-8 с bom может быть, тогда нужно поменять на просто utf-8 без бома, ну или на ansi, на худой конец.
ну экзит без if-а выглядит как-то не очень, по меньшей мере.
0
DexusMaximus
0 / 0 / 1
Регистрация: 14.11.2012
Сообщений: 9
22.11.2012, 14:08  [ТС] 11
Поменял кодировку на UTF-8 без Boom и что-то заработало. Может кому пригодиться.
Файл с формой:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<form action="test1.php" method="POST">
<SELECT name="menu">
<OPTION selected value="#">Опция 1:</option>
<OPTION value="url1">185</option>
<OPTION value="url2">195</option>
</SELECT>
<SELECT name="menu1">
<OPTION selected value="#">Опция 2:</option>
<OPTION value="url3">65</option>
<OPTION value="url4">70</option>
</SELECT>
<INPUT type=submit>
</FORM>
url1 - заменить на свой вариант

Файл test1.php
PHP
1
2
3
4
5
6
7
8
<?php
ob_start();
$host  = $_SERVER['HTTP_HOST'];
$newurl1 = isset($_POST['menu']) ? $_POST['menu'] : '';
$newurl2 = isset($_POST['menu1']) ? $_POST['menu1'] : '';
$newurl= "http://$host/$newurl1/$newurl2";
header('Location: ' . $newurl);
?>
0
NEbO
593 / 460 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
Завершенные тесты: 3
22.11.2012, 14:11 12
ob_start() можно убрать, он не нужен
1
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
22.11.2012, 14:14 13
На будущее - советую почитать Что означает предупреждение "headers already sent"
0
22.11.2012, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 14:14

Как правильно передать php.exe post запрос?
Как правильно передать php.exe post запрос из другой программы? Пытаюсь так:...

Как склеить в php два текстовых поля формы post?
Не удается никак склеить два текстовых поля формы. Мне нужно чтобы в форме post...

Как из Delphi через POST-запрос передать значение в переменнную PHP
Допустим из делфи мне нужно передать текст &quot;12345&quot;. Как записать передаваемый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru