PHP无法将全局变量导入类内的函数中


PHP Can not import a global variable into a function that is inside a class

我有一个基于php和mysql的无限制菜单类,可以在stackoverflow上找到。我已经为多语言网页定制了它。但当我试图将全局变量导入类时,它会给我一个警告;

警告:第75行C:''wamp''www''path''manu.php中为foreach()提供的参数无效

这是Sql查询和get_menu_items函数:

function get_menu_items()
        {
                global $lang;
                global $visibility;
                $sql = 'SELECT menu. * , menu_lang. * 
                FROM menu
                INNER JOIN menu_lang 
                ON menu.id = menu_lang.menu_id
                AND menu_lang.menu_lang_iso = '.$lang.'
                AND menu_lang.visibility = '.$visibility.'';
                return $this->fetch_assoc_all( $sql );
        }

以及来自lang.php文件的$lang变量。它看起来像;

<?php
ob_start();
session_start();
header('Cache-control: private');
if(isset($_GET["lang"])) {
    $lang = $_GET["lang"];
    $_SESSION["lang"] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
elseif(isset($_SESSION["lang"])) {
    $lang = $_SESSION["lang"];
}
elseif(isset($_COOKIE["lang"])) {
    $lang = $_COOKIE["lang"];
}
else {
    $lang = "tr";
    $_SESSION["lang"] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
ob_end_flush();

我签署了警告线75 TH LINE,你可以在下面找到它;

function get_menu_html( $root_id = 0 )
        {
                $this->html  = array();
                $this->items = $this->get_menu_items();
                foreach ( $this->items as $item )
                        $children[$item['parent_id']][] = $item; // 75. LINE HERE
                $loop = !empty( $children[$root_id] );
....

如果我在没有变量manuel值的情况下更改sql查询,它可以完美地工作;

$sql = 'SELECT menu. * , menu_lang. * 
        FROM menu
        INNER JOIN menu_lang 
        ON menu.id = menu_lang.menu_id
        AND menu_lang.menu_lang_iso = "tr"
        AND menu_lang.visibility = '.$visibility.'';

我错过了什么?是我的语言脚本无法处理最后一个else语句,还是我的get_menu_items函数无法导入$lang变量?

任何帮助都会被告知。

旧式引号串接错误'

  $sql = "SELECT menu. * , menu_lang. * 
          FROM menu
          INNER JOIN menu_lang 
          ON menu.id = menu_lang.menu_id
          AND menu_lang.menu_lang_iso = '".$lang."'
          AND menu_lang.visibility = '".$visibility."'";

它的作用

这个特定的部分:'".$lang."'将确保在查询中提取的变量周围有'引号!

此外,升级到更好、更安全的做事方式

相关文章: