채택완료

상품의 가로, 세로, 높이를 검색하는 방법 (영카트)

상품 등록하는 페이지에 이런식으로 가로, 세로, 높이를 넣었습니다.

                <?php echo help("입력하지 않으면 상품상세페이지에 출력하지 않습니다."); ?>
                <input type="text" name="it_1" value="<?php echo get_text($it['it_1']); ?>" id="it_1" class="frm_input" size="8"> x <input type="text" name="it_2" value="<?php echo get_text($it['it_2']); ?>" id="it_2" class="frm_input" size="8"> x <input type="text" name="it_3" value="<?php echo get_text($it['it_3']); ?>" id="it_3" class="frm_input" size="8"> (가로x세로x높이)

상품보기나 이런부분은 다 잘되는데

쇼핑몰 상단 부분에 

[가로] x [세로] x [높이] 검색

이런식으로 검색하는 부분을 만들고 싶습니다.

소스를 어떻게 넣으면 되나요?


선배님들의 도움 부탁드리겠습니다 ^^

|

답변 1개 / 댓글 1개

채택된 답변
+20 포인트
2026-09-27 (일) 23:15:16
영카트에서 상품 검색은 shop/search.php가 처리하니까, 두 군데만 손보면 돼요. 상단에 검색 폼을 추가하고, search.php에 가로·세로·높이 조건을 넣으면 됩니다.
 

1. 상단 검색 폼 추가

테마를 쓰신다면 theme/사용테마/shop/shop.head.php, 아니면 shop/shop.head.php에서 검색창을 넣고 싶은 위치에 아래 코드를 넣으세요.

Copy
<form name="fsize_search" method="get" action="<?php echo G5_SHOP_URL; ?>/search.php" class="size_search">
    <input type="text" name="s_w" value="<?php echo isset($_GET['s_w']) ? get_text($_GET['s_w']) : ''; ?>" class="frm_input" size="5" placeholder="가로"> x
    <input type="text" name="s_d" value="<?php echo isset($_GET['s_d']) ? get_text($_GET['s_d']) : ''; ?>" class="frm_input" size="5" placeholder="세로"> x
    <input type="text" name="s_h" value="<?php echo isset($_GET['s_h']) ? get_text($_GET['s_h']) : ''; ?>" class="frm_input" size="5" placeholder="높이">
    <button type="submit" class="btn_submit">검색</button>
</form>

 

2. shop/search.php 수정

search.php를 열면 $where[] = ... 형식으로 조건을 쌓다가 $sql_where = " where " . implode(" and ", $where);로 합치는 부분이 있어요. 그 implode 줄 바로 위에 아래 코드를 넣으세요.

Copy
// 가로 x 세로 x 높이 검색
$s_w = isset($_GET['s_w']) ? preg_replace('/[^0-9.]/', '', $_GET['s_w']) : '';
$s_d = isset($_GET['s_d']) ? preg_replace('/[^0-9.]/', '', $_GET['s_d']) : '';
$s_h = isset($_GET['s_h']) ? preg_replace('/[^0-9.]/', '', $_GET['s_h']) : '';

if ($s_w !== '') $where[] = " CAST(a.it_1 AS DECIMAL(10,2)) = '".(float)$s_w."' ";
if ($s_d !== '') $where[] = " CAST(a.it_2 AS DECIMAL(10,2)) = '".(float)$s_d."' ";
if ($s_h !== '') $where[] = " CAST(a.it_3 AS DECIMAL(10,2)) = '".(float)$s_h."' ";
 

코드에서 신경 쓴 부분은 이래요.

  • it_1~it_3은 varchar 필드예요. 그래서 CAST로 숫자로 바꿔서 비교해야 "100"과 "100.0"을 같은 값으로 봐요.
  • 입력값에서 숫자와 점(.)만 남기고 지우기 때문에 SQL 인젝션 걱정은 없어요.
  • 칸을 비워 두면 그 조건은 빠져요. 예를 들어 가로만 넣으면 가로만 맞는 상품이 전부 나와요.

3. 페이지 넘길 때 조건 유지하기

search.php 아래쪽에 $qstr1처럼 페이징 링크용 쿼리스트링을 만드는 부분이 있어요. 거기에 아래 줄을 추가하세요. 이걸 안 하면 2페이지로 넘어갈 때 조건이 풀려요.

Copy
$qstr1 .= '&amp;s_w='.urlencode($s_w).'&amp;s_d='.urlencode($s_d).'&amp;s_h='.urlencode($s_h);

 

답변에 대한 댓글 1개

친절한 답변 너무 감사드립니다. 감동 받았어요ㅠ

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