1

私は誰かのために在庫システムをやっています。テーブル ヘッダーのリンクをクリックして、PN と ASC で並べ替えられるようにしたいと考えています。次に、PN をもう一度クリックすると、DESC で表示されます。しかし、説明で注文して同じこともしたいです。これまでの私のコードは次のとおりです。方向(ASC、DESC)を簡単に入れ替える方法がわかりません。

            if (!isset($cd))
        {
            $cd = 0;
        }
        if (isset($_SESSION['direction']) && $cd == 1)
        {
            if ($_SESSION['direction'] == 'DESC')
            {
                $_SESSION['direction'] = 'ASC';
                $cd = 0;
            } elseif ($_SESSION['direction'] == 'ASC') 
            {
                $_SESSION['direction'] = 'DESC';
                $cd = 0;
            }
        } else
        {
            $_SESSION['direction'] = 'ASC';
        }
        if (isset($_REQUEST['sort']))
        {
            if ($_REQUEST['sort'] == 'pn')
            {
                $sql=mysql_query("select * from inventory ORDER BY pn {$_SESSION['direction']}");
            } elseif ($_REQUEST['sort'] == 'description') {
                $sql=mysql_query("select * from inventory ORDER BY description {$_SESSION['direction']}");
            } elseif ($_REQUEST['sort'] == 'wholesale') {
                $sql=mysql_query("select * from inventory ORDER BY wholesale {$_SESSION['direction']}");
            } elseif ($_REQUEST['sort'] == 'list') {
                $sql=mysql_query("select * from inventory ORDER BY list {$_SESSION['direction']}");
            } elseif ($_REQUEST['sort'] == 'stock') {
                $sql=mysql_query("select * from inventory ORDER BY stock {$_SESSION['direction']}");
            } elseif ($_REQUEST['sort'] == 'location') {
                $sql=mysql_query("select * from inventory ORDER BY location {$_SESSION['direction']}");
            }
        } else {
            $sql=mysql_query("select * from inventory ORDER BY pn {$_SESSION['direction']}");
        }      
        echo "<center><table class=\"myTable\">
        <th><a href=\"inventory.php?mode=list&sort=pn\">PN</a></th><th><a href=\"inventory.php?mode=list&sort=description\">Description</a></th><th><a href=\"inventory.php?mode=list&sort=wholesale\">Wholesale</th><th><a href=\"inventory.php?mode=list&sort=list\">List</th><th><a href=\"inventory.php?mode=list&sort=stock\">Stock</th><th><a href=\"inventory.php?mode=list&sort=location\">Location</th><th>Links</th>";
        while ($result=mysql_fetch_array($sql))
        {
            echo "<tr><td>{$result['pn']}</td><td>{$result['description']}</td><td>{$result['wholesale']}</td><td>{$result['list']}</td><td>{$result['stock']}</td><td>{$result['location']}</td><td>[<a href='inventory.php?mode=edit&id={$result['id']}'>Edit</a>]  [<a href='inventory.php?mode=delete&id={$result['id']}'>Delete</a>]  [<a href='orders.php?mode=list_c&id={$result['id']}'>View Orders</a>]</tr>";
        }
        echo "</table></center>";
4

4 に答える 4

1

ああ、神様。

あなたが持っているもののこのはるかに短縮されたコードを見てください:

$sort_column = 'description'; // the default
$sort_dir = 'DESC'; // the default

$columns = array('pn', 'description', 'wholesale', 'name', 'list', 'stock', 'location');

if (isset($_GET['dir']) && in_array($_GET['dir'], array('ASC', 'DESC'))) {
    $sort_dir = $_GET['dir'];
}
if (isset($_GET['sort']) && in_array($_GET['sort'], $columns))
    $sort_column = $_GET['sort'];
}

$sql = "select * from inventory ORDER BY {$sort_column} {$sort_dir}";

$result = mysql_query($sql);

?>

<center><table class="myTable">
    <th><a href="inventory.php?mode=list&sort=pn<?php if($sort_column == 'pn' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">PN</a></th>
    <th><a href="inventory.php?mode=list&sort=description<?php if($sort_column == 'description' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Description</a></th>
    <th><a href="inventory.php?mode=list&sort=wholesale<?php if($sort_column == 'wholesale' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Wholesale</th>
    <th><a href="inventory.php?mode=list&sort=list<?php if($sort_column == 'list' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">List</th>
    <th><a href="inventory.php?mode=list&sort=stock<?php if($sort_column == 'stock' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Stock</th>
    <th><a href="inventory.php?mode=list&sort=location<?php if($sort_column == 'location' && $sort_dir == 'DESC') echo '&dir=ASC'; ?>">Location</th><th>Links</th>

<?php while ($result=mysql_fetch_array($sql)) { ?>
    <tr>
        <td><?=$result['pn']?></td>
        <td><?=$result['description']?></td>
        <td><?=$result['wholesale']?></td>
        <td><?=$result['list']?></td>
        <td><?=$result['stock']?></td>
        <td><?=$result['location']?></td>
        <td>[<a href="inventory.php?mode=edit&id=<?=$result['id']?>">Edit</a>]  [<a href="inventory.php?mode=delete&id=<?=$result['id']?>">Delete</a>]  [<a href="orders.php?mode=list_c&id=<?=$result['id']?>">View Orders</a>]</td>
    </tr>
<?php } ?>

</table></center>

ただしmysql_*、関数を使用したり、学習PDOしたり、少なくともmysqli_*

于 2012-12-05T14:57:56.643 に答える
1

並べ替え順序にセッションを使用しません。

クエリ文字列に方向を追加し、php でホワイトリストと照合するだけです。ホワイトリストにない場合は、デフォルト値を使用してください。

リンクでは、次のような他の値を使用できます。

<th><a href="inventory.php?mode=list&sort=pn&sort_direction=<?php echo ($sort_order === 'ASC') ? 'DESC' : 'ASC'; ?>">PN</a></th>

また、SQL インジェクションの問題を回避するために、PDO / mysqli と準備済みステートメントに実際に切り替える必要があります。

于 2012-12-05T14:45:35.977 に答える
0

みなさんのアドバイスを参考に、ひとつにまとめました!これが私の新しいコードです。ありがとう!

            if (isset($_REQUEST['direction']))
        {
            $direction = $_REQUEST['direction'];
        } else
        {
            $direction = 'ASC';
        }
        if (isset($_REQUEST['sort']))
        {
            $sort = $_REQUEST['sort'];
        } else
        {
            $sort = 'pn';
        }
        $sql=mysql_query("select * from inventory ORDER BY {$sort} {$direction}");
        echo "<center><table class=\"myTable\">";
            if ($direction == 'DESC')
            {
                echo "<th><a href=\"inventory.php?mode=list&sort=pn&direction=ASC\">PN</a></th>
                      <th><a href=\"inventory.php?mode=list&sort=description&direction=ASC\">Description</a></th>
                      <th><a href=\"inventory.php?mode=list&sort=wholesale&direction=ASC\">Wholesale</th>
                      <th><a href=\"inventory.php?mode=list&sort=list&direction=ASC\">List</th>
                      <th><a href=\"inventory.php?mode=list&sort=stock&direction=ASC\">Stock</th>
                      <th><a href=\"inventory.php?mode=list&sort=location&direction=ASC\">Location</th>
                      <th>Links</th>";

            } else 
            {
                echo "<th><a href=\"inventory.php?mode=list&sort=pn&direction=DESC\">PN</a></th>
                      <th><a href=\"inventory.php?mode=list&sort=description&direction=DESC\">Description</a></th>
                      <th><a href=\"inventory.php?mode=list&sort=wholesale&direction=DESC\">Wholesale</th>
                      <th><a href=\"inventory.php?mode=list&sort=list&direction=DESC\">List</th>
                      <th><a href=\"inventory.php?mode=list&sort=stock&direction=DESC\">Stock</th>
                      <th><a href=\"inventory.php?mode=list&sort=location&direction=DESC\">Location</th>
                      <th>Links</th>";
            }
于 2012-12-05T15:16:16.290 に答える