Переменная PHP Pass на следующую страницу


196

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

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

$myVariable = "Some text";

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

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

Спасибо!


Лучшая и самая простая вещь для передачи переменных - это то, как я объяснил это здесь: stackoverflow.com/questions/14465464/…
Jaro

Ответы:


450

HTML / HTTP не имеет состояния, другими словами, то, что вы делали / видели на предыдущей странице, совершенно не связано с текущей страницей. За исключением случаев, когда вы используете что-то вроде сеансов, куки или переменных 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 вместо сеансов, кроме случаев, когда вы хотите, чтобы данные сохранялись между сеансами, но даже тогда, возможно, лучше хранить их в БД и извлекать их на основе имени пользователя или идентификатора.

ПОЛУЧИТЬ И ПОЧТУ

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

<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. Как только вы к этому привыкнете, все довольно просто.


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

Швит :) Рад, что смог помочь.
Jrgns

4
Nitpick: сессии в PHP обычно тоже обрабатываются куки. Файл cookie сеанса не является постоянным файлом cookie и обычно просто содержит идентификатор сеанса. Но это все еще печенье.
Достойный Дилетант

Разработать мой собственный комментарий. Причина в том, что, как вы сказали, HTTP не имеет состояния. Поэтому PHP все еще нуждается в способе определения сеанса. Это делается путем сохранения cookie на клиенте с идентификатором сеанса. Если cookie-файлы отключены на стороне клиента, PHP иногда использует переменные $ _GET для добавления идентификатора сеанса к ссылкам между страницами. Но это, как правило, считается небезопасным и поэтому обычно отключается большинством веб-серверов (php.ini).
Приличный Дабблер

@fireeyedboy PHP сессии могут также распространяться с использованием переменных GET и POST. В конце дня, сессия упрощает передачу переменных с одной страницы на другую, имея только один фрагмент данных для передачи: идентификатор сессии. Этот идентификатор сеанса затем используется для извлечения ранее сохраненных данных.
Jrgns

30

Спасибо за ответы выше. Вот как я это сделал, надеюсь, это поможет тем, кто следит. Я хочу передать регистрационный номер с одной страницы на другую, следовательно, 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>

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


13
Ваш пример тоже работает без сессий и фактически не получает данные через механизм сессий (в get_reg.php). Вы отправляете regName через форму с get-методом, как описано в Jrgns. Таким образом, переменная доступна на странице get_reg.php через массив $ _GET.
Метатрон

16

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

Вы можете либо внедрить его как скрытое поле в форму, либо добавить его 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

Есть три способа передать значение в 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

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


6

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

используя скрытое поле, мы можем передать 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
**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'];
}

1

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.