Трансляция переменной, не вход-ей в форму при нажатии ОК в форме

Australian_A

Новичок
Трансляция переменной, не вход-ей в форму при нажатии ОК в форме

На странице есть форма, в которой юзер выбирает из всяких списков и жмет в конце кнопочку. Страница вызывает сама себя, но уже с другими параметрами. Еще есть переменная, которая перешла к нам из предыдущей формы. Принажатии кнопочки эта переменная не транслируется в новую форму. Как решить проблему?

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

AmadMike

Новичок
Сессии
или куки (в зависимости от того что конкретно нужно).
 

Australian_A

Новичок
Решил использовать сессии. Почитал: очень классная штука
Вначало вставил session_start();
Страница вызывается одной из команд
PHP:
data.php?pressed=fin1
data.php?pressed=fin2
data.php?pressed=fin3
При вызове через вторую ссылку так выглядит строка
http://localhost/ccp/data.php?pressed=fin2
но если я вывожу
PHP:
echo $pressed;
, то получаю ШИШ.
Выводится fin1, а должно fin2
 

Australian_A

Новичок
дальше табличка и картинка(карта сслылок), в которой по нажатию открывается одно из окон
PHP:
data.php?pressed=fin1 
data.php?pressed=fin2 
data.php?pressed=fin3
Дословно так
PHP:
<? session_start();
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr>
    <td align="center">
      <img src="diagram.jpg" usemap="#diagramma">
	<map name="diagramma">
	  <area href="data.php?pressed=fin1" target="_blank" shape="rect" coords="178,4,320,78">
	  <area href="data.php?pressed=fin2" target="_blank" shape="rect" coords="406,4,549,78">
	  <area href="data.php?pressed=fin3" target="_blank" shape="rect" coords="639,4,783,76">
и далее
 

AmadMike

Новичок
Не верю!
Во-первых, пользуйся массивами $_GET и $_POST.
Во-вторых, если просто написать:
PHP:
<?php
session_start();
if (isset($var)) {
	echo $var, '<br />';
}
?>
<a href="?var=a">a</a><br>
<a href="?var=b">b</a>
Будет выводится все как надо.
Не изменяться будет в таком случае:
PHP:
<?php
session_start();
if (isset($var)) {
	$_SESSION['var'] = $var;
	echo $var, '<br />';
}
?>
<a href="?var=a">a</a><br>
<a href="?vat=b">b</a>
Т.к. variables_order = "GPCS" обычно.
 

Australian_A

Новичок
При входе на страницу имею строку
http://localhost/ccp/data.php?pressed=fin2

В форме выбираю нужные данные и нажимаю ОК. Вызывается эта же страница с нужными параметрами
http://localhost/ccp/data.php?from_month=1&from_year=2005&to_month=4&to_year=2005&shag=1&submit=OK
Но все выводы выводят пустоту
PHP:
echo $pressed;
echo $_GET[$pressed];
echo $_GET[pressed];
echo $_SESSION['pressed'];
echo $_SESSION['$pressed'];
 

AmadMike

Новичок
Друг, почитай-ка сначала вообще немного о том что такое PHP и как он устроен.
Во первых $_SESSION['$pressed'] и $_GET[$pressed] - полный бред.
$_GET[pressed] - прокатит, но по-хорошему надо использовать кавычки.

Теперь прочитай свою строку запроса еще раз, где ты в ней видишь pressed?
Ну и что ты хочешь чтобы еще и PHP приобрел функцию телепатии и понял что ты от него хочешь???
По всей видимости ты назначил action для формы, иначе к запросу бы прибавилась строка pressed, либо убирай action либо добавляй поле hidden с name="pressed" и value="fin2"
 

Australian_A

Новичок
AmadMike
Во первых $_SESSION['$pressed'] и $_GET[$pressed] - полный бред.
Я знаю, просто решил проверить
Теперь прочитай свою строку запроса еще раз, где ты в ней видишь pressed?
Как я понимаю это ты про вторую строку запроса. Там нет pressed. Так в этом и проблема, мне надо чтобы было.
Когда страница грузится в первый раз переменная pressed есть, но она не передается, когда я нажимаю ОК в форме.
А если убрать action из формы, то тогда pressed все равно не добавляется при нажатии ОК.
А если создавать скрытое поле, то мне ведь не надо передавать всегда одно и тоже. Что пользователь нажал, то и надо передавать, так что
поле hidden с name="pressed" и value="fin2"
не покатит
 

garlian

Новичок
А зачем скрытое поле, если вначале хотели сессиями? Что уже мешает ими воспользоваться? От одного к другому прыгаете.
 

AmadMike

Новичок
Да кстати.
Сначала записываешь в сессию свою переменную -
PHP:
$_SESSION['pressed'] = $_GET['pressed'];
А потом при отправке формы просто смотришь -
PHP:
$_SESSION['pressed']
Или просто $pressed (но все же лучше пользоваться глобальными массивами и выключить опцию register_globals, почитай об этом).

-~{}~ 15.11.06 21:30:

Только не забудь и в том и в другом случае вызвать функцию session_start();
 

С.

Продвинутый новичок
Дорогой, Австралийский А!

Все дело в том, что до нажатия ОК и после нажатия работают две совершенно разные программы. Все данные, что было "до нажатия ОК" не имеют ни малейшего отношения к тому, что будет "после" (если только ты эти данные каким либо специальным образом не передашь во вторую программу).

Народ тут тебе и рассказывал способы предачи данных из одной программы в другую.
 

Australian_A

Новичок
С.
Так я это понимаю. Хотел сделать сессиями. Не получается. Неужели руки не оттуда растут?
Тогда такой вопрос:
ФАК почитал. Если использовать register_globals=on притом, что никаких процедур авторизации там нет, и если кто-то захочет чего-то куда топ дставить, то только себе навредит, можно пользоваться спокойно.
А все данныые передавать через $_SESSION
Я все правильно понимаю:
так будет работать и работать безопасно?
 

AmadMike

Новичок
Australian_A, почему ты так упорно не хочешь почитать хотя бы что-нибудь по PHP прежде чем задавать такие дурацкие вопросы???
Ну купи ты себе книженцию в конце концов, там тебе все человеческим языком и по порядку расскажут.
Понимаешь, если задавать вопросы, не думая, то и толку от ответов никаких не будет, ты все-равно не поймешь даже того что на самом деле тебе надо было узнать.

Почитай, что такое отладка, напиши сначала пару строчек, выведи содержимое всех переменных. Потом создай примитивную форму, отправь данные разными методами, посмотри массивы $_GET и $_POST. Почитай ЕЩЕ РАЗ ВНИМАТЕЛЬНО о сессиях, зарегистрируй несколько переменных в сессии, перегрузи страницу, посмотри массив $_SESSION. И только потом разбирайся с тем что хочешь сделать ты. А вообще по-хорошему, погоди трогать сессии, дай себе труда хотя бы месяцок познакомится поближе с языком.
Обязательно зайди сюда - http://phpfaq.ru/na_tanke и ПРОЧУВСТВУЙ все что там написано, поставь себя на место сервера и php и пойми что они чувствуют когда ты пишешь и запускаешь такие вещи ;)

-~{}~ 16.11.06 20:15:

Почитай значит еще раз!!!
Если использовать register_globals=on притом, что никаких процедур авторизации там нет, и если кто-то захочет чего-то куда топ дставить, то только себе навредит, можно пользоваться спокойно.
Опять могу сказать, посмотри еще где-нибудь. Конечно если ты напишешь программу которая будет выводить Hello World то возможно, что ничего страшного и не будет. Знаешь, проще сразу привыкнуть писать с выключенной register_globals, чем потом привыкать.
Понимаешь, вот это твое
А я делал так

$_SESSION['pressed'] = $pressed;

И все равно не работало
Говорит о том, что ты не слушаешь абсолютно ничего того, что тебе говорят. Я же написал, что при register_globals у тебя создаются переменные из всех глобальных массивов, в том числе из $_GET и $_SESSION, если ключи имеют одинаковые значения, то такая переменная будет перезаписывать свое значение, а я тебе уже писал, что обычно переменные сессии регистрируются последними (если ты конечно не менял это в настройках). Поэтому твоя эта строка равнозначна такой:
PHP:
$_SESSION['pressed'] = $_SESSION['pressed'];
Понимаешь?
Ну напиши ты программу без всяких форм. Сначала зарегистрируй переменную в сессию, а потом достань ее оттуда, если работает, то значит уже никакого труда не составит зарегистрировать там что-нибудь другое, в том числе и значение переменной.
 
Сверху