채택완료

부탁드립니다 제발

2018-05-02 (수) 20:09:04 2,173

<?
header('Content-Type: application/vnd.ms-excel; charset=utf-8');
header("Content-Disposition: attachment; filename=file.xls");
header("Content-Description: PHP5 Generated Data");

include "_common.php";

if($_POST['chk']) {
        for ($i=0; $i<count($_POST['chk']); $i++) {

        $k     = $_POST['chk'][$i];
        $od_id[] = $_POST['od_id'][$k];

        }
    $od = implode(", ", $od_id);
    $where = "WHERE od_id IN($od)";
}
?>
<table border="1">
    <tr>
        <th>주문번호</th>
        <th>이름</th>
        <th>전화번호</th>
    </tr>
    <?
        $que = sql_query("SELECT * FROM {$g5['g5_shop_order_table']} $where order by od_id");
        while($row = sql_fetch_array($que)) {
    ?>
    <tr>
        <td style='mso-number-format:\@;'><?=$row['od_id']?></td>
        <td><?=$row['od_b_name']?></td>
        <td style='mso-number-format:\@;'><?=$row['od_tel']?></td>
    </tr>
    <?
        }
    ?>
</table>

선택된 것만 엑셀 다운 받는 소스인데 페이지 전체의 정보가 다운됩니다.

이유를 모르겠습니다. 정말 몰라요. 죄송합니다. 질문해서 죄송합니다.

제발 알려주십시오.

|

답변 2개 / 댓글 21개

채택된 답변
+20 포인트
2018-05-02 (수) 20:24:46

한번 답찍어보기를 해본다면..

 $where = "WHERE od_id IN($od)"; 

->

 $where = "WHERE od_id IN( {$od} )";

해보면 어떨까 싶습니다.

답이 아니라면..

-------------------

상단의 excel 관련 헤더 3 Line 을 임시 주석처리하여,

엑셀파일이 아닌 화면으로 먼저 디버깅하여, 

문제를 수정한 뒤, 주석을 해제하는 것을 추천합니다.

선택된 것만이 아닌, 전체가 나오는 것은 쿼리문에 문제가 있을 가능성이 큽니다.

$where = "WHERE od_id IN($od)"; 문 아래에

echo $where; 

통해 where 문이 제대로 작성되었는지,

echo $od;

print_r2($od_id);

등을 통해 차근차근 값이 제대로 들어있는지 확인해보는 것이 좋을 듯 합니다.

답변에 대한 댓글 18개

오 방금 그렇게 했더니 echo $where; 에서 벌써부터 전체 페이지 내용이 나오네요 윗부분이 잘못된거네요
$where = "WHERE od_id IN( {$od} )";는 해봤더니 소용이 없었습니당 ㅠㅠ
echo k까지 해봤는데요 숫자 14가 나오니 14가 선택됐다는거 같네요. 하나만 선택했는데 말이죠. 그럼 체크값이 안넘어오는건가요?
2018-05-02 (수) 20:30:01
어느부분부터 기대한 값이 들어있지 않은지, 어느부분이 문제인지를 파악해보는 것이 어떨까 합니다. (ex. 어떤 라인이 기대한 대로 처리가 되지 않고 있는지..)

전체 페이지 내용이 나오는 것은, echo 문 이후에도 계속 실행이 되기 때문인 것으로 잘못 파악한 것일 수 있습니다.

echo $where; exit; 를 하면.. 좀 더 명확히 $where 문을 살펴볼 수 있습니다.
WHERE od_id IN(2018042509131024, 2018042510435563, 2018043015133473, 2018042117274951, 2018042711343699, 2018042714431437, 2018042715265923, 2018042410554782, 2018042520544999, 2018042318075643, 2018042323363061, 2018042315311486, 2018042123025756, 2018042309275949, 2018042015434765, 2018042309275949) 그렇게 했더니 이렇게 나오네요
chk 값이 안들어오는건가요 ㅠㅠ 그럼 이제 어떻게 해야 하나 막막하네요
echo $k ; exit ; 하니까 14가 뜨네요
echo $i ; exit; 하니까 1이 뜨네요 그럼 체크는 정상적으로 들어오는건가요?
2018-05-02 (수) 20:41:20
$od 에는 체크한 것의 주문번호만 넘어와야 하는데, 모든 주문번호가 넘어온 것으로 보이고,

그렇다면 여기 페이지는 문제가 없고..

엑셀버튼이 있는 페이지에서 처리가 제대로 되지 않았을 가능성이 높습니다.

(체크한 것의 번호만 넘어와야 하는데, 그렇지 않은 것으로 보입니다.)
지금 $i 해보니까 1로 나오고 $od_id[]를 $od_id로 바꾸고 echo $od_id 하니까 선택된거 정확히 나오네요 체크값은 정확히 들어오는거 같아요
$od_id[] 와 $od = implode(", ", $od_id); 이게 문제가 없는건가요? 뭔가 요 사이에서 난리가 난거 같은데 ㅠㅠ
$i를 echo 시켜보면 아주 정확히 나와요 2개하면 2 3개하면 3이 나와요
2018-05-02 (수) 20:51:39
print_r2($od_id);
를 하여, 선택된 값만 나온다면 제대로 나오는 것이고,

선택하지 않은 값들 까지 나온다면.. 엑셀버튼이 있는 전페이지의 문제일 가능성이 높습니다.
2018-05-02 (수) 20:59:17
$od = implode(", ", $od_id);

implode() 는 배열의 각 값들을 해당 기호로 하나의 단일 스트링으로 만들어주는 함수입니다.
이 구문에 별 문제는 없어 보이는데..
혹시나 한다면.. for 문 전에
$od_id = array();
로 배열값을 초기화 시켜주거나 ..
$od_id 가 아닌 다른 이름을 사용해보면 어떨까 합니다.

$arr_od = array();
for ($i=0; $i<count($_POST['chk']); $i++) {

$k = $_POST['chk'][$i];
$arr_od[] = $_POST['od_id'][$k];

}
$od = implode(", ", $arr_od);
echo $od; exit;
와오아와오아 $od_id = array(); 하니깐 진짜 됐어요 너무 감사해요 너무너무
궁금한게 있는데요 $od_id = array(); 하기 전에는 주문번호 이름 전화번호가 한글로 잘 나왔는데요 $od_id = array(); 하니까 깨져서 나오네요 이건 해결 못할까요?
2018-05-02 (수) 21:07:25
$od_id 변수가 기존에 다른 어딘가에서 사용중인 변수일 가능성과 연관이 있을 수도 있습니다.

다른 이름의 변수로 해보셨으면 합니다.

$arr_od = array();
for ($i=0; $i<count($_POST['chk']); $i++) {

$k = $_POST['chk'][$i];
$arr_od[] = $_POST['od_id'][$k];

}
$od = implode(", ", $arr_od);
아니에요 해결했어요 정말 감사합니다 ㅠㅠ 정말 정말요 말로 표현할 수 없을만큼 감사합니다 정말 행복한 하루되시고 한주되시고 꼭 로또 되세요~!

넘기기전 input

<input type="checkbox" class="chk" name="chk[]" value="<?=$row['od_id'] ?>" title="선택">

Copy
<?
header('Content-Type: application/vnd.ms-excel; charset=utf-8');
header("Content-Disposition: attachment; filename=file.xls");
header("Content-Description: PHP5 Generated Data");

include "_common.php";

    $check = $_POST['chk'];
    $od = implode(", '", $check);
    $where = "WHERE od_id IN('{$od}')";

?>
<table border="1">
    <tr>
        <th>주문번호</th>
        <th>이름</th>
        <th>전화번호</th>
    </tr>
    <?
        $que = sql_query("SELECT * FROM {$g5['g5_shop_order_table']} $where order by od_id");
        while($row = sql_fetch_array($que)) {
    ?>
    <tr>
        <td style='mso-number-format:\@;'><?=$row['od_id']?></td>
        <td><?=$row['od_b_name']?></td>
        <td style='mso-number-format:\@;'><?=$row['od_tel']?></td>
    </tr>
    <?
        }
    ?>
</table>

답변에 대한 댓글 3개

와 그렇게 하니까 진짜 되네요 ㅠㅠ 너무 감사합니다 다만
<input type="checkbox" name="chk[]" value="<?php echo $i ?>" id="chk_<?php echo $i ?>">
이게 기존거인데 만약 위에 주신것처럼 바꿔도 기존 기능인 수정이나 삭제에 문제는 없나요?
해결 됐어요 너무너무 감사합니다 복받으실 거에요 너무 감사합니다 행복한 하루되세요 ㅠㅠ
모르죠???? 소스를 봐야 알죠... checkbox 가 영향을 주고 있는지 없는지?

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