2011-01-22 2 views
0

누군가가 열 머리글을 기반으로 데이터를 정렬 할 수 있도록 링크를 만들어야합니다. ASC 또는 DESC ID로 데이터를 정렬하는 작업 모델을 얻을 수있었습니다. 어떻게 ID 칼럼 이상에 대해이 동일한 기능을 만들 수 있습니까?정렬 열 링크 만들기 PHP

<?php 
    $order = (isset($_GET['sort']) && strcasecmp($_GET['sort'], 'desc') == 0) ? 'DESC' : 'ASC'; 
    $query = 'SELECT DISTINCT `case`, firstname, lastname FROM `cases` ORDER BY id ' . $order; 
      $result = mysql_query($query); 
    ?> 

    <td><a href=<?php echo "'?sort=" . ($order == 'DESC' ? 'ASC' : 'DESC') . "'";?>>Case ID</a></td> 
    <td>Name</td> 

    <?php 
    // list records 
     while ($nt = mysql_fetch_assoc($result)) {  
    ?> 

    <td><?php echo $nt['case']; ?></td> 
    <td><?php echo $nt['firstname']; ?> <?php echo $nt['lastname']; ?> 

답변

0

정렬 방향과 마찬가지로 URL에 열 이름이나 별칭 (id, ...)을 전달해야합니다.

+0

그러나 사람들이 당신의 SQL 쿼리 stuffinto 나쁜 주입 할 수 있도록 허용 된 사이트 목록을 추가해야합니다. – ThiefMaster

+0

정확합니다. 허용 된 이름 목록을 준비하고 다른 이름에 대해서는 기본값을 사용하십시오. – Andrewsville

0

허용 정렬을 정의하는 배열을 정의하므로 링크와 사용자 (악의적 인 사용자는 어떤 종류 = 1, 2, 3 등)를 통해 테이블 ​​이름을 보내지 않으며, 귀하의 링크를 인쇄 할 때 나는 curent 정렬 링크를 비활성화 시켰습니다 (css를 사용하여 나머지 부분과 다르게하여 사용자가 어디에 있는지 알 수 있습니다).
여기에 코드 샘플입니다 :

<?php 
$sorts = array 
(
    1=>array('order'=>' ORDER BY id', 'name'='case id'), 
    2=>array('order'=>' ORDER BY id DESC', 'name'='case id desc'), 
    3=>array('order'=>' ORDER BY firstname', 'name'='case firstname'), 
    4=>array('order'=>' ORDER BY firstname DESC', 'name'='case firstname desc') 
    // and so on 
); 

if(!is_numeric($_GET['sort'])) 
{ 
    echo 'Invalid sort type !';exit; // use your custom error reporting function. 
} 
    foreach($sorts as $key => $value) 
    { 
     $order = ($key == $_GET['sort'])?$value['order']:''; 
     echo '<td><a href = "example.com?sort='.$_GET['sort'].'" '.(($key == $_GET['sort'])? disabled="disabled":'').'>'.$value['name'].'</a></td>'; 
    } 


$query = 'SELECT DISTINCT case, firstname, lastname FROM cases '.$order; 
// ...