2014-09-29 2 views
0

PHP 검색에서 일부 항목을 검색해야합니다 (WHERE를 사용). 그러나 검색에 사용 된 필드는 가변적 일 수 있습니다.검색 매개 변수의 수에 따라 가변 sql 쿼리

검색 양식이있는 4 개의 필드가있는 페이지가 있습니다.

$gomme_sql = $data->query("SELECT * FROM table WHERE parameter1 = '$_POST['name1']' AND parameter2 = '$_POST['name2']' ORDER BY id ASC"); 

하지만 작성하는 필드 모르는 : 그것은 질의을하는 search.php에 POST 필드를 통해 전송한다. 따라서 검색 양식에서 field1에 아무 것도 입력하지 않으면 WHERE 쿼리에 parameter1 = '$_POST['name1']'이 없어야합니다.

이것을 얻는 방법을 알고 계십니까?

답변

0

당신은 이런 방식으로 질의에 그 조항을 추가하기 전에 포스트 데이터를 확인하실 수 있습니다 감사합니다

편집 : 추가 추가 검사 :

$sql="select something from someTable "; 
if(!empty($_POST['name1']) || !empty($_POST['name2'])) // add as many as you like 
{ 
$sql.=" where "; 
    if(!empty($_POST['name1'])) 
    { 
     $sql.="parameter1= $_POST['name1']"; 
    } 
// etc etc... 
} 
$sql.=" ORDER BY id ASC"; 

등등을.

그런데 제발, 사용자로부터 이런 종류의 입력과 준비 문을 사용하시기 바랍니다. 이것은 SQL 주입에 대해 SUPER입니다. 이것을 읽어 보시기 바랍니다 : How can I prevent SQL injection in PHP?

+0

감사합니다. 필드가 채워지지 않으면 페이지에 테이블의 모든 항목이 표시되기를 바랍니다. 그 구조로, 그 경우 나는 어떤 인수도없이 통과했습니다 ... – Matteo

+0

다른 수준의 수표를 편집하십시오. – Fluffeh

0

더 복잡한 SQL을 필요로하는 경우이 옵션을 일반 SQL 수정 기능처럼 쓸 수 있습니다.

<?php 


    function sqlSelect($table, $sel, $wh = '', $groupby = '', $order = '', $add = '') { 

      $tb = $table; 
      if (is_array($table)) { 
       $tb = implode(',', $table); 
      } 
      if ($wh) { 
       if (is_array($wh)) { 
        $w = array(); 
        foreach ($wh as $k => $v) { 
         $v = mysqli_real_escape_string($v); 
         if (is_null($v)) 
          $w [] = "$k=null "; 
         else 
          $w [] = "$k ='$v'"; 
        } 
        $wh = 'where ' . implode(' and ', $w); 
       }else { 
        $wh = "where $wh"; 
       } 
      } 
      if ($groupby) 
       $groupby = "group by $groupby"; 
      if ($order) 
       $order = "order by $order"; 
      $sql = "select $sel from $tb $wh $groupby $order $add "; 
      return $sql; 
     } 
    //set _GET as this is console test  
    $_GET['name1']='Bob'; 
    $where = array(
     'name1'=>$_GET['name1'] 
    ); 
     echo sqlSelect('sometable' , '*' , $where) ."\n"; 
     // select * from sometable where name1 ='Bob'  

//or some complex stuff 
     echo sqlSelect('persons', "age,status" , array('name'=>'Maria' , 'likes'=>'PHP') , null, 'age' , 'limit 20'); 
     //select age,status from persons where name ='Maria' and likes ='PHP' order by age limit 20