www.kaminskiy-web.com | contact@kaminskiy-web.com
Статьи для веб-мастера - Kaminskiy-web

Главная страницаОбо мнеКонтактная информация
Статьи HTML и CSS JavaScript PHP и MySQL Раскрутка сайтов Хостинг Рейтинг украинского хостинга Анекдоты Анекдотов стрит

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

Автор статьи: Сергей Каминский

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

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

Способ первый

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

<?php

// проверяем существование переменных $width и $height
if (isset($_GET['width']) AND isset($_GET['height'])) {
    // если переменные существуют, то выводим полученные значения на экран
    echo 'Ширина экрана: ' . $_GET['width'] . "<br />\n";
    echo 'Высота экрана: ' . $_GET['height'] . "<br />\n";
}

// если переменные не существуют, то выполняем следующее
else {
    // PHP сгенерирует код JavaScript, который обработает браузер
    // пользователя и передаст значения обратно PHP-скрипту через протокол HTTP
    echo "<script language='javascript'>\n";
    echo " location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"
            . "width=\" + screen.width + \"&height=\" + screen.height;\n";
    echo "</script>\n";
}

?>

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

http://путь_к_скрипту/имя_скрипта.php?width=1024&height=768

Знак ? после имени скрипта указывает веб-серверу что мы хотим сделать GET-запрос к нашему PHP-скрипту, после него идет имя нашей переменной и знак равенства, который присваивает переменной следующее за ним значение, определенное JavaScript-функцией. Знак & служит разделителем для переменных в запросе. В результате в PHP будут переданы две переменные: $width со значением равным ширине экрана (1024) и $height со значением равным высоте экрана (768).

А на экране увидим результат выполнения скрипта. Например:

Результат выполнения скрипта
Полученный результат: ширина и высота экрана пользователя

Способ второй

Пишем код JavaScript и выполняем его на стороне пользователя, а потом передаем результат через HTTP-протокол в PHP:

<script language="javascript"><!--
query='width=' + screen.width + '&height=' + screen.height;
//--></script>

Здесь мы присвоили переменной query запрос со значениями ширины и высоты экрана пользователя, как и в предыдущем примере. В результате выполнения этого кода переменной query будет присвоена строка width=1024&height=768 (при разрешении экрана 1024х768).

Теперь нам нужно передать переменную query из JavaScript в PHP. Передавать запрос будем PHP-скрипту с именем script.php. Для этого мы воспользуемся HTML-тегом <img />, который вставляет изображения в HTML-страницу. Вместо картинки мы укажем имя нашего PHP-скрипта и присоединим к нему переменную query с запросом:

<script language="JavaScript"><!--
document.write('<img src="script.php?' + query +
' " '+'border="0" width="1" height="1" />');
//--></script>

Таким способом можно передавать запросы любому скрипту. Результат выполнения этих двух блоков JavaScript-кода браузер пользователя превратит в следующий HTML-код:

<img src="script.php?width=1024&height=768" border="0" width="1" height="1" />

Браузер обратится к серверу за картинкой по указанному адресу и, в результате, сделает GET-запрос к script.php с нужными нам параметрами. Теперь мы можем обработать полученные переменные в нашем script.php:

<?php

// проверяем наличие переменных $width и $height
if (isset($_GET['width']) AND isset($_GET['height'])) {
        // Здесь пишем код, который выполнится, если переменные
        // $width и $height существуют. Их, например, можно записать в
        // текстовый файл или добавить в базу данных
}
else {
        // Здесь пишем код, который выполнится, если переменные не 
        // существуют или можно вообще не использовать else {}
}

?>

Способ третий

Данные будут переданы PHP-скрипту после нажатия пользователем на ссылку:

<script language="javascript"><!--
query='width=' + screen.width + '&height=' + screen.height;
//--></script>

<script language="javascript"><!--
document.write("<a href=script.php?" + query + ">ссылка</a>");
//--></script>

или на кнопку в форме:

<script language="javascript"><!--
width=screen.width;
height=screen.height;
//--></script>

<script language="javascript"><!--
document.write('<form name="form1" action="script.php" method="get">');
document.write('<input type="hidden" name="width" value="' + width + ' ">');
document.write('<input type="hidden" name="height" value="' + height + ' ">');
document.write('<input type="submit" value="Отправить"></form>');
//--></script>

В случае использования формы каждую переменную необходимо передавать в отдельном поле. Мы использовали скрытые поля формы, имена которых соответствуют именам переменных в нашем PHP-скрипте. Или же можно вообще не использовать текстовые поля, а передать все данные через параметр action="" нашей формы:

<script language="javascript"><!--
query='width=' + screen.width + '&height=' + screen.height;
//--></script>

<script language="javascript"><!--
document.write('<form name="form2" method="get" action="script.php?' + 
query + '"><input type="submit" name="submit" value="Отправить"></form>');
//--></script>

Заключение

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

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

Другие записи по теме в разделе статьи по PHP и MySQL

Копирование статьи запрещено.