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
);  
?>

但这很危险,因为您使用的是来自用户的未经过滤的输入。例如,如果您仅$sort用于数据库查询,如果您不先对其进行清理,您将引入 SQL 注入!

于 2013-11-15T10:58:01.510 回答
0

isset($_GET['sort'])永远不可能等于date但真或假。改为这样做:

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

编辑:我不确定你在做什么,但你的代码似乎容易受到 SQL 注入的影响。

于 2013-11-15T10:56:55.847 回答
0

尝试这个

<form action="" method="post" id="searchform2">
        <input type="radio" name="sort" value="date"> Order by date
        <input type="radio" name="sort" value="title"> Order by title
        <input type="submit" id="searchsubmit2" class="search-submit" value="Search" name="chkdata" />
</form>

<?php 
if(isset($_POST['chkdata'])){
if($_POST['sort'] == "date"){
    $_POST['sort'] = "DESC";
} else {
    $_POST['sort'] = "ASC";
}
}

echo $_POST['sort'];
于 2013-11-15T11:12:27.590 回答