Передать значение из javascript в php.
На первый взгляд кажется, что для этого должно быть множество способов, но на самом деле их только два, ну по крайней мере — из известных мне. Ведь js это язык клиентской части, а php серверной и по сути совершенно не взаимосвязаны, но все же есть способ передать значение полученное js в php, правда есть и минусы этого решение, позже объясню.Каким образом передавать?
Для примера возьмём значение ширины экрана и это значение передадим в php через метод GET (адресную строку браузера), можно и через POST при форме отправки, но GET в данном случае удобнее. Разместим js скрипт в шаблоне.<script language="JavaScript"> //Заносим в переменную это значение: width=0000 getwidth = 'width='+ window.outerWidth; //Записываем в виде картинки в DOM. document.write('<img src="$_SERVER['DOCUMENT_ROOT']/folder/screen.php?' + getwidth + ' " '+'border="0" width="1" height="1" rel="nofollow" style="display:none;"/>'); </script>
Для обращения нам нужен доступ к файлу php по ссылке, поэтому следует создать новый php файл и передавать в него.
Теперь следует выбрать куда сохранять в cookie, которое сохраняется на стороне пользователя или в session, которая сохраняется на стороне сервера?
Собственно screen.php для Сессии…
<?php //Если значение width определено if (isset($_GET['width'])) { //Указываем кодировку header("Content-Type: text/html; charset=utf-8"); //Заносим значение в переменную $zScreen_width = $_GET['width']; //Удаляем html теги и т.д. $zScreen_width = strip_tags($zScreen_width); //Или преобразуем кавычки $zScreen_width = htmlentities($zScreen_width, ENT_QUOTES, "UTF-8"); //Открываем сессию session_start(); //Записываем в сессию значение width $_SESSION['width'] = $zScreen_width; //Выводим в файле, если надо... echo $_SESSION['width']; } else { echo ":("; } ?>
Для Куков практически аналогично…
<?php //Если значение width определено if (isset($_GET['width'])) { //Указываем кодировку header("Content-Type: text/html; charset=utf-8"); //Заносим значение в переменную $zScreen_width = $_GET['width']; //Удаляем html теги и т.д. $zScreen_width = strip_tags($zScreen_width); //Или преобразуем кавычки $zScreen_width = htmlentities($zScreen_width, ENT_QUOTES, "UTF-8"); //Записываем в КУКУ - width, значение, на сутки, путь куков. setcookie("width", $zScreen_width, time() + 3600*24, "/"); //Выводим в файле, если надо... echo $_COOKIE['width']; } else { echo ":("; } ?>
Использовать можно в любом файле.
//Если сессия с шириной определена if (isset($_SESSION['width'])) { //Заносим в переменку - значение ширины из сессии! $zScreen_width = $_SESSION['width']; } //иначе... else { $zScreen_width = 'Не определена...'; } //Или... //Если куки с шириной определены if (isset($_COOKIE['width'])) { //Заносим в переменку - значение ширины из сессии! $zScreen_width = $_COOKIE['width']; } //иначе... else { $zScreen_width = 'Не определена...'; }
В чём же минус этих схем?
Если Вы планируете использовать это значение в шаблоне элементарным правилом, если ширина такая, показывать это и т.д и используете какие либо шаблонизаторы, тогда это значение передастся в шаблон при следующей загрузке страницы, что есть естественно, ведь при загрузке выполняется сначала php, а после шаблон, в котором есть наш js, который в свою очередь передает эти данные в php. Исходя из этого при самой первой загрузке наш $GET width, будет не определен. Во-всём остальном схема действующая.Возможно вы знаете способ лучше, обязательно поделитесь :)
Статья "Передать из js в php" содержит 2 комментария
Например…
После использовать методы получения и чтения куков и на основе этих методов оперировать дальше?