RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 818431
Accepted
Tick-Tack
Tick-Tack
Asked:2020-04-24 04:39:01 +0000 UTC2020-04-24 04:39:01 +0000 UTC 2020-04-24 04:39:01 +0000 UTC

将当前值写入会话

  • 772

我正在尝试在网站上实现多语言之类的东西。原理是这样的:当用户进入网站时,将浏览器的语言设置为他,如果需要,他可以通过在表单中​​选择合适的语言来改变语言。

问题是,在单击按钮(将所选语言发送到服务器)之前,变量为$_POST空,因此我无法将其写入会话以保存用户选择的语言,然后单击另一种语言的按钮,会话中的条目不会被覆盖。形式和ajax要求:

$('#multilanguage li input').click(function select_lang() {
  // id инпутов это сокращение от названия языка, так я определяю какая кнопка была нажата
  // смотрим какая кнопка была нажата
  var lang = $(this).attr('id');
  //отправляем запрос
  $.ajax({
    type: "POST",
    url: "php/header.php",
    data: {
      'lang': lang
    },
    cache: false,
    success: function(response) {
      console.log(response);

    },
    error: function(error) {
      alert('bad');
      console.log(error);
    }
  });
});
<form method="post" action="javascript:void(null);" id="multilanguage">
  <li>
    <input type="button" name="lang" value="English" id="en">
  </li>
  <li>
    <input type="button" name="lang" value="Russian" id="ru">
  </li>
</form>

这里php:

@session_start();
//массив с языками для выбора 
$lang_arr = [
    "en" => array('English', 'Russian', 'Ukrainian'), 
    "ru" => array('Английский', 'Русский', 'Украинский')
];

//определяем язык браузера
preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches); 
$langs = array_combine($matches[1], $matches[2]); 
foreach ($langs as $n => $v)
    $langs[$n] = $v ? $v : 1; 
arsort($langs); 
$default_lang = key($langs);
$default_lang = substr($default_lang, 0, 2); 

//если пользователь не выбирал язык
if (!isset($_POST['lang'])) {
    //проверяем совпадает ли его язык браузера с перечнем доступных языков
    if(array_key_exists($default_lang, $lang_arr)) {
        //если всё хорошо заносим его в сессию
        $_SESSION['lang'] = $default_lang;
    }else {
        //если нет, то заносим в сессию английский язык
        $_SESSION['lang']= 'en';
    }
}
//если пользователь выбрал другой язык
if(isset($_POST['lang'])) {
    //проверяем всё ли корректно
    if(array_key_exists($_POST['lang'], $lang_arr)) {
        //если всё хорошо заносим в сессию выбранный язык
        $_SESSION['lang'] = $_POST['lang'];
    }else {
        //иначе ставим английский 
        $_SESSION['lang'] = 'en';
    }
}

底线是用户的浏览器语言输入到会话中,但是当我单击另一种语言时,会话中没有任何内容被覆盖。告诉我如何做到这一点,以便在单击按钮后更新页面并更改会话中的语言?

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Bykuznec
    2020-04-24T13:07:58Z2020-04-24T13:07:58Z

    首先,稍微改变一下表单,使语言不是 ID,而是按钮的属性或属性。例如

    <form id="multilanguage">
        <li>
            <input type="button" name="lang" value="English" data-lang="en">
        </li>
        <li>
            <input type="button" name="lang" value="Russian" data-lang="ru">
        </li>
    </form>
    

    进一步这样的 JS 代码,在控制台中一切正常

    $(document).on('click', 'input[name="lang"]', function() {
        var btn = $(this);
        var fields = new Object();
    
        fields.title = btn.val(); // Тайтл 
        fields.lang  = btn.attr('data-lang'); // Код
    
    
        $.ajax({
            url: 'php/header.php',
            type: 'POST',
            data: fields,
            dataType: 'json',
            beforeSend: function() {
                console.log('beforeSend', fields);
            },
            success: function(json) {
                console.log('success', json);
            }
        });
    
        return false;
    });
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5