2012-12-07 48 views
0

我有一个命名为容器和容器内的div我有两个格列1和column2.Inside列1列2和我必须从数据库中提取记录,并必须证明它here.My代码看起来象循环错过处理?

<div id="container" style="height:600px; width:600px; border:1px solid #990000"> 
<?php $str=mysql_query("SELECT * FROM users") or die(mysql_error()); 
    while($rec=mysql_fetch_array($str){ 
?> 
<div id="column1" style="height:200px; width:295px; border:1px solid #0000FF;float:left;"> 

    /*Here this record should be of id=1 */ 
<img src="<?php echo $rec['pic'];?>" alt="No image" /> 
<?php echo $rec['detail']; 
</div> 
<div id="column2" style="height:200px; width:295px; border:1px solid #0000FF;float:left;"> 

/*Here this record should be of id=2 */ 
<img src="<?php echo $rec['pic'];?>" alt="No image" /> 
<?php echo $rec['detail']; 
</div> 
<?php } ?> 

我想在第1列记录的用户id = 1和第2列id = 2,再次在第1列id = 3和列2 id = 4等等。任何帮助我在这个循环?

+0

这个问题与'css'有什么关系? –

+0

**请勿**将这些ID用于列。每个ID只能在文档中存在一次。当需要使用它的多个实例时,请选择类。 – inhan

回答

1

顺便说一句,您正在使用不推荐的扩展名。我强烈建议你使用新的MySQLiPDO扩展名与PHP中的MySQL数据库接口,以便进行新的开发,因为这样可以让你的工作变得更加简单。

你想要做什么的答案只是遍历结果集的两倍,这可以通过PDO扩展来实现,如下所示。

<div id="container"> 
<?php 
$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'mysqlusername', 'mysqlpassword'); 
$stmt = $pdo->query('SELECT * FROM users'); 
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 

/* And now do your loop in pairs of two */ 

foreach (array_chunk($result, 2) as $pair) { 
    ?> 
    <div id="1"> 
     <?php echo $pair[0]['detail']; ?> 
    </div> 
    <div id="2"> 
     <?php echo $pair[1]['detail']; ?> 
    </div> 
    <?php 
} 
?> 
</div> 

另一种选择是使用一个计数器,并在每次迭代翻转然后按照通过的条件,以确定哪些DIV要输出本次迭代循环。

<div id="container"> 
<?php 
$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'mysqlusername', 'mysqlpassword'); 
$stmt = $pdo->query('SELECT * FROM users'); 
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 

/* And now do your loop in pairs of two */ 

$div = 0; 
foreach ($result as $row) { 
    $div ^= 1; // bitwise XOR 
    if ($div) { // If it's odd show the first div 
     ?> 
     <div id="1"> 
      <?php echo $row['detail']; ?> 
     </div> 
     <?php 
    } else { // If it's even show the second div 
     ?> 
     <div id="2"> 
      <?php echo $row['detail']; ?> 
     </div> 
     <?php 
    } 
} 
?> 
</div> 
+0

额外的+1(如果我可以添加)按位XOR部分。唯一的问题是,我会更新ID的,因为具有相同ID的多个元素不应该存在于DOMDocument中。 – inhan

+0

嗯,我也可以添加一个模数选项,但我不想压倒OP :) – Sherif

+0

我认为按位仍然是最聪明的方法。我只是自己写了一个模数,但我没有发表,因为我发现你们已经回答了这个问题。 – inhan

0

这就是循环的全部内容。应该看起来像这样:

<div id="container" style="height:600px; width:600px; border:1px solid #990000"> 
<?php 
$count = 0; 
$result = mysql_query("SELECT * FROM users") or die(mysql_error()); 
if (mysql_num_rows($result) > 0) { 
    while ($row = mysql_fetch_array($result)) { 
     $count++; 
?> 
    <div id="column<?php if($count&1) { echo "1"; } else { echo "2"; } ?>" style="height:200px; width:295px; border:1px solid #0000FF;float:left;"> 
     <img src="<?php echo $row['pic']; ?>" alt="No image" /> 
     <?php echo $row['detail']; ?> 
    </div> 
<?php 
    } 
} 
?> 
</div> 
+0

请解释这个<?php if($ count&1).. part? – user1885057

+0

它检查计数是偶数还是奇数。 :) –