简体   繁体   English

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

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

I've a unlimited menu class based on php and mysql that found on stackoverflow. 我有一个基于php和mysql的无限菜单类,可在stackoverflow上找到。 I've customized it for multilanguage web page. 我已经为多语言网页定制了它。 But when i'm trying to import a global variable into class, itgives me a warning; 但是,当我尝试将全局变量导入类时,会给我一个警告。

Warning: Invalid argument supplied for foreach() in C:\\wamp\\www\\path\\menu.php on line 75 警告:第75行的C:\\ wamp \\ www \\ path \\ menu.php中为foreach()提供了无效的参数

This is Sql query and get_menu_items function: 这是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 );
        }

And $lang variable coming from lang.php file. $lang变量来自lang.php文件。 It looks like; 看起来像;

<?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();

i signed warning line 75 TH LINE , you can find it below; 我在警告行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] );
....

If i change sql query without variables manuel values it works perfectly; 如果我更改无变量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.'';

What am i missing? 我想念什么? Does my language script cant handle last else statement, or my get_menu_items function cant import $lang variable? 我的语言脚本不能处理last else语句,还是我的get_menu_items函数不能导入$lang变量?

Any help will greatly appricated. 任何帮助将不胜感激。

old school error of string concatenation of quotes ' 引号的字符串连接的老同学错误'

  $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."'";

what it does 它能做什么

this particular section : '".$lang."' will make sure that variable being fetched in query, is quoted with ' quotes around it! 这个特定的部分: '".$lang."'将确保在查询中获取的变量用'引号引起来!

Also, upgrade to better and secure way of doing things 另外,升级到更好,更安全的工作方式

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM