PHP и HTML
PHP и HTML тесно взаимодействуют: PHP может генерировать HTML, а HTML может передавать информацию PHP. Перед чтением вопросов в этом разделе важно чтобы вы понимали как получать переменные извне PHP. Страницы руководства по этой теме содержат много примеров. Обращайте особое внимание на то, что register_globals значит для вас.
- Какое кодирование/декодирование я должен выполнять при передаче значения через форму/URL?
- Я пытаюсь использовать , но переменные $foo.x и $foo.y недоступны. $_GET[‘foo.x’] тоже не существует. Где они?
- Как создать массивы в HTML ?
- Как получить все результаты из HTML тэга select с опцией multiple?
- Как я могу передать переменную из JavaScript в PHP?
Какое кодирование/декодирование я должен выполнять при передаче значения через форму/URL?
- Интерпретация HTML. Для того, чтобы задать произвольную строку, вы должны заключить её в двойные кавычки и вызвать htmlspecialchars() на все значение.
- URL: URL состоит из нескольких частей. Если вы хотите чтобы ваши данные были восприняты как один элемент, вы должны закодировать их с помощью urlencode() .
Пример #1 Скрытый элемент HTML формы
echo ‘. htmlspecialchars ( $data ) . ‘» />’ . «\n» ;
?>?php
Замечание: Использовать urlencode() для $data неправильно, так как кодировать данные в urlencode() это обязанность браузера. Все популярные браузеры делают это правильно. Отметьте, что это происходит вне зависимости от метода (например, GET или POST). Однако, вы заметите это только в случае GET запроса, так как POST запросы обычно скрыты.
Пример #2 Данные, редактируемые пользователем
echo «» ;
?>?php
Замечание: Данные показываются браузером как предполагается, потому что браузер будет интерпретировать экранированные HTML символы. При отправке через GET или POST данные будут закодированы (urlencoded) браузером для передачи и раскодированы (urldecoded) PHP. Поэтому вам не надо выполнять какое-либо url-кодирование/раскодирование самим, все выполняется автоматически.
Пример #3 В URL
Замечание: На самом деле вы представляетесь HTML GET запросом, поэтому необходимо вручную закодировать ( urlencode() ) данные.
Замечание: Вам надо применить htmlspecialchars() на полный URL, потому что URL появляется как значение HTML атрибута. В этом случае, браузер сначала раскодирует все значение (де- htmlspecialchars() ) и затем URL. PHP поймет URL правильно, так как вы закодировали данные с urlencode() . Вы заметите, что & в URL заменяется на &. Хотя большинство браузеров это исправляют, если вы забудете об этом, но все же это не всегда возможно. Поэтому, даже если ваш URL не динамический, вам надо закодировать его с помощью htmlspecialchars() .
Я пытаюсь использовать , но переменные $foo.x и $foo.y недоступны. $_GET[‘foo.x’] тоже не существует. Где они?
При отправке формы, вместо стандартной кнопки отправки возможно использовать изображение с тэгом как:
Когда пользователь щелкает где-либо на картинке, серверу будет послана сопутствующая форма с двумя дополнительными переменными: foo.x и foo.y .
Так как имена foo.x и foo.y нелегальны в PHP, они автомагически превращаются в foo_x и foo_y . То есть, точки заменяются на подчеркивания. Вы обращаетесь к этим переменным так же как и к любым другим, описанным в разделе о получении переменных извне PHP. Например, $_GET[‘foo_x’] .
Замечание:
Пробелы в именах переменных запроса преобразуются в подчеркивания.
Как создать массивы в HTML ?
Для того, чтобы результаты были переданы вашему PHP скрипту как массив, именуйте элементы , или следующим образом:
Заметьте квадратные скобки после имени переменной, это делает её массивом. Вы можете сгруппировать элементы в массив, присваивая одно и то же имя разным элементам:
Это создаст два массива, MyArray и MyOtherArray, которые будут переданы PHP скрипту. Также возможно задать определенные ключи для ваших массивов:
Массив AnotherArray теперь будет содержать ключи 0, 1, email и phone.
Замечание:
Определять ключи массивов в HTML необязательно. Если вы не задаете ключи, массив заполняется в порядке появления элементов в форме. Наш первый пример будет содержать ключи 0, 1, 2 и 3.
Как получить все результаты из HTML тэга select с опцией multiple?
HTML тэг select с multiple позволяет пользователю выбрать несколько элементов из списка. Эти элементы затем передаются обработчику формы. Проблема в том, что они все переданы с одним и тем же именем. Например:
Каждая выбранная опция поступит обработчику формы как:
var=option1 var=option2 var=option3
Каждая опция будет затирать содержимое предыдущей переменной $var . Решение — воспользоваться возможностью PHP «массив из элемента формы». Должно быть задано следующее:
Это укажет PHP обращаться с $var как с массивом и каждое присваивание значения для var[] добавит элемент в массив. Первый элемент становится $var[0] , следующий $var[1] и т.д. Функция count() может быть использована для определения, сколько элементов было выбрано и функция sort() может быть использована для сортировки массива опций, если необходимо.
Заметьте, что если вы используете JavaScript, то [] в имени элемента может вызвать проблемы, если вы пытаетесь обращаться к элементу по имени. Вместо этого используйте числовой ID элемента формы или заключите имя переменной в одиночные кавычки и используйте как индекс массива элементов, например:
variable = document.forms[0].elements['var[]'];
Как я могу передать переменную из JavaScript в PHP?
Так как JavaScript является (обычно) клиентской технологией, а PHP является (обычно) серверной технологией, и так как HTML — протокол «без состояния», эти два языка не могут разделять переменные напрямую.
Однако, возможно передавать переменные между ними. Один из способов достичь этого — сгенерировать JavaScript код из PHP и заставить браузер обновиться, посылая определенные переменные назад PHP скрипту. Нижеприведенный пример показывает как это сделать — он позволяет PHP коду получить высоту и ширину экрана, что, обычно, возможно только на стороне клиента.
Пример #4 Генерирование Javascript из PHP
if (isset( $_GET [ ‘width’ ]) AND isset( $_GET [ ‘height’ ])) // выводим переменные с размерами
echo «Ширина экрана: » . $_GET [ ‘width’ ] . «
\n» ;
echo «Высота экрана: » . $_GET [ ‘height’ ] . «
\n» ;
> else // передаем переменные с размерами
// (сохраняем оригинальную строку запроса
// — post переменные нужно будет передавать другим способом)
?php
Как передать данные из php в html
PHP и HTML тесно связаны: PHP генерирует HTML, а HTML содержит информацию , которая высылается в PHP.
1. Какое кодирование/декодирование я должен выполнять при передаче значения в HTМL-форме? А через URL?
- HTML-интерпретация. Чтобы специфицировать произвольную строку, вы обязаны заключить её в двойные кавычки, а htmlspecialchars — всё значение.
- URL: URL состоит из нескольких частей. Если вы хотите, чтобы ваши данные интерпретировались как один элемент, вы обязаны кодировать их с помощью urlencode() .
Пример 51-1. Элемент hidden HTML-формы
Примечание: неверным будет urlencode() $data , поскольку за urlencode() данных отвечает браузер. Все популярные браузеры делают это корректно. Заметьте, что это делается независимо от метода (GET или POST). Вы увидите это только при методе GET, поскольку POST-запросы обычно скрыты/hidden.
Пример 51-2. Данные, редактируемые пользователем
\n"; echo htmlspecialchars($data)."\n"; echo ""; ?>
Примечание: эти данные будут выведены в браузере так, как задумано, поскольку браузер будет интерпретировать заменённые (escaped) html-символы.
При отправке, через GET или POST, данные будут url-кодированы браузером для передачи и непосредственно url-декодированы в PHP. Поэтому в результате вам ничего не нужно urlencodе/urldecodе самостоятельно, всё необходимое выполняется автоматически.
Пример 51-3. В URL
Примечание: фактически вы обходите HTML GET-запрос, поэтому нужно вручную urlencode() данные.
Примечание: вы должны htmlspecialchars() весь URL, поскольку URL появляется как значение HTML-атрибута. В этом случае браузер сначала де- htmlspecialchars() значение, а затем передаёт URL. PHP поймёт URL корректно, так как вы urlencoded() данные.
Вы увидите, что символ & в URL будет заменён на & . Хотя большинство браузеров исправят ситуацию, если вы забудете сделать это, это не всегда возможно. Поэтому, даже если даже ваш URL не является динамическим, вы должны htmlspecialchars() URL.
2. Я пытаюсь использовать тэг , но переменные $foo.x и $foo.y недоступны. Где они?
При отправке формы можно использовать с тэгом изображение вместо стандартной кнопки submit, как здесь:
Когда пользователь щёлкает по изображению, соответствующая форма будет передана на сервер с двумя дополнительными переменными: foo.x и foo.y.
Поскольку $foo.x и $foo.y являются неверными именами переменных в PHP, они автоматически конвертируются в $foo_x и $foo_y. То есть, точки заменяются на символы подчёркивания.
3. Как мне создать массивы в HTML-тэге ?
Чтобы получить результат вашей , отправленный как массив в ваш PHP-скрипт, вы именуете элементы , или таким образом:
Обратите внимание на квадратные скобки после имён переменных, это то, что делает их массивом. Вы можете группировать элементы в разные массивы, присвоив одно имя разным элементам:
Это создаст два массива — MyArray и MyOtherArray, которые будут отправлены PHP-скрипту. Можно также присвоить вашим массивам специфические ключи:
Массив AnotherArray теперь будет содержать ключи 0, 1, email и phone.
Примечание: специфицирование ключей массива делается в HTML по выбору. Если вы не специфицируете ключи, массив заполняется элементами в порядке их появления на форме. Массив нашего первого примера будет содержать ключи 0, 1, 2 3.
4. Как мне получит все результаты из HTML-тэга множественного выбора select?
Тэг select multiple в HTML позволяет пользователю делать выбор нескольких позиций в списке. Эти позиции передаются затем обработчику акции формы. Проблема в том, что они все передаются с одним и тем же именем. Например:
Каждая выбранная опция дойдёт до обработчика акции как:
var=option1 var=option2 var=option3
Каждая опция будет перезаписывать содержимое предыдущей переменной $var . Решением будет использование «массива элемента form» РНР. Нужно использовать следующее:
Это говорит PHP, что переменную $var нужно считать массивом, и каждое присвоение значения var[] добавляет элемент в этот массив. Первый элемент будет $var[0] , следующий — $var[1] и т.д. Функция count() может использоваться для определения количества выбранных опций, а функция sort() — для сортировки массива опций, если необходимо.
Обратите внимание, что, если вы используете JavaScript, наличие [] в имени элемента может создать проблемы, если вы попытаетесь обратиться к элементу по имени. Вместо имени используйте id элемента формы или заключите имя переменной в одинарные кавычки и используйте его как индекс в массиве элементов, например:
variable = documents.forms[0].elements['var[]'];
|
Как передать переменную PHP в HTML документ
Имеется HTML страница запущенная на IIS и PHP страница запущенная на Denwer Можно ли передать переменную из php страницы в html документ, если они находятся в разных директориях? Пишу php код внутри html — не выполняется.
Отслеживать
задан 25 июл 2018 в 4:09
Николай Василенков Николай Василенков
481 2 2 серебряных знака 14 14 бронзовых знаков
пример вашего кода в студию пожалуйста
25 июл 2018 в 5:28
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можно ли передать переменную из php страницы в html документ, если они находятся в разных директориях?
Вот простой пример как это можно сделать:
Имеется такая структура проекта:
/docroot /someDir --inc-file.php index.php
Index
Если вы передаете переменную в файл с расширением php , то можно, но файл с другим расширением не будет знать, что делать с кодом-переменной из php .
Отслеживать
ответ дан 25 июл 2018 в 5:50
5,811 3 3 золотых знака 15 15 серебряных знаков 24 24 бронзовых знака
- php
- html
- iis
- denwer
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Передача переменных между страницами.
В этой статье я расскажу о том, как передавать переменные и их значения между страницами. Когда-то для меня это было не такой простой и тривиальной задачей, какой я вижу ее сейчас.
Итак, можно выделить три основных способа передачи переменных между PHP скриптами:
- Через массив $_GET
- Через массив $_POST
- Через массив $_SESSION
Каждый из этих вариантов удобен в конкретных случаях, и обычно, определить каким из массивов пользоваться не сложно. Зачем же передавать данные от одной страницы другой? Примеров масса, здесь и отправка 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 приложений, поэтому ничего по поводу того, как его использовать сказать не могу.
Обратимся к случаю, когда обработчик формы и сама форма находятся в одном файле. Вот пример кода:
if (empty($_POST)) ?>
>
else print_r($_POST);
>
?php
Сразу оговорюсь, что я не рассматривал использование массива $_COOKIES. Почему? Может быть кому-то это покажется странным, но я до сих пор им ни разу не пользовался, поэтому не могу сходу описать, как с ним работать.
Подводя итог, можно сказать, что каждый метод удобен в том или ином случае. Переменные массива $_GET удобны для написания фильтров и условий; $_POST – для передачи больших массивов, например текстовое описание и т.д. (передача данных методом $_POST используется в панели управления сайтом для администрирования и добавления данных); $_SESSION удобно использовать в тех случаях, когда доступ к переменным нам может понадобится на любой из страниц сайта. На этом, я думаю можно закончить. Если возникли вопросы – пишите на форуме.
