Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как передать переменную методом POST?
 
 автор: Владимир55   (31.01.2008 в 10:59)   письмо автору
 
 

В рнр-файле х.рнр формируется переменная $x, а в конце всех действий выполняется код

echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=admm.php;'></HEAD></HTML>";


Как в файле х.рнр записать переменную $x в глобальные переменные с тем, что бы затем извлечь её в файле admm.php?

   
 
 автор: Loki   (31.01.2008 в 11:04)   письмо автору
 
   для: Владимир55   (31.01.2008 в 10:59)
 

Вообще рефреш обычно как раз и используют для того, чтобы обнулить массив POST.
Может, если подробнее изложить задачу, то появятся другие пути решения?

   
 
 автор: Thrasher   (31.01.2008 в 11:09)   письмо автору
 
   для: Владимир55   (31.01.2008 в 10:59)
 

Использовать GET:
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=admm.php?x=".$x.";'></HEAD></HTML>";

Или сессии.

   
 
 автор: Владимир55   (31.01.2008 в 11:16)   письмо автору
 
   для: Thrasher   (31.01.2008 в 11:09)
 

Через GET, сессии и текстовые файлы я уже научился. А вот подумал, нельзя ли это же сделать через POST? Ведь когда я использую форму (типа <form method="POST" >), то значения уходят в глобальные переменные. А нет ли такого оператора, который загнал бы их туда принудительно,без формы?

   
 
 автор: Loki   (31.01.2008 в 11:48)   письмо автору
 
   для: Владимир55   (31.01.2008 в 11:16)
 

Запросто. Вот только каковы цели?

   
 
 автор: Владимир55   (31.01.2008 в 13:23)   письмо автору
 
   для: Loki   (31.01.2008 в 11:48)
 

-

   
 
 автор: Петр   (31.01.2008 в 11:13)   письмо автору
 
   для: Владимир55   (31.01.2008 в 10:59)
 

Только в сессию или куку. иначе никак. ну разве только что записать в файл, но это муторно и долго. а зачем делается рефреш?

   
 
 автор: Владимир55   (31.01.2008 в 13:24)   письмо автору
 
   для: Петр   (31.01.2008 в 11:13)
 

Loki
Запросто. Вот только каковы цели?


Просто хочу этому научиться, освоить еще один способ передачи данных между файлами.
На будущее.

Как это делается через POST?

   
 
 автор: Loki   (31.01.2008 в 13:50)   письмо автору
 
   для: Владимир55   (31.01.2008 в 13:24)
 

Параметры POST передаются броузером в теле запроса. Находясь на сервере вы не сможете заставить броузер клиента отправить подобные параметры. Вы можете только с помощью скрипта прикинуться броузером, отдав другому скрипту заголовки, которые бы отправил настоящий броузер.
Так что сделать это можно. Но в пределах одного сервера нецелесообразно.

   
 
 автор: mihdan   (31.01.2008 в 14:01)   письмо автору
 
   для: Владимир55   (31.01.2008 в 13:24)
 

Sockets

   
 
 автор: cheops   (31.01.2008 в 15:03)   письмо автору
 
   для: Владимир55   (31.01.2008 в 13:24)
 

Если не использовать форм, то передать значение методом POST можно через сокеты, такой способ подробнее описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1879.

   
 
 автор: Владимир55   (31.01.2008 в 15:40)   письмо автору
 
   для: cheops   (31.01.2008 в 15:03)
 

Более-менее проясняется дело...

Скажите, а что же за способ, предложенный mihdan?

$GLOBALS['test'] = $x;  

У меня он что-то не заработал...

   
 
 автор: Loki   (31.01.2008 в 15:56)   письмо автору
 
   для: Владимир55   (31.01.2008 в 15:40)
 

>У меня он что-то не заработал...
Неудивительно. К передаче данных между скриптами он не имеет никакого отношения.

   
 
 автор: mihdan   (01.02.2008 в 10:48)   письмо автору
 
   для: Владимир55   (31.01.2008 в 15:40)
 

>записать переменную $x в глобальные переменные
код был дан для этого

   
 
 автор: mihdan   (31.01.2008 в 13:27)   письмо автору
 
   для: Владимир55   (31.01.2008 в 10:59)
 


$GLOBALS['test'] = $x;

   
 
 автор: divbyzero   (01.02.2008 в 01:25)   письмо автору
 
   для: mihdan   (31.01.2008 в 13:27)
 

Если данные через пост используй вот кусочек :


<?
var_dump
($_POST);  // вывести на экран все переданные переменные
?>


Если нада потом их использовать, то все просто как и с любым массивом:

<?
$name 
$_POST['name'];
echo 
'HELLO WORLD! My name is '$name;
?>

   
 
 автор: Владимир55   (01.02.2008 в 11:30)   письмо автору
 
   для: divbyzero   (01.02.2008 в 01:25)
 

Я в одном файле писал

$x = "Проба";
$GLOBALS['test'] = $x; 
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=admm.php;'></HEAD></HTML>"; 
а в другом, на который осуществляется переход, было

$test = $_POST['test']; 
echo $test; 


И ничего не выводилось.

   
 
 автор: mihdan   (01.02.2008 в 11:34)   письмо автору
 
   для: Владимир55   (01.02.2008 в 11:30)
 


Если нужен ПОСТ - используй СОКЕТЫ
<?
// Я в одном файле писал
session_start();
$x "Проба";
$_SESSION['test'] = $x
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=admm.php;'></HEAD></HTML>"

//а в другом, на который осуществляется переход, было

session_start();
$test $_SESSION['test']; 
echo 
$test

//И все выводилось.
?>

   
 
 автор: Владимир55   (01.02.2008 в 14:26)   письмо автору
 
   для: mihdan   (01.02.2008 в 11:34)
 

И не получилось!

На первой странице пишу такой код:

session_start();
$x = "Проба";
$_SESSION['test'] = $x;


Получаю диагностическое сообщение:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at w:\home\lucky\www\999.php:9) in w:\home\lucky\www\999.php on line 11

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at w:\home\lucky\www\999.php:9) in w:\home\lucky\www\999.php on line 11

В строке 11 - session_start();

Пробовал и на Денвере, и на сервере.

   
 
 автор: Freddie_X   (01.02.2008 в 14:50)   письмо автору
 
   для: Владимир55   (01.02.2008 в 14:26)
 

Значит у вас что-то выводится на экран до session_start();

   
 
 автор: cheops   (01.02.2008 в 15:02)   письмо автору
 
   для: Владимир55   (01.02.2008 в 14:26)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
 
 автор: Владимир55   (01.02.2008 в 15:21)   письмо автору
 
   для: cheops   (01.02.2008 в 15:02)
 

Понятно, теперь работает.

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

А для сокетов тоже такое требование - отсутствие предшествующих обращений к броузеру? В Самоучителе я что-то не нашел информации по сокетам. Где об этом можно прочесть попроще?

   
 
 автор: mihdan   (01.02.2008 в 18:00)   письмо автору
 
   для: Владимир55   (01.02.2008 в 15:21)
 

>В свое время я с куками также барахтался, и это очень неудобно. Надеялся, что сессии лишены этого недостатка, ан нет...
Попробуй первой строкой в файле написать ob_start(); избавишься от этого - можешь заголовки посылать в любое время
>
>А для сокетов тоже такое требование - ?
Нет

   
 
 автор: Владимир55   (01.02.2008 в 18:33)   письмо автору
 
   для: mihdan   (01.02.2008 в 18:00)
 

Но где то придется вставить и ob_end_flush() ?

Так?

   
 
 автор: mihdan   (01.02.2008 в 18:34)   письмо автору
 
   для: Владимир55   (01.02.2008 в 18:33)
 

зачем? вы пробуйте - вопросов меньше будет

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования