使用php显示mysql结果而不使用表循环

时间:2012-01-03 00:44:02

标签: php mysql list loops

我使用以下代码列出4横向<UL><li>的mysql结果:

    echo"<div>";
    $c = 1; // change to $c = 0 
    $media = mysql_query("SELECT * FROM " . "$prefix" . "screen where id=\"$id\" order by id desc limit 16");
    while ($cms = mysql_fetch_assoc($media)) {

      if (!($c%4)) echo ($c!=0 ? "</ul>" : "")."<ul>";

        echo "<li><a href=\"#\"><img src=\"#\"></a></li>\n";

        $c++;
            }

        echo "</ul></div>\n";

      for ($cnt=$c;$cnt%4>0;$cnt++);

以上代码的HTML输出是:

<UL>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
</UL>
<UL>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
</UL>
<UL>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
</UL>
<UL>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
    <li><a href=\"#\"><img src=\"#\"></a></li>
</UL>
<UL>
    <li><a href=\"#\"><img src=\"#\"></a></li>
</UL>

这是不正确的。每个<ul>应包含4个<li>

更新: 我更改了$ c = 0并删除了顶部<ul>现在已经工作了!

2 个答案:

答案 0 :(得分:0)

在开头设置$c = 0。循环往往是从零开始的 - 你使用模数需要这个。

您的代码也很难阅读。也许考虑运算符和缩进块之间的空格?

答案 1 :(得分:0)

问题是你的$ c = 1在顶部。由于这首先是1,所以它只打印3个(1 + 1 + 1 + 1 = 4,4%4 = 0)然后计数为零,现在将打印4。 这个小修复应该可以解决问题。

$c = 0;
$media = mysql_query("SELECT * FROM " . "$config_ccms_prefix" . "screen where id=\"$id\" order by id desc limit 16"); 

while ($cms = mysql_fetch_assoc($media)) { 
    if (!($c % 4))
        echo "<ul>"; 

    echo "<li><a href=\"#\"><img src=\"#\"></a></li>\n"; 

    if(!($c++ % 4))
        echo "</ul>";
} 
echo "</div>\n"; 
for ($cnt = $c; $cnt % 4 > 0; $cnt++);

(注意$ c在开始时设置为0,echo和$ c ++移动到循环体的末尾)