2012-05-07 2 views
1

quicky one, 검색어를 생성 중입니다. 문제가 하나 있습니다.이 코드가 붙어 있습니다.유효성 확인을 통한 검색어

이 코드는 완벽하게 작동하지만이 유효성 검사를 추가해야합니다.이 유효성 검사 userid='$id'을 추가하면 문제가 발생합니다. 검색 쿼리가 작동하지 않습니다. 누군가 나를 올바른 길로 가게 할 수 있습니까? 여기 뭔가 빠졌어. $ id의 값은 true입니다. 이것은이 검색어에 대한 전체 코드 부분이며 결과는 유효성 검사없이 확인됩니다.

else if($_POST['filter1'] == "po_boravistu") 
     { 
      if($row_12['admin_id'] < 1) 
       { 
      //FILTER 10 po boravištu 
$sqlCommand = "SELECT * FROM albums WHERE userid='$id' AND WHERE bor_mjesto LIKE '%$searchquery%' OR bor_kucni_broj LIKE '%$searchquery%' OR 
bor_postanski_broj LIKE '%$searchquery%' OR bor_ulica LIKE '%$searchquery%' OR bor_opcina LIKE '%$searchquery%'"; 
       } 
     } 

전체 스크립트는에 userid='$id'없이 잘 작동하지만, 내가 추가 할 때 유효성 검사 스크립트는 죽은 떨어진다.

+0

ID 제약 조건이 추가 된 쿼리 코드를 게시하십시오. 또한 $ id에 포함하려는 값이 포함되어 있는지 확인 했습니까? – octern

+0

당신은 그 안에 유효성 확인을 가진 질의를 보여줄 수 있습니까? –

+0

@BrianWarshaw 유효성 검사를 통해 코드를 편집했습니다. $ id 값은 ok이고 결과는 userid = '$ id'없이는 괜찮습니다. 그래서 나는 잘못된 것을하고 있습니다. –

답변

3

WHERE 절이 2 개있어 SQL이 유효하지 않습니다.

변경 그것에 :

$sqlCommand = "SELECT * FROM albums WHERE userid='$id' AND (bor_mjesto LIKE %$searchquery%' OR bor_kucni_broj LIKE '%$searchquery%' OR bor_postanski_broj LIKE '%$searchquery%' OR bor_ulica LIKE '%$searchquery%' OR bor_opcina LIKE '%$searchquery%')"; 

는 다음과 같이, 당신은 두 번째 WHERE 드롭 (일부 괄호를 추가) 할 필요가

+0

그렇다면 괄호는 그 것입니다. 고마워. –

2

(다중 "OR"문을 포위하기 위해 괄호를 사용하는 방법을 참고) :

$sqlCommand = " 
SELECT * 
FROM 
albums 
WHERE 
userid='$id' 
AND 
(
bor_mjesto LIKE '%$searchquery%' OR 
bor_kucni_broj LIKE '%$searchquery%' OR 
bor_postanski_broj LIKE '%$searchquery%' OR 
bor_ulica LIKE '%$searchquery%' OR 
bor_opcina LIKE '%$searchquery%' 
) 
"; 

쿼리 당 한 번만 WHERE을 사용해야합니다. 또한 정수 값이므로 $ id 주위에 작은 따옴표를 추가 할 필요가 없습니다.

또한 변수가 어디서 오는지 잘 모르겠지만이 쿼리에 넣기 전에 mysql_real_escape_string을 사용하여 이스케이프 처리하고 싶을 것입니다. 마지막으로, SELECT *은 거의 항상 실수입니다. 필요한 행만 선택하십시오. 그러면 시간이 절약됩니다.

+0

탈출 흔적을 언급하기위한 +1 – TheOx

+0

@ Daaan 한 페이지에 많은 querys가 있다면 어떻게 될까요? mysql_real_escape_string을 모든 값에 대한 모든 쿼리에서 수행하지 않고 간단한 방법이 있습니까? 어쩌면 나는'mysql_real_escape_string'을 오해하고 있는가? –

+0

변수를 두 번 이상 사용하는 경우 (예 :'$ searchquery')와 같이 한 번 이스케이프 처리하면됩니다. 당신의 질의 앞에 이것을 넣으십시오 :'$ searchquery = mysql_real_escape_string ($ searchquery);'. 이후,'$ searchquery' 문자열은 MySQL 쿼리에서 사용하기에 안전합니다. 이것은'$ searchquery'에 작은 따옴표가 있으면 문제를 예방하는 데 도움이됩니다. 이스케이프하지 않으면 작은 따옴표가 문자열을 끝내는 것으로 해석되어 MySQL 구문 오류가 발생합니다. 사용자 입력을 적절하게 이스케이프하면 [SQL injection] (http://stackoverflow.com/a/601524/1185355)으로부터 자신을 보호 할 수 있습니다. – Daan

관련 문제