2009-12-09 56 views
0

好吧,首先让我只说我的脚本工作正常,它只是在数据库中没有任何内容时显示这些警告。我想要的是即使数据库中没有任何内容,警告也会消失。PHP和MySQL - PHP警告有帮助吗?

如何纠正这个问题?我需要更改哪部分代码?

这里是警告。

Warning: ksort() expects parameter 1 to be array, null given on line 24 

Warning: array_values() [function.array-values]: The argument should be an array on line 38 

Warning: Wrong parameter count for min() on line 38 

Warning: array_values() [function.array-values]: The argument should be an array on line 39 

Warning: Wrong parameter count for max() on line 39 

Warning: Invalid argument supplied for foreach() on line 49 

这是下面的完整代码。

<?php 

require_once ('./mysqli_connect.php'); 


$link = mysqli_connect("localhost", "root", "", "sitename"); 

function tag_info($link) { 

$page = "3"; 


$query = "SELECT tags.tag, 
         COUNT(questions_tags.tag_id) 'num' 
         FROM questions_tags 
         JOIN tags ON tags.id = questions_tags.tag_id 
         WHERE questions_tags.users_questions_id = '$page' 
         GROUP BY tags.tag 
         ORDER BY num DESC"; 
    if ($result = mysqli_query($link, $query)) { 
     while($row = mysqli_fetch_array($result)) { 
      $arr[$row['tag']] = $row['num']; 
     } 
     ksort($arr); 
     return $arr; 
    } 
    return array(); 
} 


function tag_cloud($link) { 

$min_size = .8; 
$max_size = 1.5; 

$tags = tag_info($link); 

$minimum_count = min(array_values($tags)); 
$maximum_count = max(array_values($tags)); 
$spread = $maximum_count - $minimum_count; 

if($spread == 0) { 
    $spread = 1; 
} 

$cloud_html = ''; 
$cloud_tags = array(); 

foreach ($tags as $tag => $count) { 
$size = $min_size + ($count - $minimum_count) * ($max_size - $min_size)/$spread; 
$cloud_tags[] = '<a style="font-size: '. $size . 'em' 
. '" class="tag_cloud" href="http://www.example.com/tags/' . $tag .'/' 
. '" title="\'' . $tag . '\' returned a count of ' . $count . '">' 
. htmlspecialchars(stripslashes($tag)) . '</a>'; 
} 
$cloud_html = join("\n", $cloud_tags) . "\n"; 
return $cloud_html; 

} 

?> 

@Franz现在我收到了这些警告。

Warning: min() [function.min]: Array must contain at least one element on line 39 

Warning: max() [function.max]: Array must contain at least one element on line 40 
+0

我真的不知道该向谁奖励?你们两个都帮助了我。 – SlapThiS 2009-12-09 13:05:22

+0

我第一次:P我不在乎,但。给他信贷,他比我更需要它;) – Franz 2009-12-09 15:51:34

回答

1

这应该工作:你忘了的时候没有行返回(在你的代码)的情况下:

if ($result = mysqli_query($link, $query)) 
{ 
    $arr = array(); 
    while($row = mysqli_fetch_array($result)) 
    { 
     $arr[$row['tag']] = $row['num']; 
    } 
    ksort($arr); 
    return $arr; 
} 
return array() 
1

替换:

 ksort($arr); 
     return $arr; 

有了:

 if(empty($arr)){ 
      return array(); 
     } 
     ksort($arr); 
     return $arr; 

然后,可以肯定的是:

$tags = tag_info($link); 

有:

$tags = tag_info($link); 
if(empty($tags)){ 
    return ''; 
} 
+0

嘿,工作。 – SlapThiS 2009-12-09 13:04:35