php - sort MySql rows by table headers

244 Views Asked by At

I have a table that contains data retrieved from this MySql statement:

$sql = "SELECT log_date, log_id, log_time, network_protocal, client_name, client_ip FROM log_table";

I would like to be able to sort by table headers by clicking on them (or the up and down arrows next to them, which is how I have it now).

Here is my HTML:

<?php

$sort = "";

$sql = "SELECT log_date, log_id, log_time, network_protocal, client_name, client_ip
FROM log_table $sort";

if(isset($_GET['sort'])) {
    switch ($_GET['sort'] ) {
        case 0:
            $sort = " ORDER BY log_date ASC";
            break;
        case 1:
            $sort = " ORDER BY log_date DESC";
            break;
        case 2:
            $sort = " ORDER BY log_time ASC";
            break;
        case 3:
            $sort = " ORDER BY log_time DESC";
            break;
        case 4:
            $sort = " ORDER BY network_protocal ASC";
            break;
        case 5:
            $sort = " ORDER BY network_protocal DESC";
            break;
        case 6:
            $sort = " ORDER BY client_name ASC";
            break;
        case 7:
            $sort = " ORDER BY client_name DESC";
            break;
        case 8:
            $sort = " ORDER BY client_ip ASC";
            break;
        case 9:
            $sort = " ORDER BY client_ip DESC";
            break;
    }
}

$sql = "SELECT log_date, log_id, log_time, network_protocal, client_name, client_ip
FROM log_table $sort";
$query = $this->db->prepare($sql);
$query->execute();
$query->fetchAll();
?>

<div class="container">

<table class="table table-striped">
    <tr>
        <td><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=0";?>" >&#9650;</a>Date<a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=1";?>" >&#9660;</a></td>
        <td><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=2";?>" >&#9650;</a>Time<a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=3";?>" >&#9660</a></td>
        <td><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=4";?>" >&#9650;</a>Network Protocol<a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=5";?>" >&#9660</a></td>
        <td><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=6";?>" >&#9650;</a>Client Name<a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=7";?>" >&#9660;</a></td>
        <td><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=8";?>" >&#9650;</a>Client IP<a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=9";?>" >&#9660</a></td>
    </tr>
    <?php foreach ($logs as $log) { ?>
        <tr>
            <td>
                <?php if (isset($log->log_date)) echo (string)$log->log_date; ?>
            </td>
            <td>
                <?php if (isset($log->log_time)) echo (string)$log->log_time; ?>
            </td>
            <td>
                <?php if (isset($log->network_protocal)) echo (string)$log->network_protocal; ?>
            </td>
            <td>
                <?php if (isset($log->client_name)) echo (string)$log->client_name; ?>
            </td>
            <td>
                <?php if (isset($log->client_ip)) echo (string)$log->client_ip; ?>
            </td>
        </tr>
    <?php } ?>
</table>
</div>

When I click the up and down arrows to sort the url displays correctly as, for example, "index.php?sort=3", but nothing happens. Does anyone know what I'm doing wrong?

1

There are 1 best solutions below

0
On

use (`) for your arguments, like this:

SELECT `log_date`,` log_id`, `log_time`, `network_protocal`, `client_name`, `client_ip`
FROM `log_table` ORDER BY `log_time` DESC`