我无法在同一次运行中更新或删除或创建我的Cookie

时间:2016-12-26 17:06:00

标签: php html

我正在开展一个项目,它需要两种语言,一种是阿拉伯语,一种是英语 所以为了处理我在页脚中添加了两个链接
对于这两种语言,一旦用户点击其中一种语言,它将通过$ _GET作为AR和EN发送值 然后创建一个具有这些值的cookie并调用一个名为的页面  翻译文本的ar.php / en.php取决于选择的语言

///////////////问题/////////////////

它不会在第一次尝试时创建,更新或删除cookie 当我设置cookie时,之后会有一个cookie处理,但是它的剂量 没有看到cookie我必须让运行完成并打开页面,然后我重新执行代码再次执行代码,cookie将在那里 我在netbeans和visual studio上尝试了相同的项目,但同样的结果我认为它可能是编译器的问题。

 <?php

if(isset($_GET['lang']))
{
    /* one cookie with the same name but the value will change depend on user choice if he changed the language
      and by the value i will call the ar.php or en.php with the array with all the text content of the page  */
    $langu=$_GET['lang'];
    switch($langu)
    {
        case "en":
       setcookie("page_lang", "en", time() +3600,"/"); // set a cookie for english language
        break;
        case "ar":
            setcookie("page_lang", "ar", time()+3600,"/"); // set a cookie for arabic language
            break;
        default:
            setcookie("page_lang", "ar", time() -100,"/");
            break;
    }

}
//$langu="";
include("css/header.html");

    if(isset($_COOKIE['page_lang']))
    {// choosen language
        $cookie_language =$_COOKIE['page_lang'];

        include("lang/{$cookie_language}.php");
    }else
    { //default language
        include("lang/ar.php");
    }


?>

1 个答案:

答案 0 :(得分:1)

Cookie(以及$_COOKIE数组)是基于浏览器的。因此,如果您执行setcookie,则在请求完成后不会出现,并且浏览器会向您发送更多请求,以便您能够阅读它。

只需检查或GET参数,它就像:

if(isset($_COOKIE['page_lang']) || isset($_GET['lang') )

或者在阅读$_GET时检查您之前设置的变量。

$langu = null;
if(isset($_GET['lang'])) {
   $langu = $_GET['lang'];
   switch($_GET['lang'])) {
    case "en":
        // set a cookie for english language
        setcookie("page_lang", "en", time() +3600,"/");

        break;
    case "ar":
        // set a cookie for arabic language
        setcookie("page_lang", "ar", time()+3600,"/"); 
        break;
    default:
        setcookie("page_lang", "ar", time() -100,"/");
        $langu = 'ar';
        break;
  }
}
elseif (isset($_COOKIE['page_lang'])) {
   $langu = $_COOKIE['page_lang'];
}

if (!is_null($langu) {
  include("lang/{$langu}.php");
}
else {
  include("lang/ar.php");
}

这样GET优先于cookie(所以你可以改变语言),你选择语言并在同一步骤设置cookie。

所以:如果用户点击语言按钮来更改语言,我们设置新的cookie并显示该语言。如果在参数中选择了无效语言,请返回默认语言。

如果没有参数,并且之前设置了cookie,则显示在cookie上选择的语言。如果既没有设置参数也没有设置cookier,只需显示默认语言。