Как вставить переменную php в javascript
Перейти к содержимому

Как вставить переменную php в javascript

  • автор:

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

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

На форумах очень часто можно встретить вопросы вроде:

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

Эти вопросы выдают новичков и сейчас я постараюсь объяснить почему. А также ответить как же все-таки это сделать.

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

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

Напомню алгоритм работы интернета. То есть, что происходит, когда вы запрашиваете адрес. Например, что должно произойти чтобы выполнилась JavaScript функция на странице http://dayte2.com.

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

Если посмотреть внимательно на этот порядок работы, можно ответить на вопрос

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

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

Если вы создадите файл php с таким содержимым и запустите его из браузера — вы увидите пустую страницу и сообщение alert.

Разумеется, нужно помнить, что синтаксис должен быть JavaScript. Фактически, когда мы формируем код JS на PHP — мы должны помнить, что сначала php что-то сгенерирует и это что-то должно быть валидным JS.

В данном случае наш php-скрипт формирует строку:

А это — вполне корректный JavaScript, который будет выполнен браузером.

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

Можно догадаться, тут дела обстоят труднее. Ведь php генерирует JS, а вот обратная связь не подразумевается особо. Так что хочешь-не хочешь, а придется формировать новый запрос к серверу, передавая в нем данные для скрипта. У нас есть два основных метода передачи данных. Реализация может быть как через синхронные, так и через асинхронные запросы. Синхронные вызовут перезагрузку страницы, а асинхронные используют Ajax.

Синхронный метод передачи данных в php из JavaScript

Этот код немедленно перенаправит пользователя по адресу http://dayte2.com/index.php?message=Hello%2C%20server!

PHP-код в файле index.php получит данные из GET и сформирует суперглобальные массивы.

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

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

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

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

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

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

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

Итого

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

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

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

code-php

Всеми привет. Если вы мало-мальски делаете проекты для web, то наверняка сталкивались с задачей передать значение переменной из PHP в JavaScript. На первый взгляд нет абсолютно никаких трудностей, чтобы это сделать, если у вас небольшой кусок JS кода и вы его встраиваете напрямую в HTML. Давайте посмотрим.

Телеграм-канал serblog.ru

< ?php $a = 5; // присваиваем переменной 5 ?>

Вы можете проверить, таким образом можно передать PHP переменную в JS, Вернее ее значение. Но такой способ не сработает, если JS код вынесен в отдельный файл. PHP переменные в этом файле работать не будут.

error-js

Передать переменную из PHP в отдельный JavaScript файл

Способов это сделать на самом деле несколько. Я покажу один из самых простых. Принцип такой: мы создаем на странице элемент, например div с любым классом и дата-атрибутом, в который и помещаем PHP переменную. Затем в JavaScript обращаемся к этому атрибуту и получаем его значение. Я думаю вы уже поняли как это работает. Давайте разберемся на примере.

var dataPphp = document.querySelector(‘.data-php’).getAttribute(‘data-attr’); alert(dataPhp);

Более короткий вариант с jQuery

$dataPhp = $(‘.data-php’).attr(‘data-attr’); alert($dataPhp);

Такой способ отлично работает и многократно был проверен на практике с реальными данными. Если необходимо передать несколько значений переменных в JS, то просто добавьте столько атрибутов, сколько необходимо. Только не забудьте дать им разные имена. Достаточно будет просто пронумеровать или дать осмысленные названия. И в JavaScript создать переменную для каждого атрибута. На этом все. Теперь вы знаете как передавать значение переменой из PHP а JavaScript. А здесь вы узнаете как передавать данные обратно.

Как вставить переменную php в javascript

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

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

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

Для определенности, предлагаю вам создать на локальном компьютере хост с именем php_js и разместить там файл index.php, в котором мы и будем рассматривать наши примеры.

Каркасом файла index.php будет простая HTML-разметка:

Для большей наглядности весь код (включая JavaScript) мы будем писать внутри тэгов body.

1. Передача значения PHP-переменной в JavaScript

Давайте напишем такой код в тэге body:

Итак, у нас есть PHP-переменная с именем name и значением Юрий, и наша задача состоит в том, чтобы это значение вывести на экран, но не средствами PHP, а с помощью JavaScript.

Для этого мы открываем как обычно блок JavaScript-кода и внутри него объявляем переменную с произвольным именем (в нашем случае — userName). Теперь мы этой переменной присваиваем в качестве значения результат работы оператора echo применительно к переменной name.

Как вы видите, мы делаем это в блоке PHP-кода, который открываем и закрываем в пределах одинарных кавычек, обрамляющих строковое значение переменной userName в JavaScript-сценарии.

Таким образом, мы с помощью языка PHP формируем синтаксически верный код JavaScript, который будет корректно выполнен.

В результате выполнения этой строки в переменную userName попадет значение Юрий.

Вот и все. Значение PHP-переменной name было передано в JavaScript-переменную userName.

Теперь нам нужно только убедиться, что в нашей JavaScript-переменной userName хранится ожидаемое значение. Для этого мы выводим значение данной переменной на экран с помощью document.write.

В исходном коде сформированной страницы мы увидим при этом следующую картину:

На этом здесь все, и мы можем двигаться дальше.

2. Передача значения JavaScript-переменной в PHP (метод GET)

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

Понятно, что эта задача несколько сложнее, ведь если в первом случае (передача значения PHP-переменной в JavaScript) у нас уже была PHP-переменная, значение которой мы просто вывели внутри JavaScript-кода, то здесь такой вариант не пройдет.

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

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

Под уже существующим кодом допишем следующее:

Начало у нас похожее: в блоке JavaScript-кода мы объявляем переменную с именем userName3 и значением Александр.

Далее мы открываем тэг параграфа для того, чтобы внутри него вывелось значение JavaScript-переменной.

После этого переходим к PHP-коду. Мы видим, что в ветке if проверяется существование в глобальном массиве $_POST элемента с индексом u_name.

Если данный элемент будет найден, то он будет выведен на экран и будет закрыт тэг параграфа для всего предложения.

В случае отстутствия данного элемента в массиве $_POST управление передается ветке else.

Для этого мы выводим на страницу открывающий и закрывающий блоки JavaScript-кода с помощью опрератора echo, и внутри них формируем синтаксически верный JavaScript-код.

Наша задача сводится к тому, чтобы, используя команду вывода document.write в JavaScript, вывести на страницу обычную HTML-форму и подставить в единственное ее текстовое поле с именем u_name значение, которое хранится в переменной userName3 (Александр).

Самое сложное здесь — не запутаться в кавычках и их экранировании.

Именно поэтому перед написанием подобных скриптов я рекомендую вам сперва создать отдельный файл и написать в нем чистый JavaScript-код, который бы выводил форму и подставлял в поле значение переменной userName3.

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

Именно это мы и делаем в ветке else. Обратите внимание, что текст для вывода (предназначенный для оператора echo) заключен в двойные кавычки. Соответственно, для конструкции document.write мы используем одинарные кавычки.

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

Если сейчас обратиться к странице index.php, то результат будет следующий:

Как вы видите, после фразы «Значение JavaScript-переменной:» идет пустота, т.е. пока еще PHP-сценарий не получил значение JavaScript-переменной userName3. И это понятно — ведь еще не было запроса к серверу, в котором могла быть передана эта информация.

При этом ниже в форме у нас находится слово Александр — как раз значение JavaScript-переменной userName3.

Мы вставили его сюда как раз для того, чтобы отправлить форму и передать значение этой переменной методом POST нашему текущему скрипту index.php (если атрибут action отсутствует, то данные будут переданы текущему скрипту).

После нажатия на кнопку отправки мы увидим такую картину:

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

Ну что ж, с этой задачей мы тоже справились — значение JavaScript-переменной userName3 мы передали в PHP-скрипт и вывели его на экран из массива $_POST.

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

С уважением, Дмитрий Науменко.

P.S. Присмотритесь к премиум-урокам по различным аспектам сайтостроения, включая JavaScript, jQuery и Ajax, а также к бесплатному курсу по созданию своей CMS-системы на PHP с нуля. Все это поможет вам быстрее и проще освоить практические навыки веб-программирования:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!

Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

Поиск по сайту

Фреймворк Yii2: первая практика

Фреймворк Yii2: теория и первая практика

Овладейте начальными знаниями и навыками по работе в фреймворке Yii2, которые необходимы любому веб-разработчику!

Дизайн лендинга

Веб-дизайн: практический курс создания лендинга

Создавайте дизайн любых сайтов — для себя и на заказ!

В Гармонии с Кодом

Если вы хотите создать сайт своими руками, то вы оказались в нужном месте. Здесь вы найдете обучающие видеокурсы, а также множество видеоуроков и статей по веб-разработке и созданию сайтов.

How do I pass variables and data from PHP to JavaScript?

I have a variable in PHP, and I need its value in my JavaScript code. How can I get my variable from PHP to JavaScript?

I have code that looks like this:

On the same page, I have JavaScript code that needs the value of the $val variable to be passed as a parameter:

Madara's Ghost's user avatar

19 Answers 19

There are actually several approaches to do this. Some require more overhead than others, and some are considered better than others.

In no particular order:

  1. Use AJAX to get the data you need from the server.
  2. Echo the data into the page somewhere, and use JavaScript to get the information from the DOM.
  3. Echo the data directly to JavaScript.

In this post, we’ll examine each of the above methods, and see the pros and cons of each, as well as how to implement them.

1. Use AJAX to get the data you need from the server

This method is considered the best, because your server side and client side scripts are completely separate.

  • Better separation between layers — If tomorrow you stop using PHP, and want to move to a servlet, a REST API, or some other service, you don’t have to change much of the JavaScript code.
  • More readable — JavaScript is JavaScript, PHP is PHP. Without mixing the two, you get more readable code on both languages.
  • Allows for asynchronous data transfer — Getting the information from PHP might be time/resources expensive. Sometimes you just don’t want to wait for the information, load the page, and have the information reach whenever.
  • Data is not directly found on the markup — This means that your markup is kept clean of any additional data, and only JavaScript sees it.
  • Latency — AJAX creates an HTTP request, and HTTP requests are carried over network and have network latencies.
  • State — Data fetched via a separate HTTP request won’t include any information from the HTTP request that fetched the HTML document. You may need this information (e.g., if the HTML document is generated in response to a form submission) and, if you do, will have to transfer it across somehow. If you have ruled out embedding the data in the page (which you have if you are using this technique) then that limits you to cookies/sessions which may be subject to race conditions.

Implementation Example

With AJAX, you need two pages, one is where PHP generates the output, and the second is where JavaScript gets that output:

get-data.php

index.php (or whatever the actual page is named like)

The above combination of the two files will alert 42 when the file finishes loading.

Some more reading material

  • Using the Fetch API
  • How do I return the response from an asynchronous call?

2. Echo the data into the page somewhere, and use JavaScript to get the information from the DOM

This method is less preferable to AJAX, but it still has its advantages. It’s still relatively separated between PHP and JavaScript in a sense that there is no PHP directly in the JavaScript.

  • Fast — DOM operations are often quick, and you can store and access a lot of data relatively quickly.
  • Potentially Unsemantic Markup — Usually, what happens is that you use some sort of <input type=hidden> to store the information, because it’s easier to get the information out of inputNode.value , but doing so means that you have a meaningless element in your HTML. HTML has the <meta> element for data about the document, and HTML 5 introduces data-* attributes for data specifically for reading with JavaScript that can be associated with particular elements.
  • Dirties up the Source — Data that PHP generates is outputted directly to the HTML source, meaning that you get a bigger and less focused HTML source.
  • Harder to get structured data — Structured data will have to be valid HTML, otherwise you’ll have to escape and convert strings yourself.
  • Tightly couples PHP to your data logic — Because PHP is used in presentation, you can’t separate the two cleanly.

Implementation Example

With this, the idea is to create some sort of element which will not be displayed to the user, but is visible to JavaScript.

index.php

3. Echo the data directly to JavaScript

This is probably the easiest to understand.

  • Very easily implemented — It takes very little to implement this, and understand.
  • Does not dirty source — Variables are outputted directly to JavaScript, so the DOM is not affected.
  • Tightly couples PHP to your data logic — Because PHP is used in presentation, you can’t separate the two cleanly.

Implementation Example

Implementation is relatively straightforward:

Madara's Ghost's user avatar

I usually use data-* attributes in HTML.

This example uses jQuery, but it can be adapted for another library or vanilla JavaScript.

I’m going to try a simpler answer:

Explanation of the problem

First, let’s understand the flow of events when a page is served from our server:

  • First PHP is run, it generates the HTML that is served to the client.
  • Then, PHP "dies" (i.e. it literally stops running) as that HTML is delivered to the client. I’d like to emphasize that once the code leaves the server, PHP has stopped being part of the page load, and the server has no access access to it anymore.
  • Then, when the HTML with JavaScript reaches the client, that can then execute the JavaScript on that HTML, provided it is valid Javascript.

So really, the core thing to remember here is that HTTP is stateless. Once a request left the server, the server can not touch it. So, that leaves our options to:

  1. Send more requests from the client after the initial request is done.
  2. Encode what the server had to say in the initial request.

Solutions

That’s the core question you should be asking yourself is:

Am I writing a website or an application?

Websites are mainly page based, and the page load times needs to be as fast as possible (for example — Wikipedia). Web applications are more AJAX heavy and perform a lot of round trips to get the client fast information (for example — a stock dashboard).

Website

Sending more requests from the client after the initial request is done is slow as it requires more HTTP requests which have significant overhead. Moreover, it requires asynchronousity as making an AJAX request requires a handler for when it’s complete.

I would not recommend making another request unless your site is an application for getting that information from the server.

You want fast response times which have a huge impact on conversion and load times. Making Ajax requests is slow for the initial uptime in this case and unneeded.

You have two ways to tackle the issue

  • Set a cookie — cookies are headers sent in HTTP requests that both the server and client can read.
  • Encode the variable as JSON — JSON looks very close to JavaScript objects and most JSON objects are valid JavaScript variables.

Setting a cookie is really not very difficult, you just assign it a value:

Then, you can read it with JavaScript using document.cookie :

Here is a short hand rolled parser, but the answer I linked to right above this has better tested ones:

Cookies are good for a little data. This is what tracking services often do.

Once we have more data, we can encode it with JSON inside a JavaScript variable instead:

Assuming $value is json_encode able on the PHP side (it usually is). This technique is what Stack Overflow does with its chat for example (only using .NET instead of PHP).

Application

If you’re writing an application — suddenly the initial load time isn’t always as important as the ongoing performance of the application, and it starts to pay off to load data and code separately.

My answer here explains how to load data using AJAX in JavaScript:

Now, the server just needs to contain a /your/url route/file that contains code that grabs the data and does something with it, in your case:

This way, our JavaScript file asks for the data and shows it rather than asking for code or for layout. This is cleaner and starts to pay off as the application gets higher. It’s also better separation of concerns and it allows testing the client side code without any server side technology involved which is another plus.

Postscript: You have to be very aware of XSS attack vectors when you inject anything from PHP to JavaScript. It’s very hard to escape values properly and it’s context sensitive. If you’re unsure how to deal with XSS, or unaware of it — please read this OWASP article, this one and this question.

Mike 'Pomax' Kamermans's user avatar

  • PHP 5.2.0 or more
  • $PHPVar encoded as UTF-8, Unicode.

Simply use one of the following methods.

OR

Nishant Mendiratta's user avatar

I quite like the way the WordPress works with its enqueue and localize functions, so following that model, I wrote a simple class for putting a scripts into page according to the script dependencies, and for making additional data available for the script.

The call to the enqueue_script() function is for adding script, setting the source and dependencies on other scripts, and additional data needed for the script.

And, print_scripts() method of the above example will send this output:

Regardless the fact that the script ‘jquery’ is enqueued after the ‘jquery-ui’, it is printed before because it is defined in ‘jquery-ui’ that it depends on ‘jquery’. Additional data for the ‘custom-script’ are inside a new script block and are placed in front of it, it contains mydata object that holds additional data, now available to ‘custom-script’.

Peter Mortensen's user avatar

-After trying this for a while

Although it works, however it slows down the performance. As PHP is a server-side script while JavaScript is a user side.

Peter Mortensen's user avatar

Yosra Nagati's user avatar

I have come out with an easy method to assign JavaScript variables using PHP.

It uses HTML5 data attributes to store PHP variables and then it’s assigned to JavaScript on page load.

Here is the JavaScript code

  1. Convert the data into JSON
  2. Call AJAX to recieve JSON file
  3. Convert JSON into Javascript object

STEP 1

STEP 2

Neuron's user avatar

It doesn’t work because $val is undefined as far as JavaScript is concerned, i.e. the PHP code did not output anything for $val . Try viewing the source in your browser and here is what you’ll see:

This doesn’t work because PHP will try to treat myPlugin as a constant and when that fails it will try to treat it as the string ‘myPlugin’ which it will try to concatenate with the output of the PHP function start() and since that is undefined it will produce a fatal error.

While this is most likely to work, since the PHP code is producing valid JavaScript with the expected arguments, if it fails, chances are it’s because myPlugin isn’t ready yet. Check your order of execution.

Also you should note that the PHP code output is insecure and should be filtered with json_encode() .

EDIT

Because I didn’t notice the missing parenthesis in myPlugin.start(<?=$val?> :-\

As @Second Rikudo points out, for it to work correctly $val would need to contain the closing parenthesis, for example: $val=»42);»

Meaning that the PHP will now produce myPlugin.start(42); and will work as expected when executed by the JavaScript code.

Peter Mortensen's user avatar

andrew's user avatar

Here is is the trick:

Here is your ‘PHP’ to use that variable:

Now you have a JavaScript variable called ‘name’ , and here is your JavaScript code to use that variable:

Peter Mortensen's user avatar

Ramin Taghizada's user avatar

Let’s say your variable is always integer. In that case this is easier:

Output:

Let’s say your variable is not an integer, but if you try above method you will get something like this:

But in JavaScript this is a syntax error.

So in PHP we have a function call json_encode that encode string to a JSON object.

Since abcd in JSON is «abcd» , it looks like this:

You can use same method for arrays:

And your JavaScript code looks like this:

Enter image description here

Peter Mortensen's user avatar

Supun Praneeth's user avatar

I’ll assume that the data to transmit is a string.

As other commenters have stated, AJAX is one possible solution, but the cons outweigh the pros: it has a latency and it is harder to program (it needs the code to retrieve the value both server- and client-side), when a simpler escaping function should suffice.

So, we’re back to escaping. json_encode($string) works if you encode the source string as UTF-8 first in case it is not already, because json_encode requires UTF-8 data. If the string is in ISO-8859-1 then you can simply use json_encode(utf8_encode($string)) ; otherwise you can always use iconv to do the conversion first.

But there’s a big gotcha. If you’re using it in events, you need to run htmlspecialchars() on the result in order to make it correct code. And then you have to either be careful to use double quotes to enclose the event, or always add ENT_QUOTES to htmlspecialchars. For example:

However, you can’t use htmlspecialchars on regular JavaScript code (code enclosed in <script> . </script> tags). That makes use of this function prone to mistakes, by forgetting to htmlspecialchars the result when writing event code.

It’s possible to write a function that does not have that problem, and can be used both in events and in regular JavaScript code, as long as you enclose your events always in single quotes, or always in double quotes. Here is my proposal, requiring them to be in double quotes (which I prefer):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *