0

私は2つのラジオボタンを備えたフォームを持っています - ユーザーが選択したものに応じて、変数を変更してソート順を日付からタイトルに変更したいと考えています:

<form action="<?php echo home_url( '/' ); ?>" method="get" id="searchform2">
        <input type="radio" name="sort" value="date" checked> Order by date
        <input type="radio" name="sort" value="title"> Order by title
        <input type="submit" id="searchsubmit2" class="search-submit" value="Search" />
</form>

<?php if(isset($_GET['sort']) == "date") {
    $sort = ($_GET['sort']);
    $order = "DESC";
} else {
    $sort = ($_GET['sort']);    
    $order = "ASC";
} 
$args = array(
    'post_type' => 'policies',
    'orderby' => $sort,
    'order' => $order
);  
?>

現時点では、ソート変数は選択に応じて正しいものを出力していますが、順序はそうではありません。何を選択しても「DESC」を出力します。どこが間違っていますか?

4

3 に答える 3

1

あなたのif条件が壊れているようです、これを試してください:

<?php
if(isset($_GET['sort']) && $_GET['sort'] === "date") {
    $sort = $_GET['sort'];
    $order = "DESC";
} else {
    $sort = $_GET['sort'];    
    $order = "ASC";
} 
$args = array(
    'post_type' => 'policies',
    'orderby' => $sort,
    'order' => $order
);  
?>

ただし、ユーザーからのフィルター処理されていない入力を使用しているため、これは危険です。たとえば、DB クエリに使用するだけの場合$sort、最初にサニタイズしないと、SQL インジェクションが導入されます。

于 2013-11-15T10:58:01.510 に答える
0

isset($_GET['sort'])datetrue または false 以外に等しくなることはありません。代わりにこれを行います:

<?php 
$sort = ($_GET['sort']);
if( !empty($_GET['sort']) && $_GET['sort'] == "date") {    
    $order = "DESC";
} else {  
    $order = "ASC";
}

編集:それで何をしているのかわかりませんが、コードは SQL インジェクションに対して脆弱なようです。

于 2013-11-15T10:56:55.847 に答える