【问题标题】:Change Language in database by cliking the country flags通过单击国家标志更改数据库中的语言
【发布时间】:2014-06-06 04:35:12
【问题描述】:

有点长的解释。我为访问我网站的人保存了一个数据库名称“访问者”(双语):

  1. id = 1

  2. 会话 = fdslup7nsop20ctlkbcf2f7016

  3. 国家 = 新加坡

  4. 语言 = zh

基于该数据库,我可以使用语言 (en) 作为会话来展示我的英文版网站。

在我的 index.php 中,我使用了这个脚本并且它可以工作:

$locallang=$pages->SelectLocalLanguage(); // pointed to $page class
$_SESSION['mylang'] =$locallang;

if ($_SESSION['mylang']=='en' {
   // show in english
  }else{
   // show in other language
 }

在 $page 类中:

public function SelectLocalLanguage() {
    $ses_id = session_id();
    $query  = $this->db->prepare("SELECT * FROM `visitors` WHERE session=? ");
    $query->bindValue(1, $ses_id);
       try {   $query->execute();
                 $result = $query->fetch();
    return $result ['language'];
    } catch(PDOException $e){
        die($e->getMessage());
    } 
    }

在我的 topheader.php 中,我有几个标志图像代表每种语言(id、en、fr、ru),其中之一是:

<li><a href="#" ><img src="/images/flags/id.png"></a></li>

问题:

通过单击标志图像,我需要:

  1. 同时更改数据库中的“语言”记录,
  2. 刷新页面以查看结果。

我用过很多方法,但还是很笨。

    <li><a href="#"  onClick="ChangeLang('id'); window.location.reload();return false;"><img src="/images/flags/id.png"></a></li>

<script type="text/javascript">
function ChangeLangauge(lg) {
    alert("Change Language? Page will be Refresed..!!");
    url = "/includes/change-lang.php?newlang=" + lg;

}
</script>

这样还是没有变化..

更改-lang.php:

<?php
$lg=$_GET['newlang'];
$pages->ChangeLang($lg);
?>

在#pages 类中:

public function ChangeLang($lg) {

    $ses_id = session_id();

    $query  = $this->db->prepare("UPDATE `visitors` SET select_lang=? WHERE session=? ");
    $query->bindValue(1, $lg);

    try {
        $query->execute();


    } catch(PDOException $e){
        die($e->getMessage());
    } 
    }

【问题讨论】:

  • 考虑到您到目前为止编写的代码,您至少应该尝试并发布它,解释它的问题
  • 结果是页面重新加载和更改数据库后我必须再次刷新才能看到最终结果。

标签: javascript php mysqli


【解决方案1】:

也许您可以使链接转到同一页面,并在末尾添加一个 GET 变量,例如 ?lang=en。然后,创建一个函数,在页面加载时检查该 GET 变量,更改数据库是否存在。

function changeLanguage() {
if(!isset($_GET['lang'])) return;
else {
    $query = $this->db->prepare("UPDATE visitors SET language = ? WHERE session = ?");
    $query->bindValue($_GET['lang'], session_id());
    try {   
        $query->execute();
    }
}

假设这发生在您在上面发布的示例代码之前,您已经创建的函数应该在页面完全加载之前获取新的数据库更改,这将以任何新语言加载页面。

【讨论】:

    【解决方案2】:

    PHP 脚本的前面部分:

    if ( isset($_GET['newlang']) ) {
        $pages->ChangeLang($_GET['newlang']);
    }
    

    还有:

    public function ChangeLang($lg) {
    
        $ses_id = session_id();
    
        $query  = $this->db->prepare("UPDATE `visitors` SET select_lang=? WHERE session=? ");
        $query->bindValue(1, $lg);
        $query->bindValue(2, $ses_id);
    
        try {
            $query->execute();
    
    
        } catch(PDOException $e){
            die($e->getMessage());
        } 
    }
    

    以及标志链接:

    <li><a href="?newlang='id'"><img src="/images/flags/id.png"></a></li>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多