Как переключаться между увеличивающимися и уменьшающимися строками при отображении HTML из mySQL - PullRequest
1 голос
/ 16 августа 2010

Мне просто любезно помогли получить строки в таблице для отображения, используя ORDER BY.Тогда я понял, что я также хочу нажать ту же ссылку, чтобы уменьшить, если это необходимо.Я попытался установить условное выражение, но оно не работает так, как я ожидал:

<?php
$orderBy = array('type', 'description', 'recorded_date', 'added_date');

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


$sql="SELECT * FROM $tbl_name ORDER BY " .$order;

?>
<table>
    <tr>
        <th>
        <?php 
            if($order == 'type'){ 
        ?>
                <a href="?orderBy=type_dec">Type:</a>
        <?php 
            } else{
        ?>
                <a href="?orderBy=type">Type:</a>
        <?php 
            }
        ?>
            <a href="?orderBy=type">Type:</a>
        </th>
        <th>
            Description:
        </th>
        <th>
            <a href="?orderBy=recorded_date">Recorded Date:</a>
        </th>
        <th>
            <a href="?orderBy=added_date">Added Date:</a>
        </th>
    </tr>

Я знаю, что у меня нет полного кода, но я был удивлен, увидев, что, несмотря на это, "тип "ссылка отображается дважды в приведенном выше примере.Я думал, что один или другой будет отображаться в зависимости от значения $ order.

Кроме того, у меня есть ощущение, что способ, которым я пытаюсь достичь этого с уменьшением, может быть сделан гораздо лучшим способом.,Пожалуйста, не стесняйтесь поделиться этим способом!

Ответы [ 2 ]

3 голосов
/ 16 августа 2010

Это должно работать:

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

if(isset($_GET['desc'])) {
    $order .= ' DESC';
} else {
    $order .= ' ASC';
}


$sql="SELECT * FROM $tbl_name ORDER BY " .$order;

?>
<table>
    <tr>
        <th>
        <?php 
            if($order == 'type' && empty($_GET['desc'])){ 
        ?>
                <a href="?orderBy=type&desc=1">Type:</a>
        <?php 
            } else{
        ?>
                <a href="?orderBy=type">Type:</a>
        <?php 
            }
        ?>
        </th>
        <th>
            Description:
        </th>
        <th>
            <a href="?orderBy=recorded_date">Recorded Date:</a>
        </th>
        <th>
            <a href="?orderBy=added_date">Added Date:</a>
        </th>
    </tr>
</table>
2 голосов
/ 16 августа 2010

Самый простой способ справиться с этим - использовать сеансы:

$orderBy = $_SESSION['orderBy'];
$orderBy = (isset($_GET['orderBy'])) ? $_GET['orderBy'] : $orderBy;

$order = $_SESSION['order'];
$order = (isset($_GET['order'])) ? $_GET['order'] : $order;

// construct the query as follows:
// make sure $orderBy and $order are valid 
$sql = "SELECT fields FROM table ORDER BY {$orderBy} {$order}";

// the code to display could look something like this:
$displayOrder = ($order == 'ASC') ? 'DESC' : 'ASC';

echo '<a href="?orderBy=type&order=' . $displayOrder;

Будьте осторожны при разбивке на страницы, хотя это сложнее, чем кажется.

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