2

我正在做一个小型大学任务,使用 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 注入问题,并将在以后解决此问题。

4

4 回答 4

5

好吧,您将使用计数器跟踪您的 while 迭代,然后每次点击$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++;
}
于 2013-03-12T14:37:55.663 回答
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 需要在 while 内,因为 tr 是一行

于 2013-03-12T14:36:07.863 回答
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>
于 2013-03-12T14:45:12.817 回答
1

您需要的是跟踪您所处的位置。如果你想要每行 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>';
于 2013-03-12T14:42:55.317 回答