숫자 구간검색 도와주세요.

숫자 구간검색 도와주세요.

QA

숫자 구간검색 도와주세요.

답변 3

본문

text1

~

text2

text1과 text2사이의 구간검색을 하려고 합니다.

wr_1의 데이터를 검색하려고 하고 데이터는 숫자로 되어있습니다.


//여분필드검색 
if($fp && $tp) {
    $sql_search .= " and wr_1 between '".$fp."' and '".$tp."' ";
}
//텍스트박스
<input type="text" name="fp" id="fp" class="width80" value="<?php echo $fp; ?>" />
                  ~
 <input type="text" name="tp" id="tp" class="width80" value="<?php echo $tp; ?>" />

이렇게 되어있는데 검색이 안됩니다. 

왜 안되는건지 알고 싶습니다.

도와주세요.

이 질문에 댓글 쓰기 :

답변 3


같은 값, 예를 들어 wr_1 BETWEEN 1 AND 1 검색이면 wr_1=1 조건과 다를 바 없겠죠?
그러니 범위값을 따로 받아야 합니다.

<input type="text" name="fp1" id="fp1" class="width80" value="<?php echo $fp; ?>" />
~
<input type="text" name="tp2" id="tp2" class="width80" value="<?php echo $tp; ?>" />
 
그누보드에서 $fp1, $fp2 변수 바로 할당해주는지 모르겠군요.
아래처럼 Superglobals 사용하면 됩니다.
 
$sql_search .= " and wr_1 between {$_REQUEST['fp1']} and {$_REQUEST['fp2']} ";
+ $_REQUEST 특성 이해 후 사용. 또는 폼에 맞게 $_GET, $_POST 등의 Superglobals를 사용.
- https://www.php.net/manual/en/reserved.variables.request.php
 
* 참고로 저렇게 곧바로 사용하면 숫자가 아닌 값이 들어올 때 문제가 되니 (SQL Injection)
아래처럼 최소한의 안전 장치를 마련하면 좋습니다. (방법은 다양한데 참고로 한가지 남겨요.)
 
$fp1 = (int)preg_replace('/[^\d]+/', '', $fp1); // \d = 0-9 숫자 ... 숫자가 아닌 모든 문자[열] 제거 후 정수화
$fp2도 마찬가지 처리

자세한 답변 감사합니다.
제가 초보라 어디서 어떻게 범위값을 따로 받아야 하는건지 모르겠습니다. ㅜㅜ

if($fp && $tp) {
$sql_search .= " and wr_1 between '".$fp." 0 'and ".$tp." 999999999'";
}

이런식이면 범위값을 받게 되는건가요?

AND wr_1 BETWEEN 시작값 AND 종료값
형태가 되어야 합니다.



처음부터 아래처럼 2개 값을 받아서(위에 Copy&Paste 때문에 변수명 문제가 있었네요)


<input type="text" name="fp1" id="fp1" class="width80" value="<?php echo $fp1; ?>" />
~
<input type="text" name="tp2" id="tp2" class="width80" value="<?php echo $tp2; ?>" />



조회하는 쪽에서 그대로 이용하면 됩니다.


if ( $fp1 && $fp2 ) {
    $sql_search.= " AND wr_1 BETWEEN {$fp1} AND {$fp2}";
}



안전을 위해서 $fp1, $fp2 값이 숫자로만 구성되었는지 확인하면 좋습니다.
예를 들어 아래처럼요.

if ( preg_match('/^\d+$/', $fp1) && preg_match('/^\d+$/', $fp2) ) {
    $sql_search.= " AND wr_1 BETWEEN {$fp1} AND {$fp2}";
}

bbs/list.php에서 변경하신 건가요?

우선 $sca 또는 $stx가 있어야 sql_search 조건을 만들게 됩니다.

if ($sca || $stx || $stx === '0') {     //검색이면
    $is_search_bbs = true;      //검색구분변수 true 지정
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

해당 <form에

<inupte type="hidden" name="stx" value="0" />

을 추가해 보세요.

답변을 작성하시기 전에 로그인 해주세요.
전체 4
© SIRSOFT
현재 페이지 제일 처음으로