Повторно используемый цикл работает только для одного поля выбора - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно создать список команд из поля выбора кубков в верхней части моей страницы, этот код позволяет мне запустить цикл while, чтобы сгенерировать правильные результаты для первого поля выбора, однако, когда я повторяю код во втором он не показывает результатов?

      <form class="seed-form">
        <select name="team" required>
        <option value='Holder' disabled selected>Select Team</option> <!--Placeholder for Select-->
          <?php
          while ($team = mysqli_fetch_assoc($show_teams)) { ?>
              <option value="<?php echo $team["team_id"]; ?>"><?php echo $team["team_name"]; ?></option>
          <?php } ?> <!--FILLS SELECT BOX WITH TEAMS FROM THAT CUP-->
        </select>
        <select name="team" required>
        <option value='Holder' disabled selected>Select Team</option> <!--Placeholder for Select-->
          <?php
          while ($team = mysqli_fetch_assoc($show_teams)) { ?>
              <option value="<?php echo $team["team_id"]; ?>"><?php echo $team["team_name"]; ?></option>
          <?php } ?> <!--FILLS SELECT BOX WITH TEAMS FROM THAT CUP-->
        </select>



        <input type="submit" name="submit" value="Generate" class="submit">
          <?php

          if (isset($_POST['submit'])) { //checking if submit button was clicked

            include_once 'action/dbcon.php';

            $cname = $_POST['cupname'];

            if (empty($cname)) {
                header("Location: tables.php?field=empty"); //return them if fields are empty
                exit();
            } else {
                $sql = "SELECT * FROM teams WHERE cup_name='$cname'";
                $show_teams = mysqli_query($conn, $sql);
                $numberCheck = mysqli_num_rows($show_teams);

                if ($numberCheck < 8) {
                header("Location: tables.php?tables=1"); //Take to cup page if there arent enough teams in the cup
                }
            }
          }
          ?>

1 Ответ

0 голосов
/ 28 марта 2019

Проблема в том, что fetch_assoc() возвращает следующую строку в наборе результатов, если только больше не осталось (в этом случае возвращается NULL - см. документы ).

Ваш первый цикл while выполняется до тех пор, пока больше не будет результатов. Поэтому, когда вы запускаете второй цикл while, все еще ... вы уже догадались: результатов больше нет. Вы уже использовали их. Поэтому первый вызов fetch_assoc() во втором цикле немедленно возвращает NULL, поэтому условие цикла никогда не выполняется, и цикл никогда не выполняется.

Есть два способа решить эту проблему:

1) Сброс указателя результата на начало набора результатов. Где-то между двумя циклами напишите

mysqli_data_seek($show_teams, 0);

См. документы для получения дополнительной информации.

2) Считать все данные в массив PHP, который затем вы можете перебирать столько раз, сколько захотите, используя foreach:

      <?php
      $teams = array();
      while ($team = mysqli_fetch_assoc($show_teams)) {
        $teams[] = $team;
      }
      ?>

      <form class="seed-form">
        <select name="team" required>
        <option value='Holder' disabled selected>Select Team</option> <!--Placeholder for Select-->
          <?php
          foreach ($teams as $team) { ?>
              <option value="<?php echo $team["team_id"]; ?>"><?php echo $team["team_name"]; ?></option>
          <?php } ?><!--FILLS SELECT BOX WITH TEAMS FROM THAT CUP-->
        </select>
        <select name="team" required>
        <option value='Holder' disabled selected>Select Team</option> <!--Placeholder for Select-->
          <?php
          foreach ($teams as $team) { ?>
              <option value="<?php echo $team["team_id"]; ?>"><?php echo $team["team_name"]; ?></option>
          <?php } ?> <!--FILLS SELECT BOX WITH TEAMS FROM THAT CUP-->
        </select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...