我有一个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
页面上发生了很多事情,我只包含了生成并显示表格的代码,所以它可能会阻止这一点,但我想确保我以正确的方式处理事情在深入研究其余代码之前。
如果您对此有任何建议,将不胜感激。
答案 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)
这里有多个问题:
$$price
<a href="page.php?id=value">Text</a>
)$sql
,底部为$query
。确保使用正确的变量var_dump()
,print_r()
和echo
是您的朋友。