虽然{while {code}}不能正常工作

时间:2013-08-29 10:16:14

标签: php mysql

我注意到如果我有一个while {while {}}循环,则不会显示MYSQL数据库中的所有数据......

这是PHP(这是一个工作代码......)

<?php
$conn = mysql_connect("localhost","xfiddlec_user","public");
mysql_select_db("xfiddlec_max");
mysql_set_charset("UTF8", $conn);
?>

<script>
 $(function() 
 {
    var icons = 
    {
        header: "ui-icon-circle-arrow-e",
        activeHeader: "ui-icon-circle-arrow-s"
    };
    $( "#dam" ).accordion({
        icons: icons,
        heightStyle: "content",
        collapsible: true
    });
 });
</script>
<?php
        $construct ="SELECT * FROM Noutati";

        $constructaug ="SELECT * from Noutati WHERE MONTH(DataIntroducere) = 8 AND YEAR(DataIntroducere) = YEAR(CURDATE())";
        $run = mysql_query($construct) or die(mysql_error());
        $runaug = mysql_query($constructaug) or die(mysql_error());
        $foundnum = mysql_num_rows($run);
        $foundnumaug = mysql_num_rows($runaug);

    if ($foundnum==0)
    {
        echo "Nu avem noutăți!";
    }
    else
    {
        echo"<div id='dam'>";


        while($runrows = mysql_fetch_assoc($runaug) )
        {

            echo"
            <h3>August 2013</h3>
            <div><br>";
                while($runrows = mysql_fetch_assoc($runaug))
                {
                    $Luna = $runrows ['Luna'];
                    $Ziua = $runrows ['Ziua'];
                    $Mesaj = $runrows ['Mesaj'];
                    echo "
                    <table class='noutatitabel'>
                        <tr>
                            <td class='faramargini'>
                                <div class='data'>
                                    <div class='luna'>$Luna</div>
                                    <div class='ziua'>$Ziua</div>
                                </div>
                            </td>
                            <td class='albastru'>$Mesaj
                            </td>
                        </tr>
                    </table><br>";                      
                }
            echo"
            <br><hr><br></div>";
        }


        echo"</div>";
    }

?>

数据库包含6行。

当执行上面的代码时,会出现一个折叠式菜单,但只显示该行数据库的2行(对于特定的月份 - 未显示第1行),我只是不明白问题出在哪里。如果我删除第一个while循环,查询显示3行。我也有一个小提琴,可以找到here

我做错了吗?你见过这个吗?我该如何解决这个问题?

谢谢。

5 个答案:

答案 0 :(得分:2)

为什么你有这两个循环呢?他们都经历了相同的mysql结果资源,所以他们互相干扰。

我想你想做这样的事情:

if(mysql_num_rows($runaug) > 0 )
    {

        echo"
        <h3>August 2013</h3>
        <div><br>";
            while($runrows = mysql_fetch_assoc($runaug))
            {

答案 1 :(得分:1)

您无法使用mysql_fetch_assoc($runaug)中的指针来运行嵌套循环。因为一旦子循环完成迭代,父循环也将超过结果的结尾。如果你真的只想运行两个循环,请使用

mysql_data_seek($rs,$offset);

当您进入子循环然后相应地重置指针时,您将必须保持对父循环的偏移的引用。

答案 2 :(得分:1)

将代码更改为在时只使用一个

else 
{
    echo"<div id='dam'>";

    if($foundnumaug)
      echo"<h3>August 2013</h3><div><br>";

      while($runrows = mysql_fetch_assoc($runaug) )
      {
          $Luna = $runrows ['Luna'];
          $Ziua = $runrows ['Ziua'];
          $Mesaj = $runrows ['Mesaj'];
          echo "
          <table class='noutatitabel'>
            <tr>
              <td class='faramargini'>
                <div class='data'>
                  <div class='luna'>$Luna</div>
                  <div class='ziua'>$Ziua</div>
                </div>
              </td>
              <td class='albastru'>$Mesaj
              </td>
            </tr>
          </table><br>";            
      }

      echo"<br><hr><br></div>";
    }

    echo"</div>";
}

问题的原因是第一个获取第一行并将内部数据指针移动到下一行,而第二行则移动 em>获取所有剩余的行。

答案 3 :(得分:0)

首先,您应该使用改进的mysql扩展名mysqli

在那之后,我确定你不想完全相同的循环,所以修改它们,很可能你在那里丢失数据。

答案 4 :(得分:0)

因此,如果我从评论中正确理解,第一个WHILE用于检查是否有任何结果。

然后你需要改变第一个WHILE:

while($runrows = mysql_fetch_assoc($runaug) )

INTO

if ( mysql_num_rows($runaug) > 0 )

否则第一个WHILE将占用您的第一行。所以你永远不会显示第一行。