2012-05-11 3 views
0

이 코드에서 문제가 발생했습니다. 사용자가 선택 드롭 메뉴에서 "모두 표시"를 선택하면 테이블 행의 모든 ​​데이터를 가져오고 싶습니다.where 절의 모든 값을 얻으려면

여기가 선택 메뉴입니다. 그는 모든 선택하면

때문에, 옵션 값 사이에서 반향에 적합한 코드 :)이 양식을 제출의

<b>speciality:</b> <select id="main_mav" name="speciality"> 
<option value="none">Select speciality:</option> 
<option value=""> All specialities </option> 
<?php 

     $result = mysql_query('SELECT speciality FROM visits') or die(mysql_error()); 
     while ($row = mysql_fetch_assoc($result)) { 
       echo '<option value="'.$row['speciality'].'">'.$row['speciality'].'</option>'; 
     } 
?> 
</select><br /> 

무엇이 메뉴 잡아이 테이블에서 데이터,하지만입니다!

if ($region=="All regions"){ 


       $region=$_POST['""']; 
      } 
      else ($region=$_POST['region']); 

      $date1 =$_POST['from_date']; 
      $date2 = $_POST['to_date']; 
      $product=$_POST['product']; 
      $speciality=$_POST['speciality']; 
      $type=$_POST['visit_type']; 

sql="SELECT id, customer_name, seller_1_name, seller_2_name FROM visits Where (speciality ='$speciality') AND (visit_type ='$type') AND (product ='$product') AND (region ='$region') AND (visit_date BETWEEN '$date1' AND '$date2')"; 
$result=mysql_query($sql); ## This line is new. 
$num=mysql_numrows($result); 
$row = mysql_fetch_array($result); 

"드롭 메뉴에 모두 표시"를 선택하면 입력 할 올바른 코드는 무엇입니까?

+1

** 귀하의 코드는 SQL 용으로 평가되지 않는 매개 변수로 변수를 전달하는 준비된 명령문을 사용해야합니다. 내가 무슨 말을하는지, 어떻게 고쳐야할지 모르겠다면 [Bobby Tables] (http://bobby-tables.com)의 이야기를 읽으십시오. – eggyal

답변

2

적어도 mysql_real_escape_string으로 입력을 살균해야합니다!

실제 질문 : $speciality이 비어 있는지 확인하고 (speciality ='$speciality') 조건없이 다른 검색어를 생성하십시오.

+0

mysql_real_escape_string은 더 이상 사용되지 않으며 PDO가 사용되어야합니다. 또는 적어도 mysqli_ * functions – AlanFoster

+1

저는 알고 있습니다. 그러나 PDO를 사용하기 위해 전체 OP 코드를 변경하는 방법을 설명하는 것은이 질문의 범위를 훨씬 뛰어 넘습니다. 그래서 "적어도"이라고 말한 것입니다. – bfavaretto

+0

+1 너무 빨리 조건을 찾아야합니다. :) 또한 OP로 보는 @AlanFoster는 더 이상 사용되지 않는'mysql_' 명령을 사용하고 있습니다. 문제는 보이지 않습니다. 그는 이것이 기본적인 질문이기 때문에 그가 여전히 배우고있는 것처럼 보입니다, 그래서 나는 보안이 가장 우선 순위가 높은 것이 아닐 것이라고 생각합니다. =] –

0

HTML 참조 된 '전문 분야'와 PHP가 '지역'으로 참조 했으므로 저는 '지역'을 고수 하겠지만 아이디어는 여기에 있습니다.

if ($region=="All regions"){ 
     $sql = 'SELECT id, customer_name, seller_1_name, seller_2_name, FROM visits'; 
    } else { 
     $region  = mysql_real_escape_string($_POST['region']); 
     $date1  = mysql_real_escape_string($_POST['from_date']); 
     $date2  = mysql_real_escape_string($_POST['to_date']); 
     $product = mysql_real_escape_string($_POST['product']); 
     $speciality = mysql_real_escape_string($_POST['speciality']); 
     $type  = mysql_real_escape_string($_POST['visit_type']); 
     $sql  = "SELECT id, customer_name, seller_1_name, seller_2_name FROM visits Where (speciality ='$speciality') AND (visit_type ='$type') AND (product ='$product') AND (region ='$region') AND (visit_date BETWEEN '$date1' AND '$date2')"; 
    } 

$result = mysql_query($sql); ## This line is new. 
$num = mysql_numrows($result); 
$row = mysql_fetch_array($result);