Хобрук: Ваш путь к мастерству в программировании

Цикл while и mysql_fetch_assoc в одном запросе?

У меня есть веб-страница, которая выполняет запрос MySQL к таблице. У меня есть это, чтобы отразить это в таблице, и это работает так, как должно, например:

$query = mysql_query("SELECT * FROM table");

while($row = mysql_fetch_array($query){
   // my table and db stuff echos out here
}

Теперь, используя тот же запрос mysql $query, я пытаюсь повторить его снова на той же странице, используя тот же запрос внизу, но моя проблема в том, что он не работает.

Теперь вы, возможно, думаете, что я делаю что-то странное, но причина, по которой первый код выше выводит данные в таблице, а также флажки рядом с материалом выводятся, как и для формы. Все это работает нормально, но, похоже, я не могу выполнить еще один цикл while для того же запроса. Второй точно такой же, как и выше; разница только в том, что это не форма.

Могу ли я выполнить while() и mysql_fetch_assoc только один раз в одном запросе?

ОБНОВЛЕНИЕ:

Извините, я все еще не понимаю должным образом.

Вот мой код; может ли кто-нибудь отредактировать это для меня?

(Я не смог поместить теги php в код, чтобы отделить HTML от кода PHP. Приносим извинения за неудобства).

$q = mysql_query("SELECT * FROM table");

<h1> Vote for your favourite extension </h1>

<form method="post" action="<?php echo basename(__file__); ?>">
<table>
<tbody>
    <tr class="odd">
        <td colspan="3" class="cellfeat" style="text-align: center;">Vote for your favourite extension</td>
    </tr>
        <?php
        if(!$q){
            // query failed etc

        } else { // query ok so display form
            while($row = mysql_fetch_array($q)){
                echo '<tr class="odd">';
                echo '<td class="cellfeat"><img src="images/statimages/extensions.gif" alt="Extension Vote Image" /></td>';
                echo '<td class="cellfeat">'.$row['checkbox'].'</td>';
                echo '<td class="cellfeat"><input type="checkbox" name="'.$row['id'].'" value="'.$row['id'].'" /></td>';
                echo '</tr>';
            }
        }
        ?>
</tbody>
</table>
<input type="submit" class="submitcontact" value="Vote" />
</form>

<h1>Extension Statistics</h1>

<table>
    <tbody>
    <tr class="odd">
        <td colspan="3" class="cellfeat" style="text-align: center;">Voting Statistics</td>
    </tr>
            while($row = mysql_fetch_array($q)){
                echo '<tr class="odd">';
                echo '<td class="cellfeat"><img src="images/statimages/extensions.gif" alt="Extension Vote Image" /></td>';
                echo '<td class="cellfeat">'.$row['checkbox'].'</td>';
                echo '<td class="cellfeat">'.$row['count'].'</td>';
                echo '</tr>';
            }
        ?>
    </tbody>
</table>

  • ой. ваш код неверен. Где ты это взял? у вас уже есть рабочий код? 28.02.2011
  • Теперь это решено, спасибо; и он работал нормально, только не во втором запросе. но я использовал mysql_data_seek(), и он делает то, что хотел. спасибо 28.02.2011

Ответы:


1

Насколько я понимаю, вам нужно использовать эту функцию

http://php.net/manual/en/function.mysql-data-seek.php

чтобы переместить указатель

28.02.2011
  • рулекс ; я обновил первый пост для помощи. Спасибо за любую помощь. phplover 28.02.2011
  • Rulex спасибо, потом мне удалось разобраться. Это выглядело сложнее, чем в руководстве по php. фпловер :) 28.02.2011
  • Это не очень хороший подход. Извлечение всех данных в массив гораздо более разумно. 28.02.2011

  • 2

    Единственный правильный способ:
    сначала собрать данные в массив

    $data = array();
    while($row = mysql_fetch_array($query){
       $data[] = $row;
    }
    

    затем вызовите шаблон
    и используйте свои данные столько раз, сколько пожелаете:

    <table>
    <? foreach ($data as $row): ?>
    <tr>
    <td><?=$row['id']?></td>
    <td><?=$row['name']?></td>
    <? endforeach ?>
    </table?>
    
    28.02.2011
  • я обновил первый пост для помощи. Спасибо за любую помощь. phplover 28.02.2011
  • @PHPLOVER извините, я не редактирую коды. Я считаю, что этот сайт посвящен образованию, а не благотворительности. 28.02.2011
  • Речь идет об образовании, но иногда, если мы чего-то не понимаем, я думаю, что было бы неплохо спросить, поскольку мы можем изучить изменения в коде, чтобы мы могли учиться на наших ошибках / недоразумениях. Я никогда не прошу кого-то изменить мой код, если я сначала не испробовал все возможные способы. Но в любом случае спасибо, я понимаю, что у нас разные мнения. phplover 28.02.2011
  • @PHPLOVER По крайней мере, вам нужно попросить изменить рабочий код, а не тот, который выдает ошибки синтаксического анализа направо и налево. 28.02.2011
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..