Переменная PHP Pass для следующей страницы - PullRequest
180 голосов
/ 16 мая 2009

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

Скажем, на первой странице я создаю переменную

$myVariable = "Some text";

И действие формы для этой страницы - "Page2.php". Так в Page2.php, как я могу получить доступ к этой переменной? Я знаю, что могу сделать это с помощью сеансов, но я думаю, что это слишком много для простой строки, и мне нужно только передать простую строку (имя файла).

Как мне этого добиться?

Спасибо!

Ответы [ 7 ]

413 голосов
/ 16 мая 2009

HTML / HTTP не имеет состояния, другими словами, то, что вы делали / видели на предыдущей странице, совершенно не связано с текущей страницей. За исключением , если вы используете что-то вроде сеансов, файлов cookie или переменных GET / POST. Сеансы и файлы cookie довольно просты в использовании, поскольку сеансы намного безопаснее, чем файлы cookie. Более безопасный, но не полностью безопасный.

Сессия:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

Не забудьте выполнить оператор session_start(); на обеих этих страницах, прежде чем пытаться получить доступ к массиву $_SESSION, а также перед отправкой любого вывода в браузер.

Cookie:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

Большая разница между сеансами и файлами cookie заключается в том, что значение переменной будет храниться на сервере, если вы используете сеансы, и на клиенте, если вы используете файлы cookie. Я не могу придумать какой-либо веской причины использовать файлы cookie вместо сеансов, кроме случаев, когда вы хотите, чтобы данные сохранялись между сеансами, но даже тогда, возможно, лучше хранить их в БД и извлекать их по имени пользователя или идентификатору. 1019 *

GET и POST

Вы можете добавить переменную в ссылке на следующую страницу:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

Это создаст переменную GET.

Другой способ - включить скрытое поле в форму, которая отправляется на вторую страницу:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

А затем на второй странице:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

Просто измените метод для формы на post, если вы хотите сделать это по почте. Оба одинаково небезопасны, хотя GET легче взломать.

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

30 голосов
/ 23 ноября 2011

Спасибо за ответы выше. Вот как я это сделал, надеюсь, это поможет тем, кто следит. Я хочу передать регистрационный номер с одной страницы на другую, следовательно regName и regValue :

Создайте свою первую страницу, назовите ее set_reg.php :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

Создайте вторую страницу, назовите ее get_reg.php :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

Хотя и не такой всеобъемлющий, как ответ выше, для моих целей это просто иллюстрирует взаимосвязь между различными элементами.

16 голосов
/ 16 мая 2009

Передача данных в запросе

Вы можете либо внедрить его как скрытое поле в форму, либо добавить его URL-адрес действия формы

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

или

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

Обратите внимание, это также иллюстрирует использование htmlentities и urlencode при передаче данных.

Передача данных в сеансе

Если данные не нужно передавать на клиентскую сторону, тогда сеансы могут быть более подходящими. Просто вызовите session_start () в начале каждой страницы, и вы можете получить и установить данные в массив $ _SESSION.

Безопасность

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

Поскольку вы явно только начинаете здесь, стоит напомнить, что это относится к любым данным, которые поступают в $ _GET, $ _POST или $ _COOKIE - предположим, что ваш злейший враг обработал содержимое этих массивов и код, соответственно!

9 голосов
/ 24 января 2012

Существует три способа передачи значения в php.

  • По почте
  • К получению
  • Делая переменную сеанса

Эти три метода используются для разных целей. Например, если мы хотим получить наше значение на следующей странице, мы можем использовать метод 'post' ($ _POST) как: -

$a=$_POST['field-name'];

Если нам требуется значение переменной на нескольких страницах, мы можем использовать переменную сеанса как: -

$a=$_SESSION['field-name];

Прежде чем использовать этот синтаксис для создания переменной SESSION, мы сначала должны добавить этот тег в самом начале нашей php-страницы

session_start(); 

Метод GET обычно используется для печати данных на той же странице, которые использовались для ввода данных от пользователя. Его синтаксис такой:

$a=$_GET['field-name'];

Метод POST обычно использует более безопасный метод, чем GET, потому что когда мы используем метод Get, он может отображать данные в строке URL-адреса. Если данные являются более конфиденциальными данными, такими как пароль, то это может быть inggeris.

7 голосов
/ 16 мая 2009

Сеансы были бы единственным хорошим способом, вы могли бы также использовать GET / POST, но это было бы потенциально небезопасно.

5 голосов
/ 08 июня 2017

попробуйте этот код

используя скрытое поле, мы можем передать php varibale на другую страницу

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

передать переменную php в значение скрытого поля, чтобы вы могли получить доступ к этой переменной на другой странице

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>
1 голос
/ 27 января 2017
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

стр. 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}
...