Передача переменных в PHP. Методы GET и POST. Как использовать переменные PHP в JavaScript

Почему вопрос о передаче переменной из языка в язык — вопрос новичка? Потому что невозможно это сделать! Языки программирования работают каждый самостоятельно. А передача напрямую между ними невозможна. Сейчас объясню почему.

Дело в том, что PHP и JavaScript связаны лишь условно. PHP работает на сервере, а JavaScript — в браузере.

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

  • Браузер формирует заголовки запроса, присоединяет к в них какую-то важную информацию о себе и отсылает их на этот адрес.
  • Сервер принимает заголовки и понимает что нужно отдать документ. Он понимает, что запрашивается не документ, а программа. Тогда он запускает эту программу и отдает ей все данные, что получил от браузера.
  • Программа (php-скрипт) запускается, отрабатывает и просто печатает результат своей работы. Результатом работы может быть html-страница, куда включены JavaScript-скрипты. Но мы помним, что в данный момент работает PHP и JavaScript для него ничем не отличается от любых других данных. Просто буковки.
  • Сервер получает то, что напечатала программа. Прикрепляет заголовки ответа и отсылает все это запросившему браузеру.
  • Браузер получает код страницы и отображает его. Догружает нужные файлы (js, css, картинки), применяет их к html-коду. И только теперь включается JavaScript, встроенный в браузер.
  • Если посмотреть внимательно на этот порядок работы, можно ответить на вопрос

    Как передать переменную из PHP в JavaScript?

    Нужно во время выполнения скрипта PHP просто сформировать такой текст, чтобы он потом мог выполниться в браузере. Например.

    Асинхронная передача переменной из JavaScript в PHP

    Это подразумевает использование Ajax. По сути, осуществляется то же, что и в предыдущем случае, но не перезагружается страница браузера. Проще всего это проиллюстрировать используя библиотеку .

    var message = "Hello, server!"; $..php", {message:message}, function(data) { alert("Сервер ответил: "+data); });

    Как видим, все еще проще. Не нужно применять функцию encodeURIComponent, ее применяет за нас jQuery. Мы описываем функцию, которая принимает ответ сервера и складывает его в переменную data. Если index.php возвращает просто значение переменной $_GET, то мы увидим alert с текстом "Сервер ответил: Hello, server!".

    Передача сложных объектов из php в Javascript

    Мы помним, что при генерации JavaScript из php, нужно придерживаться синтаксиса JavaScript. Поэтому нужно перевести данные из представления PHP в представление JavaScript. Проще всего это сделать, воспользовавшись форматом JSON и функцией json_encode() , которая превратит объект или массив php в строку, которая при выполнении движком JavaScript, даст объект JavaScript.

    Тут можно начать путаться. Но ничего страшного нет. Достаточно помнить последовательность. Сперва выполняется php, затем — JavaScript. После выполнения php получится:

    var obj={"test":"123","key":"value"}; alert(obj.test);

    Что при выполнении выведет нам alert с текстом "123".

    Итого

    Нужно помнить что php генерирует JS, поэтому передавать из него данные довольно просто. Нужно формировать JS так же, как формируется html. С соблюдением синтаксиса JavaScript.

    Для передачи данных из JS в PHP всегда используется дополнительный запрос. Как он осуществляется — дело десятое. Например, может формироваться и отправляться форма. Или открываться iframe. Но суть остается. Понимая эту суть, можно перекидывать любые данные из браузера на сервер и обратно довольно просто.

    В некоторых случаях может потребоваться передать PHP глобальные переменные в сценарий JavaScript . В этой статье я расскажу, как использовать переменные PHP в JavaScript и приведу несколько примеров.

    Переменные PHP в JavaScript

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

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

    Теперь рассмотрим, как можно передать переменные из JavaScript в PHP или наоборот.

    Как передать переменные PHP во встроенный JavaScript

    Существует два основных метода включения кода JavaScript на странице HTML . Первый — мы располагаем код на той же странице, в разделе или в . Предположим, у нас есть встроенный код JS в разделе , и мы хотим передать переменную PHP username в JavaScript . В этом случае мы нужно использовать следующий код:

    var username = ""; alert(username); ...

    Мы определили в JS новую переменную и назвали ее username . Затем присвоили этой переменной JS PHP переменную $username , повторив ее. Естественно, переменная $username должна быть определена ранее на странице выше данной строки.

    Обратите внимание, что вокруг кода PHP , который выводит $username , мы использовали двойные кавычки (« ) как при объявлении переменной в JS . Если переменная PHP является числом, то кавычки использовать не нужно. Но убедитесь, что вы правильно использовали кавычки, потому что строка вывода также может содержать кавычки, и это разобьет код JS .

    Как передать переменные PHP во внешний JavaScript

    Также JS код может храниться во внешнем файле (например, script.js ), связанном со страницей HTML . Например, если вы хотите передать значение переменной времени (в секундах ) в таймер JS , можно использовать следующий код:

    var seconds = ; ...

    Код во внешнем файле JS (script.js ):

    setTimeout(function() { window.location.href = "/"; }, seconds * 1000);

    В приведенном выше коде мы сначала инициализируем значение PHP переменной $seconds переменной JS seconds . После этого переменная становится доступной в DOM , и подключаемый скрипт (script.js ) может использовать ее. В приведенном выше примере пользователь перенаправляется на главную страницу после установленного промежутка времени.

    Совет : Убедитесь, что в PHP и JavaScript вы определили переменные до того, как используете их в коде. Иначе вы получите сообщение об ошибке «undefined variable «, и код работать не будет.

    Надеюсь, эта статья окажется полезной, и вы поделитесь ею с друзьями.

    Перевод статьи «How to Include PHP Variables in JavaScript » был подготовлен дружной командой проекта .

    Хорошо Плохо

      С помощью этого скрипта можно добавлять любые советы и объявления для посетителей вашего сайта. Скрипт состоит из внешних файлов javascripts totdmsg.js и totd.js и html файла…

    Так уж получилось, что по роду деятельности мне приходится отвечать как на сложные технические вопросы, так и на откровенно нубские. Что поделать, уровень подготовки разных специалистов разный.

    Спросили: «Как передать переменную из Javascript в PHP». Ответ на этот вопрос хотелось бы начать с того, что Javascript и PHP выполняются на разных физических машинах, а это значит, что просто так «передать переменную», в обычном понимании этого процесса, не получится.

    Поскольку Javascript выполняется на клиентской машине (клиенте), а PHP на серверной (сервер), то назовём передачу данных между Javascript и PHP термином «клиент-серверный обмен», так будет правильнее.

    В web обмен данными производится по следующей схеме: на сервер передаётся запрос с клиента, этот запрос обрабатывается сервером, после чего он возвращает на клиент некоторые данные (ответ). Этот способ обмена использует и сам браузер. Тот URL, который вы забиваете в строку адреса — и есть запрос. А ответом является HTML, который выводится на странице браузера.

    Однако данные с сервера должен запрашивать не обязательно сам браузер. Ваш код на Javascript, который крутится на страничке, также может выступить в роли клиента. Для этого используют встроенный компонент браузера XMLHttpRequest, который сам по себе может производить запросы на сервер и получать от него ответы, при этом сама HTML-страница не обновляется и вообще никак не меняется.

    Работа с сервером через объект XMLHttpRequest часто называется более популярным словом — AJAX.

    Однако работать напрямую с этим объектом я лично не рекомендую. Дело в том, что на разных браузерах он работает немного по-разному, и это нужно будет учитывать в коде. Кроме того, «чистый» Javascript не имеет удобных средств работы с событиями, так что у вас получится приличная «портянка» кода, который ещё и будет «глючить» скорее всего.

    Код с использованием этой библиотеки получается достаточно простым и лаконичным. например, если вам нужно передать значение v=6789 на сервер, то можно выполнить следующий код

    JQuery.get("/index.php?v=6789", function(result){ alert(result); });

    При этом ваш скрипт по адресу /index.php получит значение в переменной $_GET[‘v’]. А всё, что он выведет в выходной поток (например, с использованием echo), попадёт в переменную result и будет выведено в всплывающий диалог alert().

    Как видите, всё просто.

    Можно аналогичным образом отправлять данные через POST, а также отправлять закодированные в JSON данные (наиболее часто используемый способ), но об этом я рекомендую вам прочесть самостоятельно в документации от jQuery (смотрите методы.ajax(), .post()).

    8 ответов

    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 и POST