2012-07-04 42 views
1

任何人都可以帮忙 - 这让我很生气。

我打电话给一个mysql表,并希望多次显示结果(或用if语句检查结果)。但是在这个循环中(见下文),它只在第一个实例($ i = 1)中将该表及其行作为一个数组调用。这段代码将构建20个称为Box的div,但仅填充表格数据的第一个div。为什么?

我认为我应该在外循环内使用一个foreach循环(我已经得到了这个在wordpress中与那个顺便说一句),但无法弄清楚语法。任何帮助将非常感激。

$i=1; 
while ($i <= 20) 
{ 
    echo "<div class=\"Box ".$i."\">"; 
    echo $i; 
    echo "<br>"; 
    while ($row = mysql_fetch_array($result)) 
    { 
    echo $row['name']; 
    } 
    echo "</div>"; 
    $i++; 

} 

回答

1

如果我明白,您正试图在循环中多次使用相同的结果资源。

第一次循环播放结果资源之后,需要将其倒回到其原始位置以便能够再次循环播放。它可以与mysql_data_seek($result, 0)倒带,但更好的策略是将整个事情加载到一个数组的循环之前,然后遍历每个循环数组:

// Load everything into the array `$results` first. 
$results = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    $results[] = $row['name']; 
} 

// Better an incremental for loop than a while with a counter 
// for a situation where you know the endpoint values of $i 
for ($i = 1; $i <= 20; $i++) 
{ 
    echo "<div class='Box $i'>"; 
    echo $i; 
    echo "<br>"; 
    // Inside your HTML, use the $results array 
    // rather than the MySQL resource 
    foreach ($results as $row) 
    { 
     echo $row['name']; 
    } 
    echo "</div>"; 
} 
+0

是的,这正是我想要做的,谢谢。我尝试了你的代码,但我得到了一个解析错误 - 意外的'{'第二行之后。什么是'mysql_fetch_assoc'顺便说一句,我是不是使用'mysql_fetch_array'? – gavin

+0

@ user1501500抱歉,错过了上面修复的关闭')'。 –

+0

@ user1501500'mysql_fetch_array()'返回数字列号和列名作为键,而'mysql_fetch_assoc()'只返回列名作为键。由于您只使用列名'name',因此不需要数字索引,因此'mysql_fetch_assoc()'效率更高一点。 –

0

尝试这样做,

$i=1; 
while ($row = mysql_fetch_array($result)) 
{ 
    echo "<div class=\"Box ".$i."\">"; 
    echo $i; 
    echo "<br>"; 
    echo $row['name']; 
    echo "</div>"; 
    $i++; 

} 
+0

嗨。不幸的是,这也不起作用。我以前有过这个结果 - 它为我的表中的每一行创建了一个“Box”div,每个Box中都有行数据。我需要创建20个(例如)div,并填充每个表中的所有表数据(或者至少用if来检查所有的表数据) – gavin

+0

我想我需要两个循环 - 一个迭代数组和另一个循环来重复该迭代×次数。谢谢 – gavin

+0

我看到迈克尔已经提交了一些可以帮助你更好的东西,试试吧。 – itsme

0

一旦mysql_fetch_array($结果)给出,$结果不能再次获取使用。所以它不会在循环中工作。最好将结果存储在数组中并在需要时使用它。

+0

谢谢,好主意 – gavin

1

也许我不理解好,但你应该尝试这个:

$i=1; 
while ($row = mysql_fetch_array($result) && $i <= 20) { 
    echo "<div class=\"Box ".$i."\">"; 
    echo $i; 
    echo "<br>"; 
    echo $row['name']; 
    echo "</div>"; 
    $i++; 
} 

因为在你的代码中,你在第一个循环中做你的“mysql循环”。

+0

这是最有效的方法+1 – EaterOfCode

0

您可以使用mysql_data_seek重置为结果的指针,如果你想通过他们都同时又把,做到:

mysql_data_seek ($result, 0);