用sql数据库中的href和php对html表进行排序

时间:2013-05-23 04:11:07

标签: php html sql sorting html-table

我有一个html表,其中包含来自sql表的产品数据,该表是用php吐出的。我想通过单击表格列的标题对数据进行排序。

我正在输出我的表(php)

$product_list = "";
$sql = mysql_query("SELECT * FROM products ORDER BY date_added DESC");

$product_list .= "<tr>
      <td>$id</td>
      <td><strong>$product_name</strong></td>
      <td>$$price</td>
      <td>$category</td>
      <td>$subcategory</td>
      <td>$date_added</td>
    </tr>";

HTML

<table class="product-list">
  <tr>
  <th><a href='?sort=id'>ID</a></th>
  <th><a href='?sort=product_name'>Name</a></th>
  <th><a href='?sort=price'>Price</a></th>
  <th><a href='?sort=category'>Category</a></th>
  <th><a href='?sort=subcategory'>Subcategory</a></th>
  <th><a href='?sort=date_added'>Added</a></th>
  </tr>
  <?php echo stripslashes($product_list); ?>
</table>

我已尝试过几种方法从在线示例中做到这一点,但当我点击标题时没有任何反应。

这是我测试的东西

$sort = array('id', 'product_name', 'price', 'category', 'subcategory', 'date_added');

$order = '';
  if (isset($_GET['sort']) && in_array($_GET['sort'], $sort)) {
  $order .= $_GET['sort'];
  }

$query = 'SELECT * FROM products ORDER BY '.$order;

// Then Output the table as above

页面上发生了很多事情,我只包含了生成并显示表格的代码,所以它可能会阻止这一点,但我想确保我以正确的方式处理事情在深入研究其余代码之前。

如果您对此有任何建议,将不胜感激。

3 个答案:

答案 0 :(得分:4)

至于你的PHP,你可以使用这样的东西:

$product_list = "";    
$order = isset($_GET['sort'])?$_GET['sort']:'date_added';

$query = "SELECT * FROM products ORDER BY $order ";
$sql = mysql_query($query);

while($row = mysql_fetch_array($sql)){

$product_list .= "<tr>
      <td>".$row['id']."</td>
      <td>".$row['product_name']."</td>
      <td>".$row['price']."</td>
      <td>".$row['category']."</td>
      <td>".$row['subcategory']."</td>
      <td>".$row['date_added']."</td>         
        </tr>"; 

}

对于HTML,请确保包含接收参数的页面名称:

<table class="product-list">
  <tr>
  <th><a href='page.php?sort=id'>ID</a></th>
  <th><a href='page.php?sort=product_name'>Name</a></th>
  <th><a href='page.php?sort=price'>Price</a></th>
  <th><a href='page.php?sort=category'>Category</a></th>
  <th><a href='page.php?sort=subcategory'>Subcategory</a></th>
  <th><a href='page.php?sort=date_added'>Added</a></th>
  </tr>
  <?php echo stripslashes($product_list); ?>
</table>

加成:

您可以使用this jquery插件在客户端进行排序。

答案 1 :(得分:2)

对于那些希望通过切换升序或降序来查看每个单独列的最终结果的人。

我不是php大师所以我相信你会找到一些更好的方法来做到这一点,但它对我有用。

感谢所有帮助过上述的人,特别是JustJustMe。

PHP

$ascdesc = "";
$order = isset($_GET['sort'])?$_GET['sort']:'date_added';

$ascdesc = isset($_GET['ascdesc'])?$_GET['ascdesc']:'DESC';
switch(strtoupper($ascdesc))
  {
  case 'DESC': $ascdesc = 'ASC'; break;
  case 'ASC': $ascdesc = 'DESC'; break;
  default: $ascdesc = 'DESC'; break;
  }

$sql = mysql_query("SELECT * FROM products ORDER BY $order $ascdesc");

$productCount = mysql_num_rows($sql); // count the output amount
if ($productCount > 0){
while($row = mysql_fetch_array($sql)){
    $id = $row["id"];
    $product_name = $row["product_name"];
    $price = $row["price"];
    $category = $row["category"];
    $subcategory = $row["subcategory"];
    $date_added = strftime("%b %d, %y",strtotime($row["date_added"]));    

$product_list .= "<tr><td>$id</td>
                    <td><strong>$product_name</strong></td>
                    <td>$$price</td>
                    <td>$category</td>
                    <td>$subcategory</td>
                    <td>$date_added</td>
                   </tr>";
} else {
  $product_list = "You have no products listed in your store";
}

HTML

<table class="product-list">
   <tr>
   <th><a href='inventory_list.php?sort=id&ascdesc=<?php echo $ascdesc?>'>ID</a></th>
   <th><a href='inventory_list.php?sort=product_name&ascdesc=<?php echo $ascdesc?>'>Name</a></th>
   <th><a href='inventory_list.php?sort=price&ascdesc=<?php echo $ascdesc?>'>Price</a></th>
   <th><a href='inventory_list.php?sort=category&ascdesc=<?php echo $ascdesc?>'>Category</a></th>
   <th><a href='inventory_list.php?sort=subcategory&ascdesc=<?php echo $ascdesc?>'>Subcategory</a></th>
   <th><a href='inventory_list.php?sort=date_added&ascdesc=<?php echo $ascdesc?>'>Added</a></th>
   </tr>
<?php echo stripslashes($product_list); ?>

答案 2 :(得分:0)

这里有多个问题:

  1. 您没有说明您的确切问题是什么以及您的预期结果是什么。
  2. 您的代码中有$$price
  3. 我从未见过查询字符串显示为没有随附页面的链接(即<a href="page.php?id=value">Text</a>
  4. 如果您以任何方式接受来自客户端的值,通常希望进行更多有效性和完整性检查,尤其是如果它们将成为数据库查询的一部分。
  5. 您向我们展示了两个不同的查询变量,顶部为$sql,底部为$query。确保使用正确的变量
  6. 根据我的记忆,HTML要求双引号,而不是单引号,围绕值。
  7. 调试,直到找到问题所在的位置或问题所在的区域。 var_dump()print_r()echo是您的朋友。