PHP Передать переменную на следующую страницу
Это кажется довольно простым, но я не могу найти хороший способ сделать это.
Скажем, на первой странице я создаю переменную
И действие формы для этой страницы – «Page2.php». Итак, в файле Page2.php, как я могу получить доступ к этой переменной? Я знаю, что могу делать это с сессиями, но я думаю, что это слишком много для простой строки, и мне нужно просто передать простую строку (имя файла).
HTML / HTTP является безстоящим, другими словами, то, что вы делали / видели на предыдущей странице, полностью отключено от текущей страницы. За исключением случаев, когда вы используете что-то вроде сеансов, файлов cookie или GET / POST. Сессии и файлы cookie довольно просты в использовании, причем сеанс гораздо безопаснее, чем файлы cookie. Более безопасный, но не полностью безопасный.
//On page 1 $_SESSION['varname'] = $var_value; //On page 2 $var_value = $_SESSION['varname'];
Не забудьте запустить инструкцию session_start() на обеих этих страницах, прежде чем пытаться получить доступ к массиву $_SESSION , а также перед тем, как любой вывод будет отправлен в браузер.
//One page 1 $_COOKIE['varname'] = $var_value; //On page 2 $var_value = $_COOKIE['varname'];
Большая разница между сеансами и куки-файлами заключается в том, что значение переменной будет храниться на сервере, если вы используете сеансы и на клиенте, если вы используете файлы cookie. Я не могу придумать какой-либо веской причины использовать файлы cookie вместо сеансов, за исключением случаев, когда вы хотите, чтобы данные сохранялись между сеансами, но даже тогда, возможно, лучше сохранить их в БД и получить их на основе имени пользователя или идентификатора.
Вы можете добавить переменную в ссылку на следующую страницу:
Это создаст переменную GET.
Другой способ заключается в том, чтобы включить скрытое поле в форму, представленную на второй странице:
И затем на второй странице:
//Using GET $var_value = $_GET['varname']; //Using POST $var_value = $_POST['varname']; //Using GET, POST or COOKIE. $var_value = $_REQUEST['varname'];
Просто измените метод post формы, если вы хотите сделать это через сообщение. Оба одинаково небезопасны, хотя GET легче взломать.
Тот факт, что каждый новый запрос, за исключением данных сеанса, совершенно новый экземпляр скрипта поймал меня, когда я впервые начал кодирование в PHP. Как только вы привыкнете к этому, это довольно просто.
Спасибо за ответы выше. Вот как я это сделал, надеюсь, это поможет тем, кто следует. Я хочу передать регистрационный номер с одной страницы на другую, поэтому regName и regValue :
Создайте свою первую страницу, назовите ее set_reg.php :
Создайте свою вторую страницу, назовите ее get_reg.php :
Хотя это не так полно, как ответ выше, для моих целей это просто иллюстрирует связь между различными элементами.
Передача данных в запросе
Вы можете вставлять его как скрытое поле в свою форму или добавлять его URL-адрес формы
Обратите внимание, что это также иллюстрирует использование htmlentities и urlencode при передаче данных.
Передача данных в сеансе
Если данные не нужно передавать на клиентскую сторону, тогда сеансы могут быть более уместными. Просто вызовите session_start () в начале каждой страницы, и вы можете получить и установить данные в массив $ _SESSION.
Безопасность
Поскольку вы заявляете, что ваше значение на самом деле является именем файла, вам необходимо знать о последствиях безопасности. Если имя файла поступило с клиентской стороны, предположите, что пользователь вмешался в это значение. Проверьте его на достоверность! Что происходит, когда пользователь передает путь к важному системному файлу или файл под их контролем? Может ли ваш сценарий использоваться для «зондирования» сервера для файлов, которые существуют или не существуют?
Поскольку вы явно начинаете здесь, стоит упомянуть, что это касается любых данных, поступающих в $ _GET, $ _POST или $ _COOKIE. Предположим, ваш худший враг создал содержимое этих массивов и код соответственно!
Существует три метода передачи значения в php.
Эти три метода используются для разных целей. Например, если мы хотим получить наше значение на следующей странице, мы можем использовать метод post ($ _POST) как: –
Если нам требуется значение переменной на более чем одной странице, мы можем использовать переменную сеанса как: –
Перед использованием этого синтаксиса для создания переменной SESSION сначала нужно добавить этот тег в самом начале нашей php-страницы
Метод GET обычно используется для печати данных на той же странице, которая использовалась для ввода данных от пользователя. Его синтаксис выглядит так:
Метод POST, как правило, более безопасен, чем GET, потому что когда мы используем метод Get, чем он может отображать данные в строке URL. Если данные более чувствительные данные, такие как пароль, то это может быть inggeris.
Сессии были бы единственным хорошим способом, вы также могли бы использовать GET / POST, но это было бы потенциально неуверенно.
Лучше всего и проще всего передавать переменные, как я объяснил это здесь: Сохранение всех данных POST на СЕССИИ
используя скрытое поле, мы можем передать php varibale на другую страницу
передать переменную php в значение скрытого поля, чтобы вы могли получить доступ к этой переменной на другую страницу
Передача переменных между страницами.
В этой статье я расскажу о том, как передавать переменные и их значения между страницами. Когда-то для меня это было не такой простой и тривиальной задачей, какой я вижу ее сейчас.
Итак, можно выделить три основных способа передачи переменных между PHP скриптами:
Каждый из этих вариантов удобен в конкретных случаях, и обычно, определить каким из массивов пользоваться не сложно. Зачем же передавать данные от одной страницы другой? Примеров масса, здесь и отправка html-формы на электронную почту, и авторизация пользователей, и работа корзины интернет магазина, а также различные фильтры и много много другого. На самом деле владеть методами работы с передачей данных между страницами необходимо любому, кто работает с PHP, без этого ну никуда. Итак, рассмотрим каждый метод передачи данных по очереди:
- Передача данных в суперглобальном массиве $_GET. Как она происходит. Например, у вас есть страница, на которой динамически выводятся какие-либо данные. Чтобы было понятнее, возьмем интернет магазин (я думаю, практически каждый хоть раз сталкивался с написанием интернет магазинов, а если не сталкивался, то обязательно столкнется). Есть страница со списком товаров, и есть страница описания конкретного товара. Вывод описания товара осуществляется по его уникальному идентификатору в базе данных (естественно, я не рассматриваю случай, когда для каждого товара есть своя отдельная html страничка, на которую ведет ссылка из списка товаров, и я надеюсь что вы тоже уже переросли такие сайты). Задача заключается в следующем: Есть две страницы: список товаров и описание товара. Как определить, описание какого товара показать пользователю, пришедшему со страницы списка товаров?
Решение:
http://домен.ру/product_list.php — список товаров
http://домен.ру/product_details.php — описание конкретного товара. Чтобы передать идентификатор на страницу product_details.php нужно обратиться к ней по ссылке:
http://домен.ру/product_details.php?product_id=идентификатор_продукта
и тогда значение идентификатора товара будет доступно как переменная $_GET[‘product_id’]. Ну и дальше можно его использовать в любом месте скрипта product_details.php. Обратите внимание, что все переменные передаются в адресной строке после знака вопроса (?), чтобы предать несколько переменных их разделяют знаком &. Например:
http://домен.ру/product_list.php?category_id=1&order_by=price&order=DESC
В этом примере мы передали файлу product_list.php переменные $_GET[‘category_id’], $_GET[‘order_by’] и $_GET[‘order’]. Зачем это нужно? Например при сортировке списка товаров запрос к базе данных выглядит следующим образом:
SELECT * FROM products ORDER BY price DESC
Передав переменные order_by, order и category_id Можно переписать наш запрос так:
SELECT * FROM products WHERE category_id=$_GET[‘category_id’] ORDER BY $_GET[‘order_by’] $_GET[‘order’];
Таким образом можно писать фильтры для упорядоченного вывода данных. - Передача переменных в массиве $_POST. Здесь уже не все так очевидно, как в случае $_GET, однако сложного тоже ничего нет. Каждый из нас ежедневно сталкивается с html-формами (авторизация, регистрация, поиск и т.д. и т.д.). А как и куда передаются данные, введенные вами в форме? Рассмотрим самую простую форму:
Рассмотрим первую строку. Значение атрибута action определяет файл обработчик формы, т.е. тот файл, которому будут доступны переменные формы. Атрибут action может быть и пустым, тогда обрабатывать форму можно в той же странице, в которой она выводится. Атрибут method определяет, в какой массив будут помещены значения полей формы. Если method=”get”, переменные будут доступны в массиве $_GET, еслиmethod=”post” — $_POST. Теперь перейдем непосредственно к полям формы. Мы создали всего одно текстовое поле с атрибутом name=”some_field”, который и определяет имя переменной, которое будет соответствовать значение поля. Т.е., после нажатия кнопки отправить, доступ к значению поля some_field можно получить как $_POST[‘some_field’]. На самом деле, есть еще один массив $_REQUEST, который может содержать как массив $_GET, так и массив $_POST, но его я встречал только в backend-файлах AJAX приложений, поэтому ничего по поводу того, как его использовать сказать не могу.
Обратимся к случаю, когда обработчик формы и сама форма находятся в одном файле. Вот пример кода:
Сразу оговорюсь, что я не рассматривал использование массива $_COOKIES. Почему? Может быть кому-то это покажется странным, но я до сих пор им ни разу не пользовался, поэтому не могу сходу описать, как с ним работать.
Подводя итог, можно сказать, что каждый метод удобен в том или ином случае. Переменные массива $_GET удобны для написания фильтров и условий; $_POST – для передачи больших массивов, например текстовое описание и т.д. (передача данных методом $_POST используется в панели управления сайтом для администрирования и добавления данных); $_SESSION удобно использовать в тех случаях, когда доступ к переменным нам может понадобится на любой из страниц сайта. На этом, я думаю можно закончить. Если возникли вопросы – пишите на форуме.