У меня есть таблица 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
На странице много чего происходит, я только включил код, который генерирует и отображает таблицу, поэтому это может быть что-то еще, останавливающее это, но я хотел бы убедиться, что я собираюсь сделать все правильно, прежде чем вникать в остальная часть кода.
Любые предложения о том, как вы это сделаете, будут очень признательны.
Что касается вашего 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>
Бонус:
Вы можете выполнить сортировку на стороне клиента, используя этот плагин jquery.
Для тех, кто хотел бы видеть мой конечный результат с каждой отдельной сортировкой столбцов, переключая по возрастанию или по убыванию.
Я не php-гуру, поэтому я уверен, что вы найдете несколько лучших способов сделать это, но это сработало для меня.
Спасибо всем, кто помогал выше, особенно isJustMe.
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); ?>
Здесь есть несколько проблем:
$$price
в вашем коде <a href="page.php?id=value">Text</a>
) $sql
наверху и $query
внизу. Убедитесь, что вы используете правильные переменные var_dump()
, print_r()
, а echo
– ваши друзья.