我有一个基于php和mysql的无限菜单类,可在stackoverflow上找到。我已针对多语言网页对其进行了自定义。但是,当我尝试将全局变量导入类时,会给我一个警告。
警告:第75行的C:\ wamp \ www \ path \ menu.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
变量来自lang.php文件。看起来像;
<?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.'';
我想念什么?我的语言脚本不能处理last 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."'
将确保在查询中获取的变量用'
引号引起来!
另外,升级到更好,更安全的工作方式
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句