SQLI / PHP:列$工作但不排序?

时间:2018-01-16 17:27:52

标签: php mysqli

第一部分代码应该正确,因为当您单击列时网址会发生变化:

$sort="";
$order='id';
$records=mysqli_query($con, "SELECT * FROM employees ORDER by $order $sort");

if(isset($_GET['sort'])){
    $sort = isset($_GET['sort']) ? $_GET['sort'] : 'ASC';
    $sort = ($sort == 'ASC') ? 'DESC': 'ASC';
    debug_to_console( "Get_sort triggered");
} else{ 
    $sort='asc';
}

if(isset($_GET['order'])){
    $order = $_GET['order'];
    debug_to_console( "Get_order triggered");
} 

第二部分错误可能很有可能?

 <?php while ($row = mysqli_fetch_array($records)) { ?>
    <tr>
    <td><?php echo $row['id']; ?> </td>
    <td><?php echo $row['first_name']; ?> </td>
    <td><?php echo $row['last_name']; ?> </td>
    <td><?php echo $row['position']; ?> </td>
    <td class="hidden-xs"><?php echo $row['date']; ?> </td>
    <td class="hidden-xs"><?php echo $row['updated']; ?> </td>
    <td>
    <a href="edit.php?edit=<?php echo $row['id']; ?>" name="edit" class="button green_btn"><span class="glyphicon glyphicon-pencil"> </a>
    <a href="index.php?del=<?php echo $row['id']; ?>" name="del" class="button del_btn" onclick="return confirm('Are you sure you want to delete this item?');"><span class="glyphicon glyphicon-trash"></span> </a>
    </td>

    </tr>
    <?php
    }
    ?>

编辑:没有错误(据我所知)。没有什么可以通过$ order排序。相反,表格保持不变,并按ID排序。

  1. Try1:在最后放置$ order和$ sort导致$ sort没有 在URL内工作。
  2. Try2:输入id =“”会导致参数 错误。
  3. 下面的$ order和$ sort会导致整个表无效。

        $order = isset($_GET['order']) ? $_GET['order'] : 'id';
        $sort = isset($_GET['sort']) ? $_GET['sort'] : 'ASC';
    
        $sort = ($sort == 'ASC') ? 'DESC': 'ASC';
    
        $records=mysqli_query($con, "SELECT * FROM employees ORDER by $order $sort");
    

2 个答案:

答案 0 :(得分:3)

在确定$ sort的值之前,您正在执行查询。

答案 1 :(得分:1)

你有两个问题。

首先,在根据$order参数设置$sort$_GET之前,您正在执行查询。您需要将查询移动到底部。

其次,您将$order设置为与参数相反的位置。

另外,为了防止SQL注入,您应该验证order参数。

$sort="";
$order='id';

if(isset($_GET['sort'])){
    $sort = isset($_GET['sort']) ? $_GET['sort'] : 'ASC';
    $sort = ($sort == 'ASC') ? 'ASC': 'DESC';
    debug_to_console( "Get_sort triggered");
} else{ 
    $sort='asc';
}

if(isset($_GET['order'])){
    $valid_order = array('id', 'name', 'dept');
    $order = in_array($_GET['order'], $valid_order) ? $_GET['order'] : 'id';
    debug_to_console( "Get_order triggered");
} 

$records=mysqli_query($con, "SELECT * FROM employees ORDER by $order $sort");