2012-10-26 35 views
0

嗯,我一直在这个约6小时左右,我只是无法让它的工作正确。我敢肯定,这只是我正在做的一些愚蠢的事情,也许你们的新人的眼睛可以指出。如果int和int之间,显示行

$i = 0; 
$sql = mysql_query("SELECT type, info, url FROM alerts WHERE username = '$user_logged_in' ORDER BY id ASC LIMIT 40"); 
$div_grid = '<div style="float:left;">'; 


while ($row = mysql_fetch_array($sql)) 
{ 
    if ($i < 11){ 
    $display = '<a href="' . $row['info'] . '"><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px;"></div></a>'; 


    $div_grid .='<div style="float:left;">' . $display . '</div>'; 
    $i++; 
    } 
    if ($i > 11){ 
     $display = '<a href="' . $row['info'] . '"><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px; margin-top:14px;"></div></a>'; 


    $div_grid .='<div style="float:left;">' . $display . '</div>'; 
    $i++; 
    } 

} 
$div_grid .= '</div>'; 

echo $div_grid; 

出于某种原因,我得到这些div输出的整个第一行,但第二行不出来。除非我设置$ i> = 11 {然后给我两个id 11s。很显然,我错过了一些至关重要的东西。有任何想法吗?

另外,最后,我想使if语句大于等于10 & & < = 20;目前似乎还没有工作,但我猜测其他地方首先存在问题。

+0

你有低于11和超过11但从来没有实现11的报表。因此,它会打11和$我将保持不变,并且什么也不会发生 –

+0

[**请不要使用'mysql_ *'功能在新代码中**](http://bit.ly/phpmsql)。他们不再被维护,[弃用过程](http://j.mp/Rj2iVR)已经开始。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 –

回答

0

您递增$i++两次。也有必要使用>=,因为否则会丢失第11行,并且循环将在没有输出的情况下运行($1==11,因此不会小于或大于11)直到记录集结束。

while ($row = mysql_fetch_array($sql)) { 
    if ($i < 11){ 
     // first row 
    } else { 
     // second row 
    } 
    $i++; //increment 
} 
+1

他这样做是相互排斥的。 –

+1

这里不需要elseif –

+0

不需要,但在我看来它更简洁。在这里增加if语句也是很危险的......一旦你打到11,它就会循环,直到记录集结束才会有额外的输出。 – doublesharp

2

您在if语句中递增$i。当$i为10时,它增加到11.但是你的第二个if大于11,这意味着$i必须是12,而无处增加$i

两个建议:

  1. 增量$iif
  2. if {} else {}声明
0

有点重构可以帮助你看到你的代码更清晰一些。

$i = 0; 
$sql = mysql_query("SELECT type, info, url FROM alerts WHERE username = '$user_logged_in' ORDER BY id ASC LIMIT 40"); 
$div_grid = '<div style="float:left;">'; 

while ($row = mysql_fetch_array($sql)) 
{ 
    $displayStyle = 'float:left; margin-left:-22px;'; 

    if ($i > 11) $displayStyle .= ' margin-top:14px;'; 

    $display = '<a href="' . $row['info'] . '"><div class="' . $row['type'] . "_alert" . '" style="' . $displayStyle . '"></div></a>'; 
    $div_grid .='<div style="float:left;">' . $display . '</div>'; 
    $i++; 

} 

$div_grid .= '</div>'; 

echo $div_grid; 

if/elseif块中的大部分代码都是重复的。提取出相似之处,只在if语句中有所不同,最终简化了相当多的东西。

相关问题