【问题标题】:PHP If statement, suitable?PHP if 语句,合适吗?
【发布时间】:2013-02-28 03:13:51
【问题描述】:

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

【问题讨论】:

  • 我删除了指向您页面的链接,因为您的代码存在一些 SQL 注入缺陷。永远不要显示您的代码及其运行的站点。即使您以后想更改它。
  • 只是一个提示。不要建立我以后会安全地做这件事的心态。这最终可能代价高昂。
  • 您可以使用mysql_real_escape_string 轻松获得解决方法,虽然它已被弃用,但您可以快速解决您的注入缺陷。
  • 这是非常好的建议,非常感谢! :)
  • 这是一个非常糟糕的建议,丽莎,因为这并不能解决他的任何问题。除非他也将 qoutes 放入CategoryID='$CategoryID'。 mysql_real_escape_string on numbers 是获取安全漏洞和虚假安全感的最佳方式。

标签: php html if-statement html-table


【解决方案1】:

好吧,您可以使用计数器跟踪您的 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++;
}

【讨论】:

    【解决方案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 是一行

    【讨论】:

    • 哦,天哪……我怎么错过了这个,谢谢你指出这一点!
    • 如果您在同一行需要 4 个,则需要有一个计数器,每 4 次迭代都会关闭和打开 tr,如 prodigistation 所说,如果您需要帮助,请告诉我
    【解决方案3】:

    您可以使用表格和迭代计数器以旧方式进行操作。您还可以使用更多基于 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>
    

    【讨论】:

      【解决方案4】:

      您需要跟踪您所处的位置。如果你想要每行 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>';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多