PHP & MySQL - PHP предупреждения помогают?

0

Хорошо, сначала позвольте мне сказать, что мой script отлично работает, он просто показывает это предупреждение, когда в базе данных ничего нет. Я хочу, чтобы предупреждения уходили, даже когда в базе данных ничего нет.

Как можно исправить эту проблему? И какую часть моего кода мне нужно изменить?

Вот предупреждения.

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
    Я действительно не знаю, кого наградить? Вы оба помогли мне.
  • 0
    Я был первым: PI все равно. Дайте ему кредит, ему это нужно больше, чем мне;)
Теги:

2 ответа

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
    Эй, это сработало.
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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню