在一段时间的循环混乱!

时间:2010-07-18 23:52:49

标签: php loops

我花了很多时间制作一个功能,最后15-20分钟试图解决这个问题。我需要帮助!

我从数据库中选择多行,然后在while循环中运行它们。

可在下拉菜单中找到它们。

<form method="POST" action="adminprocess.php">
  <fieldset>
    <p>
      <label class="left2">League:</label>
      <select name="league" class="combo">
      <?php 
        $q = $database->selectAllLeagues();
        while($row=mysql_fetch_assoc($q))
        {
          $theid = $row['id'];
          extract($row);
          ?>
          <option value="<? echo $theid; ?>"> 
            <? echo $format.'_'.$game.'_'.$name.'_Season '.$season;?> 
          </option>
          <?
        }
      ?>
      </select>
    </p>
    <p>
      <input type="hidden" name="replaceleague" />
      <input type="hidden" name="format" value="<? echo $format; ?>" />
      <input type="hidden" name="game" value="<? echo $game; ?>" />
      <input type="hidden" name="name" value="<? echo $name; ?>" />
      <input type="hidden" name="season" value="<? echo $season; ?>" />
      <input type='submit' class="button" value='Select league' />
    </p>
  </fieldset>
</form>

$ theid似乎工作正常,取决于我在下拉菜单中选择的行。 但是,我无法在隐藏的输入中获取下面的值,以便从下拉框中选择的行中传递正确的值。

似乎总是从数据库的第一行传递4个变量。

所以基本上,我需要它来选择正确的行并使用该数据。 我究竟做错了什么!!! 谢谢你的阅读!

2 个答案:

答案 0 :(得分:2)

要直接回答关于while循环的问题,这是因为隐藏的输入在循环外回显,之后数据中数据的最后一行被PHP用来输出到那些隐藏的输入。

但我建议不要使用像这样的隐藏表单元素,而是使用<option>提交带有用户选择的值的表单,读取值(如$_POST['league']中所示),然后获取具有该ID的数据库中的行并相应地使用它。 (如果您的应用程序当然需要,您可能希望保留replaceleague隐藏的输入。)

它更容易,而且它确保用户选择的行的信息来自您的数据库而不是被篡改。事实上,对于大多数应用来说,这是正确的方法。

答案 1 :(得分:2)

  1. 您的隐藏字段在循环外部初始化,因此它们将使用while循环的最后一次迭代中遗留的值。 (即最后一次获取的行)

  2. 为什么你首先需要隐藏的字段?提交表单时,league字段将包含下拉框中所选行的ID。使用该ID,您可以在处理表单时从数据库中获取其他字段。