2013-12-09 2 views
2

SQL 쿼리에서 post 변수 값을 사용하여 사용자가 선택한 순서대로 데이터를 정렬하고 싶습니다. 테이블이 해당 필드에 올바르게 표시되지만 값은 정렬되지 않습니다.mysql 쿼리의 post 변수

나는 이것이 SQL 삽입의 영향을 받는다는 것을 알고 있지만, 나는 나의 로컬 서버에서 훈련 목적으로 이것을하고있다.

<?php 
$sort_in = $_POST['SortIn']; 

$sql = 'select * from db.Runner order by "'.$_POST['SortIn'].'"'; 
    $result = mysql_query($sql, $con); 

    if($result) 
    { 
     echo "<table border = '1'> 
     <tr> 
     <th>RunnerID</th> 
     <th>EventID</th> 
     </tr>"; 

     while($row = mysql_fetch_array($result)) 
     { 
      echo "<tr><td>"; 
      echo $row['RunnerID']; 
      echo "</td><td>"; 
      echo $row['EventID']; 
      echo "</td><td>"; 
      </tr>"; 
     } 
     echo "</table>"; 
?> 
+3

교육용으로 사용하는 경우 더 이상 사용되지 않는/사용되지 않는 mysql _ *() 함수를 제거하고 적어도 mysqli 또는 PDO에 대해 알아야합니다. –

답변

5

) (내가 한 제안 예를 들어 필드 이름이 "주문"일 경우 데이터베이스에 따라 마지막 두 개 중 하나를 선택합니다.

제거 따옴표

$sql = 'select * from db.Runner order by '.$_POST['SortIn']; 

가능성이 적절한 구분, 예를 들어,에 의해 교체

$sql = 'select * from db.Runner order by `'. $_POST['SortIn'] . '`'; 
이미 내가 오늘 종료 입을하겠습니다 mysqli_ 대 SQL 주입 및 mysql_로 언급

, 정말 이유가 표시되지 않지만) - 심지어 교육 프로젝트 localhost에은 - 그것을 바로 할 수 없습니다 , 솔직히.

[편집]이 답변을 게시 한 후 OP에 MarcB과으로 몇 가지 유용한 의견을 보냈습니다. 이 훈련에도 불구하고, 좋은 조언이기 때문에, 그들에게 유의하십시오!

+0

다른 변수 $ _POST [ 'SortBy']를 추가하여 사용자가 원하는 경우 내림차순으로 정렬하고 싶습니다. 어떻게해야합니까? 감사합니다 – zan

+0

당신은'SortOrder'를'+ 1' 또는'-1'로 넘겨주고'($ _POST [ 'SortOrder'] == -1? "DESC": "ASC")'와 같은 것을 쿼리에 추가 할 수 있습니다. – CompuChip

1
당신은 실제로 대신 필드의 문자열을 정렬

는 쿼리에서 따옴표를 제거 :

$sql = 'select * from db.Runner order by '.$_POST['SortIn']; 

P.S.을 내가 주입에 대한 호언 장담을 시작하지 않을 것이다, 당신은 생산 물론

select * from db.Runner order by fieldname; 
select * from db.Runner order by `fieldname`; -- for MySql 
select * from db.Runner order by [fieldname]; -- for MSSQL 

중 하나를해야

select * from db.Runner order by "fieldname"; 

같은 쿼리를 실행하는

+0

다른 포스트 변수에 지정된 asc 또는 dsc 순서로 정렬하려면이 두 변수를 연결하지 않으면 어떻게됩니까? – zan

+1

@zan 연결할 수 있기 전에 변수가 허용 목록에 의해 유효한지 확인하십시오. –