WHILE循环不能使用两次? PHP

时间:2011-07-06 09:31:00

标签: php html loops

我是PHP新手,希望有人能帮助我。我有一个表,其中包含mysql数据库中的“id”,“img”,“link”和“desc”。我希望它能够反映出这样的事情:

    <div id="featured">
    <a target='_blank' href='link'><img src='image link1' title='description'/></a>
    <a target='_blank' href='link'><img src='image link2' title='description'/></a>
    <a target='_blank' href='link'><img src='image link3' title='description'/></a>
    <a target='_blank' href='link'><img src='image link4' title='description'/></a>
    </div>
    <div id="cap">
    <span class='desc' id='idnumber'>Description1</span>
    <span class='desc' id='idnumber'>Description2</span>
    <span class='desc' id='idnumber'>Description3</span>
    <span class='desc' id='idnumber'>Description4</span>
    </div>

PHP代码:

<?php
  require_once "./dbconfig.php";
  opendb();
  $sql = "SELECT * FROM images ORDER BY id DESC"; 
  $query = querydb($sql);
?>
<div id="featured"> 
<?php
  while($row = mysql_fetch_array( $query )){
    echo "<a target='_blank' href='$row[link]'><img src='$row[img]' title='$row[desc]'/></a>";
  }
?>
</div>
<div id="cap">
<?php
  while($row = mysql_fetch_array( $query )){
    echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
  }
closedb();
?>
</div>

可以使用两次或者我错了吗?当我运行此代码时,第二个while循环不起作用,跨度根本没有显示。

请帮忙。

10 个答案:

答案 0 :(得分:13)

在第二次循环播放之前使用此功能

mysql_data_seek($query,0);

答案 1 :(得分:13)

第一个循环已经消耗了mysql的所有数据,因此第二个循环中没有任何内容。您可以同时存储行数据,然后重新使用该存储。

<div id="featured"> 
<?php
$rows = array();
while($row = mysql_fetch_array( $query )){
  $rows[] = $row;
  echo "<a target='_blank' href='$row[link]'><img src='$row[img]' title='$row[desc]'/></a>";
}
?>
</div>
<div id="cap">
<?php
foreach($rows as $row){
  echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
closedb();
?>
</div>

答案 2 :(得分:3)

数据库引用($query)充当指向下一个未读记录的指针;当你调用mysql_fetch_array()时,它会获取指向的记录,并将指针移动到下一个位置。

因此,在循环遍历它们之后,指针将指向记录集的末尾,因此当您请求下一条记录时它将返回false。完成循环对指针没有任何其他作用;它仍然指向记录集的结尾。

所以你需要做的是将指针重置为数据集的开头,然后再循环它。

执行此操作的功能是mysql_data_seek();

因此,在第二个循环之前,您需要立即使用以下代码行:

mysql_data_seek($query, 0);

希望有所帮助。

答案 3 :(得分:1)

来自mysql_fetch_array

的文档
  

返回与获取的行对应的数组,并向前移动内部数据指针。

当您尝试使用第二个while循环时,内部数据点仍然在结尾。你没有做任何重置它。

您可以使用mysql_data_seek

将其移回到开头

答案 4 :(得分:1)

您可以使用while两次,但请参阅what it does

  

它告诉PHP重复执行嵌套语句,只要while表达式的计算结果为TRUE。

一旦mysql_fetch_array没有更多要提取的行,它将在每次后续调用时返回false - 所以你的第一个while循环将停止循环,因为表达式mysql_fetch_array( $query )是假;并且因为它是第二个while中的相同表达式,所以该循环将永远不会执行(因为表达式的计算结果为false)。

怎么做:如果你想多次循环结果,我建议先将结果行存储到数组中,然后循环遍历它们。简化示例:

$results = Array();
while ($row = mysql_fetch_rows($query)) {
  $results[] = $row;
}

foreach ($results as $row) {
  echo $row['something'];
}

答案 5 :(得分:0)

mysql_fetch_array将为空,因为您已从数据库中获取了所有行。您需要使用mysql_data_seek重置指针。

<?php
mysql_data_seek( $query, 0 );
while($row = mysql_fetch_array( $query )){
echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
... rest of code

答案 6 :(得分:0)

使用mysql_fetch_array(),您将逐步完成结果,直到结束。或者正如PHP文档所说:

  

返回与之对应的数组   获取的行并移动内部   数据指针前进。

这意味着,您需要从新的开始。所以,在第二次使用之前使用它:

mysql_data_seek($query,0);

答案 7 :(得分:0)

试试这个

        <?php
         require_once "./dbconfig.php";
          opendb();
          $sql = "SELECT * FROM images ORDER BY id DESC"; 
          $query = querydb($sql);
           $query2 = querydb($sql);
         ?>
         <div id="featured"> 
         <?php
         while($row = mysql_fetch_array( $query )){
          echo "<a target='_blank' href='$row[link]'><img src='$row[img]'
 title='$row[desc]'/>     </a>";
          }
          ?>
       </div>
        <div id="cap">
         <?php
         while($row2 = mysql_fetch_array( $query2 )){
         echo "<span class='desc' id='$row2[id]'>$row2[desc]</span>";
         }
         closedb(); 
         ?>

答案 8 :(得分:0)

$ str_res1 =''; $ str_res2 =''; while($ row = mysql_fetch_array($ query)){   $ str_res1。=“a target ='_ blank'href ='$ row [link]'img src ='$ row [img]'title ='$ row [desc]'a”;   $ str_res2。=“span class ='desc'id ='$ row [id]'&gt; $ row [desc] span&gt;”; }

抱歉,我无法在我的答案中填写html标签,因为如果我写“&lt;”它会从帖子中消失或“/&gt;”

通过这个你可以获取php字符串中的所有值,你可以在任何你想要的地方回显它。

答案 9 :(得分:0)

$stuff = mysql_query("SELECT * FROM tbl");

while($s = mysql_fetch_array($stuff)){
//ur code
}
// add this line
mysql_data_seek( $stuff, 0 );

while($r = mysql_fetch_array($stuff)){
//ur code
}