嵌套while循环只运行一次

时间:2017-07-21 12:56:59

标签: php html postgresql

我正在运行两个while循环来在html中显示一个表。

  • 第一个while循环是显示来自所选数据表的数据,只要数据库中有内容。
  • 我的第二个while循环显示一个下拉列表,其中应显示另一个表的内容。

我的目标是每行显示此下拉列表。我的问题是填充数据的下拉列表只显示在第一个表格中。所有其他行只显示一个空的选择字段。有人可以帮助我做错了吗?

我的代码到目前为止:

    $link=pg_connect($conn_str); 
    if (!$link) {die('Verbindung schlug fehl.');}

    $arbeitspaket = pg_query($link, "SELECT * FROM arbeitspaket WHERE id='$_SESSION[user_id]'");

    $sql = "SELECT * FROM anwender ORDER BY nachname ASC";
    $mitarbeiter = pg_query($link, $sql); ?>

<form action=mitarbeiterauswahl.php method=post>

    <table border=1>
    <tr>
        <th>Arbeitspaket-ID</th>
        <th>Arbeitspaketbezeichnung</th>
        <th>Mitarbeiterbedarf</th>
        <th>Mitarbeiterzuordnung</th>
    </tr>

    <?php while($results=pg_fetch_array($arbeitspaket)){?>          
        <tr>
        <td><?php echo $results['apid']; ?></td>
        <td><?php echo $results['arbeitspaketbezeichnung']; ?></td>
        <td><?php echo $results['mitarbeiterbedarf']; ?></td>
        <td>
            <select name="mitarbeiter">
            <?php while($row = pg_fetch_array($mitarbeiter)){
                 echo '<option value="'. $row['id'] .'">('. $row['id'] .') '. $row['vorname'] .' '. $row['nachname'] .'</option>'."\n"; }?> 
            </select>
        </td>
        </tr>
    <?php } ?>
    </table>
</form>

3 个答案:

答案 0 :(得分:4)

你为什么不试试foreach?在这种情况下看起来好多了。这样的事情:
  

<table border=1>
<tr>
    <th>Arbeitspaket-ID</th>
    <th>Arbeitspaketbezeichnung</th>
    <th>Mitarbeiterbedarf</th>
    <th>Mitarbeiterzuordnung</th>
</tr>
<?php $results= pg_fetch_array($arbeitspaket);
  $arbeiters = pg_fetch_array($mitarbeiter); 
    foreach($results as $result){?>          
    <tr>
    <td><?php echo $result['apid']; ?></td>
    <td><?php echo $result['arbeitspaketbezeichnung']; ?></td>
    <td><?php echo $result['mitarbeiterbedarf']; ?></td>
    <td>
        <select name="mitarbeiter">
        <?php foreach($arbeiters as $arbeiter) {
             echo '<option value="'. $arbeiter) ['id'] .'">('. $arbeiter) ['id'] .') '. $arbeiter) ['vorname'] .' '. $arbeiter) ['nachname'] .'</option>'."\n"; }?> 
        </select>
    </td>
    </tr>
<?php } ?>
</table>

答案 1 :(得分:1)

代码中的问题是你消耗了第一个循环中的所有数据,之后就消失了。将数据存储在数组中并遍历数组。

<form action=mitarbeiterauswahl.php method=post>

    <table border=1>
    <tr>
        <th>Arbeitspaket-ID</th>
        <th>Arbeitspaketbezeichnung</th>
        <th>Mitarbeiterbedarf</th>
        <th>Mitarbeiterzuordnung</th>
    </tr>

    <?php
      $mitarbeiter_array = array();
      while($row = pg_fetch_array($mitarbeiter)) {
        $mitarbeiter_array[] = $row;
      }
      unset($row);
    ?>

    <?php while($results=pg_fetch_array($arbeitspaket)){?>          
        <tr>
        <td><?php echo $results['apid']; ?></td>
        <td><?php echo $results['arbeitspaketbezeichnung']; ?></td>
        <td><?php echo $results['mitarbeiterbedarf']; ?></td>
        <td>
            <select name="mitarbeiter">
            <?php foreach($mitarbeiter_array as $row){
                 echo '<option value="'. $row['id'] .'">('. $row['id'] .') '. $row['vorname'] .' '. $row['nachname'] .'</option>'."\n"; }?> 
            </select>
        </td>
        </tr>
    <?php } ?>
    </table>
</form>

答案 2 :(得分:0)

我认为这将是更好的方式,并且会很快

std::string