Я хочу вставить значение javascript в переменную сеанса php, но внутри функции javascript.
Вот что я пробовал и не работает:
function languageChange() { var lang = $('#websites1 option:selected').val(); <?php $_SESSION['SESS_LANGUAGE']?> = lang; alert(<?php echo $_SESSION['SESS_LANGUAGE']?>); }
Вы не можете получить к нему доступ напрямую (как вы это делаете). Однако это можно сделать с помощью AJAX. Вот идеальное рабочее решение.
Вот HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>1</title> </head> <body> <form id="form1" name="form1" method="post" action=""> <label for="websites1">Websites</label> <select name="websites1" id="websites1"> <option value="Design">Design</option> <option value="Dev">Dev</option> <option value="Ecom">Ecom</option> </select> </form> <script type="text/javascript" src="js/jquery_1.7.1_min.js"></script> <script type="text/javascript"> $(document).ready(function() { function languageChange() { var lang = $('#websites1 option:selected').val(); return lang; } $('#websites1').change(function(e) { var lang = languageChange(); var dataString = 'lang=' + lang; $.ajax({ type: "POST", url: "pass_value.php", data: dataString, dataType: 'json', cache: false, success: function(response) { alert(response.message); } }); return false; }); }); </script> </body> </html>
Вот часть AJAX:
//pass_value.php <?php session_start(); $_SESSION['SESS_LANGUAGE'] = $_POST['lang']; $_SESSION['SESS_LANGUAGE'] = 'This is my PHP session var --->'.$_SESSION['SESS_LANGUAGE']; print json_encode(array('message' => $_SESSION['SESS_LANGUAGE'])); die(); ?>
ИЗМЕНИТЬ 1:
После запуска кода просто выберите любой из других параметров из раскрывающегося меню, и вы получите предупреждение, которое даст вам значение переменной сеанса php вместе с настраиваемым текстом, который я добавил к нему.
EDIT 2:
Если вы хотите запустить мое решение на своем конце, убедитесь, что вы правильно указываете jQuery jQuery. Мой код jquery указывает на src="js/jquery_1.7.1_min.js"
. Убедитесь, что вы обновили это.
Javascript не имеет доступа к PHP-переменным. Клиент (веб-браузер / javascript) имеет доступ только к файлу Cookie или Cookieless ID (Querystring), связанным с сеансом.
Сеансы используются таким образом, чтобы не позволить клиенту изменять параметры, связанные с сеансом, не проходя через сервер. Менее безопасным способом является использование файлов cookie для всех настроек. Нечто вроде настройки языка может быть хорошей идеей хранить в cookie, а не в сеансе.
Чтобы решить эту проблему, вы можете создать страницу, которая принимает имя свойства сеанса (например, ваш «SESS_LANGUAGE») и значение, которое помещает его в сеанс, используя php. Я настоятельно советю против этого, потому что любой пользователь может установить любую переменную сеанса.
Лучший способ, я могу себе представить, это то, что вы отправляете AJAX-вызов на страницу, говорящий, что вы хотите изменить язык.
Вызываемый url будет примерно таким: changelanguage.php? Lang = en_US
И php-код для changelaguange.php: $ _SESSION ['SESS_LANGUAGE'] = $ _GET ['lang'];