ФорумПрограммированиеPHP для идиотов → Функция работает не так, как надо

Функция работает не так, как надо

  • Геннадий

    Сообщения: 29 Репутация: N Группа: Кто попало

    Spritz 24 августа 2007 г. 5:09

    Я написал функию для вывода новостей:

    function ShowAllNews($page, $kol_n, $razdel) {
    if (empty($razdel)) {
    $result = mysql_query("SELECT * FROM `news` ORDER BY date_add DESC LIMIT $page, $kol_n");
    } else {
    $result = mysql_query("SELECT * FROM `news` WHERE razdel='$razdel' ORDER BY date_add DESC LIMIT $page, $kol_n");
    }
    if (!empty($result)) {
    $rows = mysql_num_rows($result);

    for ($i=0; $i<=$rows; $i++) {
    $res_arr = mysql_fetch_array($result, MYSQL_ASSOC);
    $all_news['title'][$i] = $res_arr['title'];
    $all_news['fname'][$i] = $res_arr['fname'];
    $all_news['thumb'][$i] = $res_arr['thumb'];
    $all_news['body'][$i] = $res_arr['body'];
    $all_news['small_text'][$i] = $res_arr['small_text'];
    $all_news['part'][$i] = $res_arr['part'];
    $all_news['who_add'][$i] = $res_arr['who_add'];
    $all_news['date_add'][$i] = $res_arr['date_add'];
    $all_news['views'][$i] = $res_arr['views'];
    }
    return $all_news;
    } else {
    $my_notice = "Новостей в данной группе нет";
    return $my_notice;
    }
    } // end


    Подскажите пожалуйста:
    1) Почему если функции передать такие параметры ShowAllNews(0,10,"") то она ничего не выводит?
    Я ведь написал if(empty($razdel)) {
    2) Почему вогда новостей в какой либо группе нет и должна вернуться переменная my_notice с содержанием "Новостей в данной группе нет", я вывожу ее и вылазит надпись Array?
    3) Подскажите что еще не правильно на ваш взгляд? Какие недостатки в функции? Слабые места?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 24 августа 2007 г. 5:16, спустя 7 минут 20 секунд

    ты как вызываешь функцию?

    надеюсь print ShowAllNews(0,10,""); ?

    надо бы переписать эту функцию, очень все сложно =)
    я думаю, примерно вот так:
    function ShowAllNews($page, $kol_n, $razdel)
    {
    if (empty($razdel))
    {
    $result = mysql_query("SELECT * FROM `news` ORDER BY date_add DESC LIMIT $page, $kol_n") or die(mysql_error());
    }
    else
    {
    $result = mysql_query("SELECT * FROM `news` WHERE razdel='$razdel' ORDER BY date_add DESC LIMIT $page, $kol_n") or die(mysql_error());
    }

    if (mysql_num_rows($result) > 0)
    {
    $all_news = array();

    while ($row = mysql_fetch_assoc($result))
    {
    $all_news[] = $row;
    }

    return ($all_news);
    }
    else
    {
    return ("Новостей в данной группе нет");
    }
    }
    все умрут, а я изумруд
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 24 августа 2007 г. 5:16, спустя 16 секунд

    mysql_query возвращает значение типа Resource, которое ссылается на набор полученных записей. Количество записей в этом наборе может быть и 0, но сама Resource-переменная никогда empty не будет.

    Вы возвращаете массив при успешном завершении и строку при неуспешном. Как вы проверяете результат?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 24 августа 2007 г. 5:54, спустя 37 минут 38 секунд

    ага тут лучше


    $news = ShowAllNews();

    if (is_array($news))
    {
    foreach($news as $key => $news_item)
    {
    // вывод новостей….
    }
    }
    else
    {
    print $news;
    }
    все умрут, а я изумруд
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 24 августа 2007 г. 6:09, спустя 15 минут 15 секунд

    По правильному нужно просто возвращать массив с новостями. Пустой, так пустой. А в основной программе, если хочется можно проверять размер и выводить какие-то строки.
  • Геннадий

    Сообщения: 29 Репутация: N Группа: Кто попало

    Spritz 24 августа 2007 г. 6:16, спустя 6 минут 27 секунд


    ты как вызываешь функцию?
    надеюсь print ShowAllNews(0,10,\"\"); ?


    Я получал массив $all_news и потом в зависимости от шаблона выводил в цикле.
    В местах где нужно выводить заглавие, текст новости т.д. выводил соответствующий элемент массива


    надо бы переписать эту функцию, очень все сложно =)
    я думаю, примерно вот так:

    Да, так проще, но я хочу чтобы функция возвращала массив, и я потом уже с ним что хотел то и делал.


    mysql_query возвращает значение типа Resource, которое ссылается на набор полученных записей. Количество записей в этом наборе может быть и 0, но сама Resource-переменная никогда empty не будет.

    Спасибо, не знал этого.


    Вы возвращаете массив при успешном завершении и строку при неуспешном. Как вы проверяете результат?

    is_array();
  • Геннадий

    Сообщения: 29 Репутация: N Группа: Кто попало

    Spritz 24 августа 2007 г. 6:17, спустя 1 минуту 36 секунд


    По правильному нужно просто возвращать массив с новостями. Пустой, так пустой. А в основной программе, если хочется можно проверять размер и выводить какие-то строки.

    Вот примерно это я и хотел получить. Теперь переделывать буду…

Пожалуйста, авторизуйтесь, чтобы написать комментарий!