[HELP] Цикл do while, или просто while

Тема в разделе "PHP", создана пользователем saylar_06, 28 ноя 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. saylar_06

    saylar_06 Создатель

    Регистр.:
    7 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    Приветствую всех!

    Вот пишу тестовую функцию и возникла проблемка :( (от нехватки знаний)

    PHP:
    function get_page() {
        global 
    $index$num;
        
        if (
    $index == "custom") {
            
    $one "SELECT * FROM topics ORDER BY `id` DESC LIMIT $num";
            
    $two mysql_query($one);
            
    $th mysql_fetch_assoc($two);
            
            
    $i 1;
            do {
             
    $i++;     
             if (
    $i%== 0) {
                 
    $r " first";
                
    $y "";
             } else {
                   
    $r "";
                
    $y "<div class=\"clear\"></div>";
               }
             
    printf("
                     <article class=\"post column%s\">
              <div class=\"text\">
                      <h2><a href=\"\" rel=\"bookmark\">%s</a></h2>
                      <div class=\"date\" title=\"2 месяца 20 дней назад\">7 сентября 2010 г.</div>
                        <div class=\"entry\">
                                ws ... <a href=\"\">читать полностью &raquo;</a></p>
                      </div>
                      <div class=\"info\"><div>рубрика <a href=\"\" title=\"\" rel=\"category tag\"></a> | <a href=\"\" title=\"\">комментариев: 0</a></div></div>
                    </div>
            </article>%s"
    ,$r,$th["title"],$y);
            } while(
    $th mysql_fetch_assoc($two));
        } elseif (
    $index == "default") {
              echo 
    "Функция отсутствует рекомендуем воспользоватся функцией <b>custom</b>";
          } else {
            echo 
    "Переменная index (в файле conf.php) имеет некорректное значение!";
            }
    }
    И так... писал как мог (на что хватает знаний) мб вы подумаете что функция написанна колхозно и не аккуратно, но все же это раздел для новичков (к стати принимаются во внимания ваше исправление функции :) )

    В общем суть проблемы такова: Если вы поняли, то знаете что функция выведет в цикле из базы 7 заметок.. Так вот у всех одинаковый шаблон printf(); а как мне сделать чтоб у первой заметки был другой шаблон?

    P.S заранее благодарен вам за вашу поддержку, и помощь!
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    выборку из базы гораздо приятней делать с помощью
    PHP:
    while($th mysql_fetch_assoc($two)) {
    //....
    }
    тогда вам не понадобится перед циклом ввыполнять отдельно
    PHP:
    $th mysql_fetch_assoc($two);
    И самое главное не возникнет ошибки
    ведь в вашем сулчае, если из базы вернется ноль строк, то ваш цикл выполнится один раз.
    хотя должен ни одного.
    с этим разобрались.

    если вы хотите чтобы первая строка у вас отличалась, то просто воткните перед циклом
    PHP:
    if($th mysql_fetch_assoc($two)){//проверка на то, что первая строка вообще существует
    //То, что вы хотите выполнить с первой строкой
    }
     
    saylar_06 нравится это.
  3. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    как и просил - замечания по коду:

    1. давай осмысленные названия переменным, например
    PHP:
    $one => $query
    $two 
    => $result
    $th 
    => $row
    2. хоть и не обязательно и некоторые так пишут, но я считаю, что читабельнее так:
    PHP:
    if (clause)
    {
       
    $value $num;
       
    $another_value $num+5;
    }
    фигурные скобки с новых строк, друг под другом, текст в пределах скобок с одинаковым отступом

    3. Использоваться mysqli вместо mysql, так же фильтруй переменные
     
    saylar_06 нравится это.
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    1) что такое "if (clause)" ?
    2) чем mysqli лучше pdo драйвера для mysql?
     
  5. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    1) if (условие)
    2) ничем, я не использовал pdo_mysql. Если не использую фреймворк, то использую дата меппер + mysqli
     
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    1) что такое clause? это ни переменная, ни константа. вот мне интересно стало что это за надпись, может я не знаю чего :ah:?
    2) ты писал
    так объясни нам простым смертным, чем твой mysqli лучше mysql, при том что pdo входит в стандартный набор библиотек php,а mysqli еще надо подключать и не у всех это покатит. Я с тем же успехом могу порекомендовать использовать postgreSQL или MongoDB вместо твоего mysqli.

    Это из раздела стандартизации оформления кода и к функционалу никакого отношения не имеет вообще. Кроме того, таких стандартов существует несколько и какой из них лучше каждый разработчик выбирает для себя сам.
     
    saylar_06 нравится это.
  7. saylar_06

    saylar_06 Создатель

    Регистр.:
    7 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    спасибо всем кто мне помогает, вот появился другой вопросик:)

    а как сделать так чтоб после первой записи вывелось что то?

    Например: пошел вывод данных из базы и после первой заметки вывеслось слово echo "слово";
     
  8. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    PHP:
    $flag true;
    while(
    $th mysql_fetch_assoc($two))
    {
     if (
    $flag)
     {
         echo 
    'Message';
         
    flag false;
     }
    }
    самый простой способ
     
    saylar_06 нравится это.
  9. B0nuse

    B0nuse Постоялец

    Регистр.:
    6 июн 2009
    Сообщения:
    106
    Симпатии:
    21
    А не проще ли добавить в функцию аргументы без определения их в global?
    например
    PHP:
    function get_page($index="custom"$num=7$flag=null) { 
    // функция
    }
    т.е. при вызове функии без явного объявления переменных get_page(); они будут равны указанным значениям.
    Иначе, как объявим - get_page(other, 10, true);
     
    saylar_06 нравится это.
  10. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    глобальные переменные для того и объявляются, чтобы использовать их в любом куске кода.
     
    saylar_06 нравится это.
Статус темы:
Закрыта.