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

标签 php mysql foreach

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

Warning: Invalid argument supplied for foreach() in C:\wamp\www\path\menu.php on line 75

这是 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."' 将确保在查询中获取的变量用 ' 引号引起来!

另外,升级到 better and secure way of doing things

关于PHP 无法将全局变量导入到类内部的函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846915/

相关文章:

php - 我无法使用年、月和秒查询 Datetime 列

mysql - 计算不同条件下的 2 列

javascript - 如何优化node.js中array.forEach的计算速度

python - Beautifulsoup 获取汤中未选择的元素

c# - 函数返回是否会中断循环并处理内存中的变量?

php - mysql 时间戳不在纪元

php - Cpanel 共享主机中的 Laravel 5.5 错误 500

php - 根据登录用户过滤数据后,为 foreach() 错误提供的参数无效

mysql - 连接 MySQL 与 Visual Studio C#

mysql - 分组依据 - 需要单行显示