2015-05-22 56 views
2

我是一個真正的初學者,當涉及到查詢和PDO時,我需要一些我正忙於的項目的幫助。我想要完成的是從數據庫中顯示產品。然而,我使用的模板風格迫使我每行顯示3個產品,是否有一種方法可以顯示每行3個產品,並在代碼超過3個時循環代碼(如果有5個產品,前3個會顯示在第一行,其餘的在第二行)。PDO MySQL產品循環

這裏是我使用的模板,請注意div類「top-box」,這會強制每行只能顯示3種產品。

<div class="top-box"> 
     <?php 
     $sql = "SELECT * FROM _products WHERE category = '$cat'"; 
$result = dbConnect()->query($sql); 
// If the SQL query is succesfully performed ($result not false) 
if($result !== false) { 
$cols = $result->columnCount();   // Number of returned columns 
// Generate ADS Feed for each ROW 
foreach($result as $row) { 
       echo '<div class="col_1_of_3 span_1_of_3"> 
      <a href="product.php?i=' . $row['model'] . '"> 
       <div class="inner_content clearfix"> 
       <div class="product_image"> 
        <img src="images/' . $row['model'] . '.jpg" alt=""/> 
       </div> 
       <div class="price"> 
        <div class="cart-left"> 
         <p class="title">' . $row['name'] . '</p> 
        </div> 
        <div class="clear"></div> 
       </div>    
       </div> 
       </a> 
      </div>'; 
      } 
     } else { 
      echo "<p>No products available at this moment, contact us for more information!</p>"; 
     } 

     ?> 

      <div class="clear"></div> 
     </div> 
+3

使用PDO這樣並不比使用'mysql_query'更好。這同樣很危險 –

回答

2

您可以在您的產品foreach循環中使用count變量。每三種產品都可以關閉頂盒並打開一個新的(這是一個假設,因爲我不清楚你的樣式是如何工作的)。

在的foreach循環結束:

if ($count != 0 && $count % 3 == 0) { 
    echo '<div class="clear"></div>'; 
    echo '</div>';     // close last .top-box 
    echo '<div class="top-box">'; 
} 

++$count; 

我不明白你的問題是如何連接到PDO。請記住,在查詢中使用未轉義的變量有潛在危險。看看這裏一些幫助:https://stackoverflow.com/a/60496/2516377

+0

你的代碼將不會關閉打開的div,直到$ count是3的倍數 –

+0

@KumariManisha這段代碼將放在foreach循環的末尾。在Codecommon的代碼中,div在foreach循環完成後關閉。如果它不包含任何項目,有些想法必須放入不打開.top-box。 –

1

添加一個計數器並使用%算術運算符來計算列號。

$counter=0; 
foreach (...) { 
    $column_number=$counter % 3; 
    $counter++; 
} 
2

可以解決這個問題是這樣的:

<?php 
    if ($counter % 3 == 0 && $counter!=$total_row_fetched) { 
     echo '<div class="clear"></div>'; 
     echo '</div>';      
     echo '<div class="top-box">'; 
    } 

    if($counter==$total_row_fetched){ 
     echo '<div class="clear"></div>'; 
     echo '</div>';     // it will close the last open div 
    } 

    ++$counter; 
    ?>