За последние 24 часа нас посетили 20185 программистов и 1084 робота. Сейчас ищут 849 программистов ...

while не выводит первую строку

Тема в разделе "PHP для новичков", создана пользователем chesterset, 12 фев 2014.

  1. chesterset

    chesterset Новичок

    С нами с:
    12 фев 2014
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте. При использовании цикла while он выводит найденные записи, кроме самой первой. Вот пример:
    Код (Text):
    1. $isforums = mysql_query("SELECT * FROM forums ORDER BY id DESC LIMIT 5");
    2. $forums = mysql_fetch_array($isforums);
    3. while($forums = mysql_fetch_array($isforums)){
    4. echo '<figure>
    5.     <figcaption>
    6.     <strong>'.$forums['forum_name'].'</strong>
    7.     <span>'.$forums['forum_descr'].'</span>
    8.     <em>'.$forums['forum_type'].'</em>
    9.     <a href="ss.html" class="opener"></a>
    10.     </figcaption>
    11.  
    12.     <a href="ss.html" class="thumb"><img src="'.$forums['forum_screenshot'].'"/></a>
    13.                                     </figure>';}
    В таблице 20 записей. Вместо 5 записей, установленных в sql запросе, он выводит 4, да и те не так, как нужно. Выводя, он пропускает самую первую запись (первая строка в таблице) и выводит остальные 4. Подскажите, пожалуйста, где ошибся.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    mysql_fetch_array два раза
     
  3. chesterset

    chesterset Новичок

    С нами с:
    12 фев 2014
    Сообщения:
    2
    Симпатии:
    0
    Да, я бог php. Спасибо, в этом и была проблема.
     
  4. alfieteam

    alfieteam Новичок

    С нами с:
    22 янв 2018
    Сообщения:
    1
    Симпатии:
    0
    Вставлю 5 копеек, так как статья в топе по выдаче по запросу while php не выводит первая строка.
    Вообщем, mysqli_fetch_assoc не терпит повторного вызова от одного mysqli_query().
    У меня был файл подключен через include, а в нём были:
    PHP:
    1. $get_build = mysqli_query(connect(),"SELECT * FROM `build` WHERE `build_owner` = '".$_SESSION['uid']."'")or die(mysqli_error());
    2. $build = mysqli_fetch_assoc($get_build);
    А в первичном файле:
    PHP:
    1. while($row = mysqli_fetch_assoc($get_build)){ ...
    На что он пропускал первую строку.
    Используя while($row = $build){ ... вообще зацикливался.
    ----------
    В моём случае проблема решилась так, я создал новый запрос к базе.
    PHP:
    1. $build_realty = mysqli_query(connect(),"SELECT * FROM `build` WHERE `build_owner` = '".$_SESSION['uid']."'")or die(mysqli_error());
    2.     while($row = mysqli_fetch_assoc($build_realty)){....
    ---
    п.с. Я человек, могу быть где то не прав)
     
    #4 alfieteam, 22 янв 2018
    Последнее редактирование модератором: 22 янв 2018
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Да, ты не прав. Ты сделал запрос, записал ресурс результата, выхватил первый кортеж, потом в цикле получил остальные кортежи и думаешь "а где, матьево, первый кортеж?". А потом ты удаляешь лишнее выхватывание первого кортежа и теперь в цикле оказываются все кортежи. Типа всё поправил.

    В отношении же бесконечного цикла всё тоже логично - результат присвоение переменной всегда будет истинным, если исходная переменная имеет логическую истину. И такое присвоение всегда будет давать истину для работы цикла. Бесконечно.