我创建了两个函数,这两个函数在我将它们转换为函数之前用于工作,现在我得到以下错误Notice: Undefined variable: link, url and depth
,我想知道如何解决这个问题以便它们可以正常工作。问题来自最后一段代码allCategories($link[0], $url, 0, $depth+1);
,我认为它源于第二个函数。
功能1
function allCategories($parent = 0, $parent_url = '', $count = 0, $depth = 0){
catQuery();
global $link;
if($count == 0){
echo '<ol>';
} else {
echo '<ol>';
}
foreach ($parent as $id => $cat) {
if($cat['parent_id'] == '0'){
$url = $parent_url . $cat['url'];
$url = str_replace('?cat=', '', $url);
echo '<li><a href="http://www.example.com/cat/' . strip_tags($url) . '" title="' . strip_tags($cat['category']) . ' Category Link" class="category-headers">' . strip_tags($cat['category']) . '</a>';
} else {
$indent = str_repeat(' ', $depth * 1);
$url = $parent_url . $cat['url'];
$cat_num = array('?cat=','&sub1=','&sub2='');
$url = str_replace($cat_num, '/', $url);
echo '<li>' . $indent . '<a href="http://www.example.com/cat/' . strip_tags($url) . '" title="' . strip_tags($cat['category']) . ' Category Link">' . strip_tags($cat['category']) . '</a>';
}
if(isset($link[$id])) {
allCategories($link[$id], $url, $count+1, $depth+1);
}
echo '</li>';
}
echo '</ol>';
}
功能2
function catQuery(){
$cat_dbc = mysqli_query(database(),"SELECT * FROM categories ORDER BY parent_id, category LIKE '%more%', category ASC");
if (!$cat_dbc) {
trigger_error(mysqli_error(database()));
}
$link = array();
while(list($id, $parent_id, $category, $url, $depth) = mysqli_fetch_array($cat_dbc)){
$link[$parent_id][$id] = array('parent_id' => $parent_id, 'category' => $category, 'url' => $url, 'depth' => $depth);
}
}
显示所需的输出。
allCategories($link[0], $url, 0, $depth+1);
答案 0 :(得分:2)
答案编写不尝试访问未定义变量的代码。如果您是初学者,可能需要阅读最近关于PHP5的书。
在第二个功能中,您忘记了global $link;
。但是,在您的第一个函数中更好return $link;
并使用$link = catQuery();
而不是滥用全局变量
对于其他未定义的变量..在调用$link
之前,您是否定义了$url
,$depth
和allCategories($link[0], $url, 0, $depth+1);
?
答案 1 :(得分:1)
像这样改变函数catQuery的结尾
while(list($id, $parent_id, $category, $url, $depth) = mysqli_fetch_array($cat_dbc)){
$link[$parent_id][$id] = array('parent_id' => $parent_id, 'category' => $category, 'url' => $url, 'depth' => $depth);
}
return $link;
}
然后像这样改变allCategories函数的开头
function allCategories($parent = 0, $parent_url = '', $count = 0, $depth = 0){
$link = catQuery();
// global $link;
if($count == 0){
它不起作用的原因是你需要有“全球$ link”。在每个函数中定义。但全局变量不是好习惯,所以最好从catQuery函数返回$ link,然后在allCategories函数内部使用它