2013-03-12 126 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>