테스트 사이트 - 개발 중인 베타 버전입니다

숫자 구간검색 도와주세요. 채택완료

justwoony 4년 전 조회 2,297
text1

~

text2

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

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

</p>

<p>//여분필드검색 </p>

<p>if($fp && $tp) {

    $sql_search .= " and wr_1 between '".$fp."' and '".$tp."' ";

}</p>

<p>//텍스트박스</p>

<p><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; ?>" /></p>

<p>

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

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

도와주세요.

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
B
4년 전

</p>

<p>같은 값, 예를 들어 wr_1 BETWEEN 1 AND 1 검색이면 wr_1=1 조건과 다를 바 없겠죠?</p>

<p>그러니 범위값을 따로 받아야 합니다.</p>

<p>

<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; ?>" /></p>

<p> </p>

<p>그누보드에서 $fp1, $fp2 변수 바로 할당해주는지 모르겠군요.</p>

<p>아래처럼 Superglobals 사용하면 됩니다.</p>

<p> </p>

<p>$sql_search .= " and wr_1 between {$_REQUEST['fp1']} and {$_REQUEST['fp2']} ";</p>

<p>+ $_REQUEST 특성 이해 후 사용. 또는 폼에 맞게 $_GET, $_POST 등의 Superglobals를 사용.</p>

<p>- <a href="https://www.php.net/manual/en/reserved.variables.request.php" target="_blank" rel="noopener noreferrer">https://www.php.net/manual/en/reserved.variables.request.php</a></p>

<p> </p>

<p>* 참고로 저렇게 곧바로 사용하면 숫자가 아닌 값이 들어올 때 문제가 되니 (SQL Injection)</p>

<p>아래처럼 최소한의 안전 장치를 마련하면 좋습니다. (방법은 다양한데 참고로 한가지 남겨요.)</p>

<p> </p>

<p>$fp1 = (int)preg_replace('/[^\d]+/', '', $fp1); // \d = 0-9 숫자 ... 숫자가 아닌 모든 문자[열] 제거 후 정수화</p>

<p>$fp2도 마찬가지 처리</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

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

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

이런식이면 범위값을 받게 되는건가요?
B
BiHon
4년 전
AND wr_1 BETWEEN 시작값 AND 종료값
형태가 되어야 합니다.



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

[code]
<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; ?>" />
[/code]


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

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


안전을 위해서 $fp1, $fp2 값이 숫자로만 구성되었는지 확인하면 좋습니다.
예를 들어 아래처럼요.
[code]
if ( preg_match('/^\d+$/', $fp1) && preg_match('/^\d+$/', $fp2) ) {
$sql_search.= " AND wr_1 BETWEEN {$fp1} AND {$fp2}";
}
[/code]

댓글을 작성하려면 로그인이 필요합니다.

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);

해당

을 추가해 보세요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

4년 전

해당검색을 어디다가 쓰셨는지 모르겠는데 list.php 에 검색 하는 부분들을 수정해주셔야 합니다. 해당만 검색을 한다면 검색어 없을때도 같이요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인