未定义的索引和2个类似的PHP文件?

时间:2010-07-05 13:19:27

标签: php indexing undefined

此文件(localization.php)中:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang'])) {
    $lang = $_GET['lang'];

    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}

// use appropiate lang.xx.php file according to the value of the $lang
switch ($_SESSION['lang']) { //line 23
case 'en':
case 'es':
case 'zh-tw':
case 'zh-cn':
    $lang_file = 'lang.'.$_SESSION['lang'].'.php';
    break;

default:
    $lang_file = 'lang.en.php';
}
//localization helper function
function l($localization) {
    global $lang;
    return $lang[$localization];
}
    include_once 'languages/'.$lang_file;
?>

我收到以下警告信息(localization.php):

Notice: Undefined index: lang in 
     

d:\瓦帕\ WWW \项目\ alexchen \ alexchen2.0 \ localization.php   在第23行

但在这个另一个类似的文件中,我没有收到警告:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang'])) {
    $lang = $_GET['lang'];

    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}

// use appropiate lang.xx.php file according to the value of the $lang
switch ($lang) {
case 'en':
    $lang_file = 'lang.en.php';
    break;

case 'es':
    $lang_file = 'lang.es.php';
    break;

case 'zh-tw':
    $lang_file = 'lang.zh-tw.php';
    break;

case 'zh-cn':
    $lang_file = 'lang.zh-cn.php';
    break;

default:
    $lang_file = 'lang.en.php';
}

//translation helper function
function l($localization) {
    global $lang;
    return $lang[$localization];
}

    include_once 'languages/'.$lang_file;
?>

的index.php:

    <?php
    include_once 'localization.php';
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
        <meta name="robots" content="index, follow"/>
        <meta name="description" content="Web design and Translation / 網頁設計和翻譯" />
        <meta name="keywords" content="web development, web developer, web design, web designer, translation, translator, taiwan, taipei, taichung, english, chinese, spanish, 網站開發者, 網頁設計, 網頁設計師, 翻譯, 翻譯著, 台灣, 台北, 台中, 英文, 中文, 西班牙文, html, css, javascript, php" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
        <title>Alex Chen - Web design and Translation / 網頁設計和翻譯</title>
        <link rel="stylesheet" type="text/css" href="styles/reset.css" />
        <link rel="stylesheet" type="text/css" href="styles/global.css" />
        <link rel="stylesheet" type="text/css" href="fancybox/jquery.fancybox-1.3.1.css" />
        <?php if($lang_file=='lang.zh-tw.php' || $lang_file=='lang.zh-cn.php') {echo '<link rel="stylesheet" type="text/css" href="styles/chinese.css" />';} ?>
    </head>
    <body id="home">
    <div id="header">
        <div class=

"container">

(等)

我知道他们的确基本相同,但为什么我会从第一个localization.php文件中收到警告?我该如何解决?

5 个答案:

答案 0 :(得分:1)

它不相似。你有一个

switch ($_SESSION['lang']) { //line 23

在另一个

switch ($lang) {

在第一种情况下,您会收到通知,因为......数组lang中没有名为$_SESSION的元素。在第二个中,您不会收到任何警告,因为$lang始终是定义的。

答案 1 :(得分:1)

仔细看看第一个的控制流程?即使$ _SESSION ['lang']未定义,也会设置$ lang。 然后在switch()语句中直接使用$ _SESSION ['lang']抛出所有这些未定义变量的回退。

答案 2 :(得分:0)

因为您没有在switch语句中检查是否设置了$_SESSION['lang']变量。

答案 3 :(得分:0)

原因很明显:在第一个中你没有$ _SESSION ['lang']变量集。
使用$ lang代替。

答案 4 :(得分:0)

 switch ($_SESSION['lang'])// lang is not yet a key of $_SESSION

尝试这样的事情

 if(!array_key_exists('lang',$_SESSION))
 {
        $_SESSION['lang']=some_value;
 }
 else if(..)
 {

        //remaining code
 }