2013-03-12 123 views
2

我正在做一個小型的大學任務,爲一個網站使用PHP構建一個簡單的電子商務引擎。PHP如果聲明,適合?

我目前有以下腳本設置來顯示一個類別內的產品,所有這些都是從MySQL數據庫中檢索的。

http://example.com/category.php?id=2 

我目前遇到的問題是,對於每個產品顯示的腳本只是簡單地將每個並排回顯到一個新的表項中。這導致他們瀏覽頁面而不是垂直頁面。

改變這段代碼的最佳方式是什麼?例如每行最多有三個產品?一個If循環或沿着這些線?希望得到支持!

<?php 

//Create Session 
    session_start(); 

//Connect to database 
    include "conn.php"; 

//Retrieve Header 
    include "header.php"; 

//Get Category ID 
if (isset($_GET['id'])){ 
    $CategoryID = $_GET['id']; 

//QUERY collects product name, and product ID. 
    $q="SELECT ProductID, ProductName, Price,img FROM Products WHERE CategoryID=$CategoryID"; 

//QUERY collects Product Category descriptions 
    $d="SELECT `Desc` FROM ProductCategories WHERE CategoryID=$CategoryID"; 

//retrive and execute SQL query results and save into a variable 
    $result = mysqli_query($_SESSION['conn'],$q); 
    $result2 = mysqli_query($_SESSION['conn'],$d) or die(mysql_error()); 

//Retrieve Product Category Description 
    echo "<div>"; 
    while ($myResult = mysqli_fetch_row($result2)){ //Create an array 
     echo "<p>".$myResult[0]."</p>"; 
    } 
    echo "</div>"; 

//Retrieve Products in category 
    echo "<div align='center'><table border='1px' bordercolor='#000000' width='200px'><tr>"; //Define table, row and div containing each product 

    while ($row = mysqli_fetch_row($result)){ //Create an array 

     echo "<td>"; //Create table cell 
     echo "<p><img src=".$row[3]."></p>"; //product image small (250x250 Pixels) 
     echo "<p align='center'><a href='product.php?id=".$row[0]."'>".$row[1]." </a></p>"; //Product ID Link and Name 
     echo "<p align='center'>&#163; ".$row[2]."</p>"; 
     echo "</td>"; //Close table cell 
    } 
    echo "</tr></table></div>";//Close table, div and row 
    mysqli_free_result($result); 
} 

// Retireve Footer 
include "footer.php"; 
?> 

對於任何類型的編程,我都是新手,所以要感謝耐心/您可以給我的任何支持。此外,我知道SQL注入問題,並會在稍後解決此問題。

+3

我刪除了鏈接到您的網頁,因爲您的代碼H作爲一些SQL注入缺陷。永遠不要顯示你的代碼和它運行的網站。即使你想稍後改變它。 – 2013-03-12 14:36:17

+2

只是一個提示。不要建立我以後會以安全的態度去做的心態。這可能會導致代價高昂。 – SchautDollar 2013-03-12 14:36:29

+0

您可以使用'mysql_real_escape_string'輕鬆獲得解決方法,儘管它具有說服力,您可以快速解決注入缺陷。 – 2013-03-12 14:39:58

回答

5

那麼你會保持你的一邊用反反覆然後每次你打$counter%3 === 0軌道(更換3,不管你每行想要的),你會關閉tr,並開始一個新問題:

$counter = 0; 
$perRow = 3; 
while ($row = mysqli_fetch_row($result)){ //Create an array 
    if($counter === 0) { 
     echo '<tr>'; 
    } else if ($counter%$perRow === 0) { 
     echo '</tr><tr>'; 
    } 
    echo "<td>"; //Create table cell 
    echo "<p><img src=".$row[3]."></p>"; //product image small (250x250 Pixels) 
    echo "<p align='center'><a href='product.php?id=".$row[0]."'>".$row[1]." </a></p>"; //Product ID Link and Name 
    echo "<p align='center'>&#163; ".$row[2]."</p>"; 
    echo "</td>"; 
    $counter++; 
} 
+0

Ahhh當然這是有道理的。謝謝! – 2013-03-12 14:45:12

2

在這裏你去

while ($row = mysqli_fetch_row($result)){ //Create an array 

    echo "<tr><td>"; //Create table cell 
    echo "<p><img src=".$row[3]."></p>"; //product image small (250x250 Pixels) 
    echo "<p align='center'><a href='product.php?id=".$row[0]."'>".$row[1]." </a></p>"; //Product ID Link and Name 
    echo "<p align='center'>&#163; ".$row[2]."</p>"; 
    echo "</td></tr>"; //Close table cell 
} 
echo "</table></div>";//Close table, div and row 

的TR需要是同時裏面,因爲TR是行

+0

Doh,哦,親愛的...我怎麼錯過這個,謝謝你指出這個! – 2013-03-12 14:45:39

+0

如果你需要4在同一行上,你需要有一個關閉並打開tr的計數器,每個4次迭代都像prodigistation說的那樣告訴我,如果你需要它的幫助 – 2013-03-12 14:48:47

1

你需要的是跟蹤的T他認爲你在。如果你想每行3列,它會是這樣的:

$count = 1; 

echo '<table>'; 

while ($row = mysqli_fetch_row($result)) { 
    $tmp = $count % 3; //get the remainder 

    if ($tmp==1) { 
    if ($count!=1) { 
     //not the first row so close the last one 
     echo "</tr>"; 
    } 

    //start row 
    echo "<tr>"; 
    } 

    //show your <td> info 

    $count++; 
} 
echo '</tr></table>'; 
2

你可以用表和迭代計數器做舊的方式。你也可以使用更多基於CSS的方法。

循環結果集,並建立內部HTML部分(行,列)

$rows = ''; 
while ($myResult = mysqli_fetch_row($result2)){ //Create an array 
    $rows .= '<div class="inner">'.$myResult[0].'</div>'; 
} 

決定內列x的寬度,讓他們漂浮左或右,使外層div寬度* X

<style type="text/css"> 
div.box { 
    width:900px; 
} 

div.inner { 
    float:left; 
    width:300px; 
} 
</style> 

最後呼應你的HTML

<div class="box"><?php echo $rows; ?></div>