숫자 구간검색 도와주세요. 채택완료
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 포인트
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년 전
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]
형태가 되어야 합니다.
처음부터 아래처럼 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]
댓글을 작성하려면 로그인이 필요합니다.
4년 전
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);
해당
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
제가 초보라 어디서 어떻게 범위값을 따로 받아야 하는건지 모르겠습니다. ㅜㅜ
if($fp && $tp) {
$sql_search .= " and wr_1 between '".$fp." 0 'and ".$tp." 999999999'";
}
이런식이면 범위값을 받게 되는건가요?