Сортировка html-таблицы с href и php из базы данных sql

У меня есть таблица 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); ?> 

Здесь есть несколько проблем:

  1. Вы не заявляете, какова ваша точная проблема и каков ваш ожидаемый результат.
  2. У вас есть $$price в вашем коде
  3. Я никогда не видел, чтобы строка запроса отображалась как ссылка без сопроводительной страницы (т. <a href="page.php?id=value">Text</a> )
  4. Обычно вы хотите сделать больше проверок достоверности и здравомыслия, если вы принимаете значения от клиента каким-либо образом, особенно если они будут частью запроса к базе данных.
  5. Вы показываете нам две разные переменные для вашего запроса: $sql наверху и $query внизу. Убедитесь, что вы используете правильные переменные
  6. Из того, что я помню, HTML задает двойные кавычки, а не одинарные кавычки, вокруг значений.
  7. Отлаживайте до тех пор, пока вы не дойдете до точки, где вы можете найти, что ваша проблема, или область, где ваши проблемы. var_dump() , print_r() , а echo – ваши друзья.