Создать ссылку для сортировки столбцов PHP - PullRequest
0 голосов
/ 23 января 2011

Мне нужно создать ссылки, которые позволят кому-то сортировать данные на основе заголовка столбца. Мне удалось получить рабочую модель, которая сортирует данные по идентификатору ASC или DESC. Как я могу создать эту же функцию не только для столбца идентификаторов?

<?php
    $order = (isset($_GET['sort']) && strcasecmp($_GET['sort'], 'desc') == 0) ? 'DESC' : 'ASC'; 
    $query = 'SELECT DISTINCT `case`, firstname, lastname FROM `cases` ORDER BY id ' . $order;   
          $result = mysql_query($query); 
    ?>

    <td><a href=<?php echo "'?sort=" . ($order == 'DESC' ? 'ASC' : 'DESC') . "'";?>>Case ID</a></td>
    <td>Name</td>

    <?php  
    // list records  
         while ($nt = mysql_fetch_assoc($result)) {    
    ?>

    <td><?php echo $nt['case']; ?></td>
    <td><?php echo $nt['firstname']; ?> <?php echo $nt['lastname']; ?> 

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Я бы определил массив для определения разрешенных сортировок, чтобы вы не отправляли имена таблиц по ссылкам и пользователю (злонамеренный пользователь не знает, что делают сортировки = 1, 2, 3 и т. Д.) И когда Вы печатаете свои ссылки. Я отключил ссылку на сортировку curent (Вы можете использовать css, чтобы она отличалась от остальных, чтобы пользователь знал, где она находится).
Вот пример кода:

<?php
$sorts = array
(
    1=>array('order'=>' ORDER BY id', 'name'='case id'),
    2=>array('order'=>' ORDER BY id DESC', 'name'='case id desc'),
    3=>array('order'=>' ORDER BY firstname', 'name'='case firstname'),
    4=>array('order'=>' ORDER BY firstname DESC', 'name'='case firstname desc')
    // and so on
);

if(!is_numeric($_GET['sort']))
{
    echo 'Invalid sort type !';exit; // use your custom error reporting function.
}
    foreach($sorts as $key => $value)
    {
        $order = ($key == $_GET['sort'])?$value['order']:'';
        echo '<td><a href = "example.com?sort='.$_GET['sort'].'" '.(($key == $_GET['sort'])? disabled="disabled":'').'>'.$value['name'].'</a></td>';
    }


$query = 'SELECT DISTINCT case, firstname, lastname FROM cases '.$order;
// ...
0 голосов
/ 23 января 2011

Вы должны передать имя столбца или псевдоним (id, ...) в URL так же, как направление сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...