Как сортировать строки таблицы HTML, которые вызываются из MySQL

Я знаю, что это такая простая вещь, но поиск в Google не показал мне, как -сортировать строки после щелчка по ссылкам th .

Я получил это:

<table border="1">
  <tr>
    <th>Type:</th>
    <th>Description:</th>
    <th>Recorded Date:</th>
    <th>Added Date:</th>
  </tr>

<?php 
while($row = mysql_fetch_array($result)){
    ?>
    <tr>
        <td><?php echo $row['type'] ?></td>
        <td><?php echo $row['description'] ?></td>
        <td><?php echo $row['recorded_date'] ?></td>
        <td><?php echo $row['added_date'] ?></td>
    </tr>
    <br /> 


  <?php 
}
mysql_close();
?>
</table>

Мне нужно иметь возможность щелкнуть по типу и отсортировать по алфавиту, и щелкните либо Дата записи , либо Добавленная дата и выполните сортировку по дате. Я вижу, что мне нужно, чтобы запросы MySQL делали это, но могу ли я установить их как условия с тегами a href ?

16
задан ekad 24 January 2017 в 12:25
поделиться

2 ответа

Самый простой способ сделать это - разместить ссылку в заголовках столбцов, указывающую на ту же страницу. В строке запроса поместите переменную, чтобы вы знали, на что они нажали, а затем используйте ORDER BY в своем запросе SQL для выполнения упорядочения.

HTML-код будет выглядеть так:

<th><a href="mypage.php?sort=type">Type:</a></th>
<th><a href="mypage.php?sort=desc">Description:</a></th>
<th><a href="mypage.php?sort=recorded">Recorded Date:</a></th>
<th><a href="mypage.php?sort=added">Added Date:</a></th>

А в php-коде сделайте что-нибудь вроде этого:

<?php

$sql = "SELECT * FROM MyTable";

if ($_GET['sort'] == 'type')
{
    $sql .= " ORDER BY type";
}
elseif ($_GET['sort'] == 'desc')
{
    $sql .= " ORDER BY Description";
}
elseif ($_GET['sort'] == 'recorded')
{
    $sql .= " ORDER BY DateRecorded";
}
elseif($_GET['sort'] == 'added')
{
    $sql .= " ORDER BY DateAdded";
}

$>

Обратите внимание, что вы не должны брать значение $ _GET напрямую и добавлять его в свой запрос. Как кто-то мог попасть в MyPage.php? Sort =; УДАЛИТЬ ИЗ MyTable;

43
ответ дан 30 November 2019 в 15:04
поделиться

На самом деле это довольно просто, вот возможный подход:

<table>
    <tr>
        <th>
            <a href="?orderBy=type">Type:</a>
        </th>
        <th>
            <a href="?orderBy=description">Description:</a>
        </th>
        <th>
            <a href="?orderBy=recorded_date">Recorded Date:</a>
        </th>
        <th>
            <a href="?orderBy=added_date">Added Date:</a>
        </th>
    </tr>
</table>
<?php
$orderBy = array('type', 'description', 'recorded_date', 'added_date');

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

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

// retrieve and show the data :)
?>

Это поможет! :)

40
ответ дан 30 November 2019 в 15:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: