Как изменить переменную php через js

Передача значений переменных из JavaScript в PHP и обратно

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс «Практика HTML5 и CSS3»

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

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

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс «Сайт на WordPress»

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.

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

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

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

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

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

<!DOCTYPE HTML>
<html>
<head>
	<meta charset = "utf-8" />
	<title>Передача значений переменных</title>
</head>

<body>


</body>
</html>

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

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

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

<p><strong>1. Из PHP в JavaScript:</strong></p>

<?php
$name = 'Юрий';
?>

<script type="text/javascript">

var userName = '<?php echo $name;?>';
document.write('Значение PHP-переменной: ' + userName);

</script>

Итак, у нас есть 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-сценария.

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

<br /><br /><br />
<p><strong>2. Из JavaScript в PHP (метод GET):</strong></p>

<script type="text/javascript">

var userName2 = 'Дмитрий';

</script>

<?php
if (isset($_GET['u_name']))
{
    echo "Значение JavaScript-переменной: ". $_GET['u_name'];
}

else
{
    echo '<script type="text/javascript">';
    echo 'document.location.href="' . $_SERVER['REQUEST_URI'] . '?u_name=" + userName2';
    echo '</script>';
    exit();
}
?>

Внутри блока JavaScript-кода мы создаем переменную userName2 со значением Дмитрий.

Далее работа идет внутри блока PHP-кода.

Здесь наша задача состоит в том, чтобы средствами PHP создать корректный JavaScript-сценарий, который перезагрузит текущую страницу и одновременно с этим передаст файлу index.php через адресную строку (т.е. методом GET) значение, содержащееся в JavaScript-переменной userName2.

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

В качестве адреса страницы мы используем значение элемента REQUEST_URI из глобального массива $_SERVER и добавляем к нему параметр с именем u_name и значением, равным значению переменной userName2.

В итоге наша условная конструкция if-else работает следующим образом:

Хостинг

1. Если при обращении к странице index.php в глобальном массиве $_GET есть элемент с индексом u_name (т.е. успешно сработала переадресация средствами JavaScript), то мы выводим на экран значение переданной JavaScript-переменной.

2. Если же при обращении к странице index.php в глобальном массиве $_GET нет элемента с индексом u_name, то запускается JavaScript-сценарий, выведенный средствами PHP и производит переадресацию на эту же страницу, но уже с параметром u_name, имеющим значение переменной userName2 (об этом мы говорили чуть выше).

Теперь, при обращении к index.php мы получим вот такой результат:

Как видите, в адресну строку средствами JavaScript мы передали значение переменной userName2. Вследствие этого в массиве $_GET появился элемент с индексом u_name и значением Дмитрий.

Задача решена, и теперь мы можем как угодно манипулировать полученным значением в рамках PHP-сценария, что мы и сделали, воспользовашись выводом на экран значения элемента u_name из массива $_GET.

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

С этим моментом мы также разобрались, и остался еще один вариант.

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

В предыдущем примере мы рассмотрели способ передачи значения с использованием адресной строки браузера (методом GET).

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

В этом примере мы будем использовать форму для того, чтобы отправить данные на сервер методом POST.

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

<br /><br /><br />
<p><strong>3. Из JavaScript в PHP (метод POST):</strong></p>

<script type="text/javascript">

var userName3 = 'Александр';

</script>

<p>Значение JavaScript-переменной:

<?php
if (isset($_POST['u_name']))
{
    echo $_POST['u_name'] . '</p>';
}

else
{
    echo "<script type='text/javascript'>";
    echo "document.write('<form method='post'>');";
    echo "document.write('<p>Ваше имя:<br />');";
    echo "document.write('<input type='text' name='u_name' value = '' + userName3 + ''</p>');";
    echo "document.write('<input type='submit' />');";
    echo "document.write('</form>');";
    echo "</script>";

    exit();
}
?>

Начало у нас похожее: в блоке 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: Получение информации об объекте или классе, методах, свойствах и наследовании

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наверх

От автора: в данное время практически каждый сайт использует язык JavaScript и различные библиотеки написанные на нем, к примеру jQuery. И очень часто возникает задача в передаче значений переменных из JavaScript в PHP. Поэтому в данном уроке мы с Вами рассмотрим способы, при помощи которых, можно решить данную задачу. Хочу обратить внимание, что передать можно только значение, а не саму переменную, определенного языка.

Для начала рассмотрим сайт, на примере которого, мы будем изучать тему сегодняшнего урока:

Это очень простой сайт, состоящий из двух страниц: главная страница, выводит список статей хранящихся в базе данных, и страница полного просмотра текста статьи. Исходный код данного сайта, я здесь приводить не буду, так как он будет доступен Вам в исходниках к этому уроку. Рассмотрим только назначение главных файлов:

Теперь давайте рассмотрим способы передачи значений переменных из JavaScript в PHP.

Это пожалуй самый простой способ. Давайте вспомним, где содержится интерпретатор языка JavaScript?
Интерпретатор языка JavaScript, в содержится в браузере. То есть код JavaScript обрабатывается непосредственно браузером, когда страница передается ему от сервера.

Теперь вспомним, где интерпретируется язык PHP? Интерпретатор языка PHP содержится на сервере. При этом PHP интерпретируется до того как страница попадет в браузер, пользователя. Значит, для передачи значения переменной языка PHP в язык JavaScript, достаточно между тегами script вывести значение этой переменной. К примеру, создадим переменную в конфигурационном файле config.php (переменная PHP):

Затем, в файле index.php передадим ее значение в JavaScript (перед подключением файла js/script.js):

Теперь в файле js/script.js используем значение данной переменной. А именно, создадим блок с классом for_button, в блоке

с классом content и как содержимое добавим в него значение переменной. Для этого используем библиотеку jQuery и ее метод prepend, который добавляет html код в выбранный блок.

$(«.content»).prepend(«<p class=’for_button’>» + button + «</p>»);

И добавим несколько правил css для нового созданного блока в файл css/style.css:

.for_button {

padding:5px;

textalign:center;

border:1px solid green;

borderradius:5px;

width:150px;

}

Теперь давайте посмотрим, что у нас получилось:

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

3. Передача значений переменных из JavaScript в PHP методом GET

Передача значений переменных языка JavaScript в PHP, задача несколько сложнее, так как требуется передать значение переменной на сервер в интерпретатор языка PHP. Это можно реализовать как методом GET (через адресную строку), так и методом POST. Метод GET предусматривает передачу данных через адресную строку. Поэтому перейдем в файл js/script.js и добавим следующий код:

var id = 2;

$(«.for_button»).click(function() {

location.href = «//localhost/lessons/phptojs/view_text.php?id=» + id;

});

То есть, мы выберем при помощи библиотеки jQuery ранее созданную кнопку с классом for_button и опишем для нее функцию обработчик события click (нажатие мышью по данному элементу). Другими словами при нажатии мышью по кнопке выполнится функция, описанная в методе click().

В теле данной функции мы выполним перенаправление на страницу полного просмотра текста статьи. При этом через адресную строку передадим ее значение. Таким образом, мы передаем значение переменной id в файл view_text.php, то есть из JavaScript в сценарий языка PHP. Давайте посмотри, что у нас получилось (обновляем главную страницу и кликаем по ранее созданной кнопке):

Как Вы видите значение переменной успешно передано.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля

Получить курс сейчас!

4. Передача значений переменных из JavaScript в PHP методом POST

Теперь рассмотрим передачу значений переменных из JavaScript в PHP при помощи метода POST. Для этого в файле index.php создадим простую форму ( в блоке с классом content):

<form action=«view_text.php» method=«POST»>

<input type=«text» name=«search» value=«»>

<input type=«submit» value=«OK»>

</form>

Обратите внимание, что значение атрибута value я оставил пустым. Мы его установим, используя JavaScript. А именно, создадим переменную search и, используя jQquery, присвоим ее значение атрибуту value текстовому полю:

var search = «search»;

$(«input[type=text]»).val(search);

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

При этом, значение переменной search будет передано в сценарий языка PHP. Обратите внимание, что обработчиком формы выступает файл view_text.php. Значит, в него нужно добавить код, который обработает данные пришедшие методом POST. Поэтому откроем данный файл и добавим следующий код:

if($_POST[‘search’]) {

$str = $_POST[‘search’];

}

Затем в одном из блоков выведем значение переменной $str:

<h1><?php echo $str;?></h1>

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

5. Асинхронный способ передачи значений переменных из JavaScript в PHP и наоборот

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

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

Поэтому, давайте передадим значение переменной из JavaScript в PHP, используя метод AJAX (опять же значение переменной нужно оправить на сервер в интерпретатор языка PHP). Для этого откроем файл js/script.js и изменим функцию обработчик события click, по ранее созданной кнопке (будем отправлять данные на сервер по нажатию мышью по кнопке):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

var ob = {

‘id’:3

}

$(«.for_button»).click(function() {

$.ajax({

type:‘POST’,

url:‘index.php’,

dataType:‘json’,

data:«param=»+JSON.stringify(ob),

success:function(html) {

$(«<p class=’for_content’>» + html[‘title’] + «</p>»).

prependTo(«.content»).

hide().

fadeIn(500);

}

});

});

Для работы с AJAX используем библиотеку jQuery и ее метод ajax, со следующими параметрами:

type:’POST’ – тип запроса на сервер;

url:’index.php’ – путь к файлу на серверу, в который отправляем данные;

dataType:’json’ – формат данных, которые придут как ответ от сервера. В данном случае условимся, что сервер отправит данные в формате JSON. При этом полученная строка будет автоматически конвертирована в объект. JSON – специальный строковый формат представления данных. Используя, который можно представить любой массив или объект в виде обычной строки, с которой удобно выполнять различные манипуляции.

Пример JSON строки, описывающей объект с двумя свойствами: firstname и lastname:

{

   «firstName»: «Иван»,

   «lastName»: «Иванов»

}

data – данные которые отправляются на сервер. Обратите внимание, что на сервер мы отправим объект ob, который представим в виде JSON строки, при помощи функции JSON.stringify(ob);

success – описываем функцию которая будет выполнена в результате успешного запроса к серверу. Параметр html, данной функции – это ответ от сервера. Который должен обязательно прийти в формате JSON, в соответствии с настройкой dataType, и который будет конвертирован в объект (то есть в html содержится ответ от сервера в виде объекта). В теле данной функции, выведем на экран заголовок статьи (условимся, что ответ от сервера – это будет массив данных о конкретной статье). Для этого используем метод prependTo(), и вставим данные в блок с классом for_content. При этом добавим анимационный эффект появления данных на экране, при помощи метода fadeIn() (метод hide() необходим, что бы мгновенно скрыть выводимый на экран блок, для того что бы в последствии его можно было плавно показать на экран, используя метод fadeIn()).

Теперь, так как мы передаем данные в файл index.php, в него необходимо добавить код, который обработает эти данные:

if($_POST[‘param’]) {

$param = json_decode($_POST[‘param’]);

$row = get_text($param>id);

echo json_encode($row);

exit();

}

То есть, проверяем, если пришли данные методом POST, то сохраняем их в переменную $param. При этом предварительно обработав их функцией json_decode(). Которая декодирует JSON строку и возвращает объект, хранящийся в ней. Таким образом в переменной $param содержится объект. У которого есть свойство $id, его мы используем в качестве идентификатора статьи для функции get_text(), которая вернет массив данных статьи по ее идентификатору. Этот массив мы сохраним в переменную $row. Затем конвертируем его в JSON строку и выводим на экран, используя функцию echo. Так как мы обращаемся к данному файлу асинхронно, и данный участок кода сработает, когда придут данные методом POST (а в нашем случае, они придут только асинхронно). Поэтому весь вывод на экран и будет являться ответом от сервера, который попадет в переменную html. Далее что бы в ответ от сервера, не попало лишних данных, мы выполняем exit().

Вот и все, можно проверять работу нашего скрипта:

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

На этом давайте прощаться. Всего Вам доброго и удачного кодирования!!!

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля

Получить курс сейчас!

Разработка веб-приложения на PHP

Скачайте видеокурс и узнайте, как создать веб-приложение на PHP

Скачать

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

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

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

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

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

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

<!doctype html>
<html>
<head>
  <script>
  var username = "<?php echo $username ?>";
  alert(username);
  </script>
</head>
<body>
  ...
</body>
</html>

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

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

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

<!doctype html>
<html>
<head>
  <script>
  var seconds = <?php echo $seconds ?>;
  </script>
  <script src="script.js"></script>
</head>
<body>
  ...
</body>
</html>

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

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

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

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

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

Fotinia

0 / 0 / 0

Регистрация: 01.07.2015

Сообщений: 6

1

03.10.2015, 23:09. Показов 1310. Ответов 11

Метки нет (Все метки)


Здравствуйте. Подскажите, пожалуйста, как сделать изменение переменной $a в теле функции fn, которая вызывается по нажатии кнопки.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<?
    global $a;
    $a=0;
?>
    <script language="javascript">
        function fn() {
            $a=$a+1;
        }
    </script>
 
<body>
        <form name="rz2" method="post">
            <input type="submit" name="subm" value="Кнопка" onClick="fn()">
            <?echo $a?>
        </form>
    </body>
</html>

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



супермизантроп

Эксперт JS

3931 / 2970 / 690

Регистрация: 18.04.2012

Сообщений: 8,622

04.10.2015, 06:58

2

подсказываю: СОВСЕМ НИКАК НЕ СДЕЛАТЬ

PHP на сервере «производит» HTML+CSS+JS-код
когда процесс производства завершается, PHP отключается — все его виртуальные переменные обнуляются и исчезают

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

нет

кроме того, клик по кнопке типа

submit (применительно к вашему коду, где в атрибуте action тега <form> ничего не прописано) приведет к запуску на сервере нового экземпляра исходного файла с PHP-вставками — а это означает, что у вас появятся новые экземпляры всех ваших переменных (которые не будут «помнить» предыдущие их значения)



0



0 / 0 / 0

Регистрация: 01.07.2015

Сообщений: 6

04.10.2015, 11:31

 [ТС]

3

Тогда ищу фрилансера, который может помочь решить аналогичную проблему на странице сайта.



0



супермизантроп

Эксперт JS

3931 / 2970 / 690

Регистрация: 18.04.2012

Сообщений: 8,622

04.10.2015, 11:39

4

Цитата
Сообщение от Fotinia
Посмотреть сообщение

Тогда ищу фрилансера, который может помочь решить аналогичную проблему на странице сайта.

смешно…
объясняю, что сделать нельзя — в ответ ищут фрилансера

слово нельзя означает, что ни у кого не получится…
ах, да… разве только у …
но, полагаю, ни господь, ни дьявол не будут этим для вас заниматься ни за какие деньги



0



0 / 0 / 0

Регистрация: 01.07.2015

Сообщений: 6

04.10.2015, 11:44

 [ТС]

5

Ну если смешно, посмейся.
Есть идея, ищу человека, который поможет реализовать идею ВОЗМОЖНЫМИ методами.



0



супермизантроп

Эксперт JS

3931 / 2970 / 690

Регистрация: 18.04.2012

Сообщений: 8,622

04.10.2015, 11:55

6

вторично поясняю — идея бредовая
бред реализовать невозможно — нету таких методов,

даже у Кости Сапрыкина

и ещё — если обращаются «на вы», то «тыкает» в ответ только трамвайное быдло



0



Pure Free Digital Ghost

4598 / 1910 / 370

Регистрация: 06.01.2013

Сообщений: 4,564

06.10.2015, 00:02

7

Fotinia, вам три программиста говорят, что это невозможно. Код JS НИКАК не связан с контекстом выполнения PHP на сервере.

К тому же, конкретная задача скорее всего звучит по-другому и реализуется другими способами.

 Комментарий модератора 
kalabuni, Fotinia, снизьте тон общения. Здесь всё же форум, а не базар.



0



temkasky

81 / 81 / 50

Регистрация: 26.11.2012

Сообщений: 303

06.10.2015, 20:18

8

Не мешайте одно с другим. Если нужно PHP, то используйте его. Если уже и хотите намешать, то как-то так. Отправьте GET/POST запрос AJAX-ом на php скрипт.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script language="javascript">
        function fn() {
            xhr = new XMLHttpRequest();
            xhr.open = open('POST', '../script.php', false);
            xhr.onreadystatechange = function(){
              if (xhr.status === 200)
                 document.getElementById("result").textContent = xhr.responseText;
            }
            xhr.send(null);
        }
    </script>
</head>
<body>
        <form name="rz2" method="post">
            <input type="submit" name="subm" value="Кнопка" onClick="fn()">
            <div id=result></div>
        </form>
    </body>
</html>

script.php

PHP
1
2
3
4
5
6
<?
    global $a;
    $a=$_POST["subm"]);
//действия с переменной
    print($a);
?>

p/s: код на коленке набросал, мог ошибиться где-то, но как по мне тут все решается простым php form action, и не надо городить забор там где он не нужен)

Добавлено через 8 минут
понял что все проще чем мне хотелось бы…

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script language="javascript">
        function fn() {
            xhr = new XMLHttpRequest();
            xhr.open = open('GET', '../script.php', false);
            xhr.onreadystatechange = function(){
              if (xhr.status === 200)
                 document.getElementById("result").textContent = xhr.responseText;
            }
            xhr.send(null);
        }
    </script>
</head>
<body>
            <button id="subm" onClick="fn()">Кнопка</button>
            <div id=result></div>
    </body>
</html>

script.php

PHP
1
2
3
4
<?
    global $a;
    print($a);
?>

Добавлено через 9 часов 1 минуту
чуть переписал на итерации, как у вас)

Javascript
1
2
3
4
5
6
7
8
9
10
11
<script>
        function fn() {
            xhr = new XMLHttpRequest();
            xhr.open('GET', 'sc.php?val=' + (document.getElementById("result").textContent || 0), false);
            xhr.onreadystatechange = function(){
              if (xhr.status === 200)
                 document.getElementById("result").textContent = xhr.responseText;
            }
            xhr.send(null);
        }
    </script>
PHP
1
2
3
4
5
<?
$a = $_GET["val"];
$a++;
    echo $a;
?>



0



0 / 0 / 0

Регистрация: 01.07.2015

Сообщений: 6

06.10.2015, 20:31

 [ТС]

9

temkasky, Спасибо, огромное. Можно вам написать на mail?



0



81 / 81 / 50

Регистрация: 26.11.2012

Сообщений: 303

06.10.2015, 20:45

10

для этого есть кнопочка (спасибо)

пишите тут в лс



1



0 / 0 / 0

Регистрация: 01.07.2015

Сообщений: 6

06.10.2015, 20:51

 [ТС]

11

А как это сделать?

Добавлено через 1 минуту
Это личное сообщение?



0



81 / 81 / 50

Регистрация: 26.11.2012

Сообщений: 303

06.10.2015, 20:54

12

отправил вам в лс. Смотрите ваши уведомления



0



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

Дело в том, что 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
$var = 'Hello, world';
print '<script language="javascript">alert("'.$var.'");</script>
?>

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

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

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


<script language="javascript">alert("Hello, wordl");</script>

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

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

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

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


<script language="javascript">
var message = encodeURIComponent('Hello, server!');
window.location.href = 'http://dayte2.com/index.php?message'+message;
</script>

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

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

<?php
print $_GET[message];
?>

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

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

<script src="http://yandex.st/jquery/1.5.0/jquery.min.js" type="text/javascript"></script>
<script language="javascript">
var message = 'Hello, server!';
$.get('http://dayte2.com/index.php', {message:message}, function(data)	{
	alert('Сервер ответил: '+data);
});
</script>

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

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

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

<?php
$arr = array('test'=>'123','key'=>'value');
$js_obj = json_encode($arr);
print "<script language='javascript'>var obj=$js_obj; alert(obj.test);</script>";
?>

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

<script language="javascript">var obj={"test":"123","key":"value"}; alert(obj.test);</script>

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

Итого

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

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

  1. Используйте AJAX для передачи переменной PHP в JavaScript
  2. Используйте JavaScript, чтобы избежать сценариев PHP для передачи переменной PHP в JavaScript
  3. Используйте короткий эхо-тег PHP <?=?> Внутри JavaScript для передачи переменной PHP в JavaScript

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

Мы представим способ передачи переменной PHP в JavaScript с помощью AJAX. Этот метод запрашивает данные с сервера PHP и запускается на клиентском компьютере.

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

Мы покажем вам еще один пример передачи переменной PHP в JavaScript с использованием короткого тега echo в JavaScript как <?=$var?>, Где <?=$var?> — это переменная PHP.

Используйте AJAX для передачи переменной PHP в JavaScript

Мы можем использовать AJAX для передачи данных и переменных с PHP-сервера в JavaScript. Этот метод имеет отдельные серверные и клиентские сценарии. Это делает код чище и улучшает читаемость кода. AJAX означает асинхронный JavaScript и XML. Он использует объект XMLHttpRequest для запроса данных с сервера. Он отображает данные с использованием JavaScript и HTML DOM. Этот процесс происходит асинхронно, что означает, что изменения на веб-странице происходят без ее перезагрузки. Однако при использовании AJAX в сетях возникает задержка, поскольку он отправляет HTTP-запрос. В этом методе мы пишем код JavaScript в файле PHP.

Например, создайте файл PHP с именем index.php. Напишите код JavaScript внутри тега <script>. Создайте переменную req, используя ключевое слово var. Создайте объект запроса функции XMLHttpRequest() и присвойте его переменной req. Вызвать функцию onload() с объектом req, используя выражение функции. Внутри функции используйте функцию console.log() для регистрации свойства this.responseText. Не забывайте заканчивать выражение функции точкой с запятой. Используйте объект req для вызова функции open(). Задайте get, get-data.php и true одновременно в качестве параметров функции. Вызвать функцию send() с объектом req. Создайте еще один файл PHP с именем get-data.php. Присвойте переменной var значение Mountain. Повторите функцию json_encode() с параметром var.

В приведенном ниже примере мы создали объект запроса с помощью функции XMLHttpRequest(). Функция onload() обрабатывает операцию, которая будет выполняться во время ответа. Функция open() определяет метод HTTP, файл PHP, который отправляет ответ JSON, и логическое значение, которое контролирует остальную часть выполнения скрипта. Функция json_encode() в файле get-data.php отправляет ответ в формате JSON. Здесь мы напечатали в консоли переменную $var.

Пример кода:

# php 7.*
<?php
?>
<script>
var req = new XMLHttpRequest(); 
    req.onload = function() {
    console.log(this.responseText); 
 };
req.open("get", "get-data.php", true); 
req.send();
</script>
# php 7.*
<?php
$var = "Mountain";
echo json_encode($var); 
?>

Выход:

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

Мы можем использовать JavaScript после тегов PHP, чтобы избежать сценариев PHP. Мы можем создать переменную PHP в скрипте PH P. Затем мы можем написать JavaScript, чтобы избежать написанного выше PHP и передать переменную внутри кода JavaScript. Внутри JavaScript мы можем использовать тег PHP, чтобы отобразить переменную PHP, назначив ее переменной JavaScript.

Например, присвоить значение Metallica переменной $var внутри тегов PHP. Напишите тег скрипт и внутри него напишите тег PHP. Внутри тега PHP отобразите переменную JavaScript jsvar. Назначьте переменную PHP $var на jsvar. Не забудьте заключить в кавычку $var и точку с запятой после нее. Закройте тег PHP и зарегистрируйте значение jsvar с помощью функции console.log(). Закройте тег скрипт. В приведенном ниже примере мы зарегистрировали переменную PHP $var в консоли с помощью JavaScript. Мы видим вывод в консоли веб-страницы.

Пример кода:

#php 7.x
<?php
$var = 'Metallica';
?>
<script>
   <?php
       echo "var jsvar ='$var';";
   ?>
   console.log(jsvar); 
</script>

Выход:

Используйте короткий эхо-тег PHP <?=?> Внутри JavaScript для передачи переменной PHP в JavaScript

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

Например, присвойте значение Megadeth переменной $var внутри тегов PHP. Откройте тег скрипт и создайте переменную JavaScript jsvar. Запишите сокращенный эхо-тег $var Как значение переменной jsvar. Зарегистрируйте переменную с помощью функции console.log(). Мы можем просмотреть вывод скрипта в консоли веб-страницы.

Пример кода:

#php 7.x
<?php
$var = 'Megadeth';
?>
<script>
    var jsvar = '<?=$var?>';
    console.log(jsvar); 
</script>
?>

Выход:

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить пароль электронной почты на телефоне mail ru
  • Как изменить переменную css через js
  • Как изменить пароль электронной почты на смартфоне
  • Как изменить переменное напряжение на постоянное
  • Как изменить пароль электронной подписи на госуслугах

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии