Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重复使用,而循环仅适用于一个选择框_Php_Html_While Loop - Fatal编程技术网

Php 重复使用,而循环仅适用于一个选择框

Php 重复使用,而循环仅适用于一个选择框,php,html,while-loop,Php,Html,While Loop,我需要从页面顶部的cups选择框中生成一个团队列表,该代码允许我运行while循环来为第一个选择框生成正确的结果,但是,当我在第二个选择框中复制代码时,它不会显示任何结果 <form class="seed-form"> <select name="team" required> <option value='Holder' disabled selected>Select Team</option> &

我需要从页面顶部的cups选择框中生成一个团队列表,该代码允许我运行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
                }
            }
          }
          ?>

选拔队

问题是
fetch_assoc()
返回结果集中的下一行,除非没有其他行了(在这种情况下,它返回
NULL
-请参阅)

第一个
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>

选拔队

警告:您的代码易受SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。给出了风险的解释,以及如何使用PHP/mysqli安全地编写查询的一些示例。切勿将未初始化的数据直接插入SQL。按照现在编写代码的方式,有人很容易窃取、错误更改甚至删除您的数据。这两种方法都会在第96行的C:\xampp\htdocs\friendlyfixtures\tables.php中抛出通知:Undefined variable:show_teams in C:\xampp\htdocs\friendlyfixtures\tables.php,并警告:mysqli_data\u seek()希望参数1为mysqli_result,第101行C:\xampp\htdocs\friendlyfixtures\tables.php中的null根据您问题中的代码,
$show\u teams
是您的查询结果对象。这就是为什么我用这个名字。可能是您同时更改了它或其他什么?没有一个变量名被更改,因此我非常困惑,不认为您有任何线索吗?我看不出您是如何运行查询和分配结果的,所以很难确定。你能把它添加到问题的代码中吗?不用担心,我把数据放在了别处,现在变量被识别了。不过,我也非常感谢阵列解决方案,谢谢您的帮助!