이벤트에서 관련상품에서 array로 저장이 되어요. 채택완료

영카트 g5_shop_event_item 테이블에 qty 항목을 추가하여 숫자를 같이 저장하려고 합니다.

이벤트에서 관련상품을 불러오고 input 폼을 이용해서 숫자를 저장하려고 하는데

계속 array로 저장이 되어요.ㅜㅜ

하단의 feventform_check 스크립트와 관련이 있는 것 같은데, 고수님들 도움 부탁 드립니다.

빨간부분을 추가하였어요.

itemeventform.php  파일내 소스코드입니다.

<?

    $sql = " select b.it_id, b.it_name, qty
                from {$g5['g5_shop_event_item_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
                where a.ev_id = '$ev_id' ";
    $res_item = sql_query($sql);

?>

<section class="compare_right">
                <h3>등록된 상품</h3>
                <span class="srel_pad"></span>
                <div id="reg_item_list" class="srel_sel">
                    <?php
                    if( $res_item ) {
                    for($i=0; $row=sql_fetch_array($res_item); $i++) {
                        $it_name = get_it_image($row['it_id'], 50, 50).' '.$row['it_name'];
                        
                        if($i==0)
                            echo '<ul>';
                    ?>
                        <li>
                                                       
                            <div class="list_item">
                            <?php echo $it_name; ?><br>
                            <input type="text" name="it_id[]" value="<?php echo $row['it_id']; ?>"><br>
                            <input type="text" name="qty[]" value="<?php echo $row['qty']; ?>"> //이부분을 추가 하였습니다.
                            </div>
                            <div class="list_item_btn"><button type="button" class="del_item btn_frmline">삭제</button></div>
                        </li>
                    <?php
                    }   // end for
                    }   // end if
                    if($i > 0)
                        echo '</ul>';
                    else
                        echo '<p>등록된 상품이 없습니다.</p>';
                    ?>
                </div>
            </section>

function feventform_check(f)
{
    var item = new Array();
    var ev_item = it_id = "";

    $("#reg_item_list input[name='it_id[]']").each(function() {
        it_id = $(this).val();
        if(it_id == "")
            return true;

        item.push(it_id);
    });

    

    if(item.length > 0)
        ev_item = item.join();

    $("input[name=ev_item]").val(ev_item);

    <?php echo get_editor_js('ev_head_html'); ?>
    <?php echo get_editor_js('ev_tail_html'); ?>

    return true;
}

itemeventformupdate.php  부분

    for($i=0; $i<$count; $i++) {
        $it_id = isset($item[$i]) ? $item[$i] : '';
        if($it_id) {
            $sql = " insert into {$g5['g5_shop_event_item_table']}
                        set ev_id = '$ev_id',
                            it_id = '$it_id',
                            qty = '$qty' ";
            sql_query($sql);
        }
    }

답변 3개

채택된 답변
+20 포인트

   qty = '$qty' "; ==>    qty = '{$qty[$i]}' ";

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

답변에 대한 댓글 3개

와 너무 잘됩니다. 균이님 감사드려요~ㅜㅜ
균이님 질문 하나 더 드려도 될까요?
qty 폼의 값이 저장은 되는데 처음 등록할때는 저장이 안되고 저장 후 한번 더 수정해야 나타나요.
그래서 itemeventsearch.php 파일에서
$list .= '<input type="text" name="qty[]" value="'.$row['qty'].'">';
이 부분을 추가하였는데요. 잘 안되네요.
qty 값이 등록할 때 폼이 보이고 바로 저장되게 하려면, 어디를 수정해야 될까요?
도움 부탁 드려요.ㅠ



for($i=0;$row=sql_fetch_array($result);$i++) {
if($w == 'u') {
$sql2 = " select count(*) as cnt from {$g5['g5_shop_event_item_table']} where ev_id = '$ev_id' and it_id = '{$row['it_id']}' ";
$row2 = sql_fetch($sql2);
if ($row2['cnt'])
continue;
}

$it_name = get_it_image($row['it_id'], 50, 50).' '.$row['it_name'];

$list .= '<li>';
$list .= '<input type="text" name="it_id[]" value="'.$row['it_id'].'">';
$list .= '<input type="text" name="qty[]" value="'.$row['qty'].'">';
$list .= '<div class="list_item">'.$it_name.'</div>';
$list .= '<div class="list_item_btn"><button type="button" class="add_item btn_frmline">추가</button></div>';
$list .= '</li>'.PHP_EOL;
}
if ($row2['cnt'])
continue; <===이미 등록 되어있으면 <추가> 부분이 나오지 않게하라는 것이니 나올 수가 없을뿐 아니라

$row['qty'] <=== $row는 item_table애서 추출하여 온 것을 출력하는 것이니 이벤트 테이블 값이 나올 수가 없습니다

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

대략적인 코드로 테스트되지 않았습니다.

적당히 참조해보세요

itemeventform.php

Copy
<input type="hidden" name="ev_qtys" value="">
Copy
function feventform_check(f)
{
    var item = new Array();

    var qtys = new Array();

    var qty_num = "";
    var ev_item = it_id = "";

    $("#reg_item_list input[name='it_id[]']").each(function() {
        it_id = $(this).val();
        if(it_id == "")
            return true;

        item.push(it_id);

 

        var qty = $(this).siblings('input[name="qty[]"]');

        qtys.push(qty.val());
    });
    

    if(item.length > 0) {
        ev_item = item.join();

        qty_num = qtys.join();

        $("input[name=ev_item]").val(ev_item);

        $("input[name=ev_qtys]").val(qty_num);

    }

    <?php echo get_editor_js('ev_head_html'); ?>
    <?php echo get_editor_js('ev_tail_html'); ?>

    return true;
}

itemeventformupdate.php

Copy
// 이벤트 상품등록

    $item = explode(',', $ev_item);

    $qtys = explode(',', $ev_qtys);

    $count = count($item);

 

    for($i=0; $i<$count; $i++) {

        $it_id = isset($item[$i]) ? $item[$i] : '';

        $qty = isset($qtys[$i]) ? $qtys[$i] : '';

        if($it_id) {

            $sql = " insert into {$g5['g5_shop_event_item_table']}

                        set ev_id = '$ev_id',

                            it_id = '$it_id',

                            qty = '$qty' ";

            sql_query($sql);

        }

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

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

안녕하세요

Copy
<input type="text" name="qty" value="<?php echo $row['qty']; ?>"> //이부분을 추가 하였습니다.

로 해보세요

name안에 변수는 숫자형태로만 받게 하려면 일반 변수(배열형태아님)로 선언해서 받으셔야합니다.

저부분을 저렇게 쓰고 싶다면 받는 쪽에서 $qty[0] 으로 받아서 사용하시면 첫번째 배열항목으로 들어가 사용할수 있습니다. 사용하시기에 편한걸로 사용하시면될것 같네요

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

답변에 대한 댓글 1개

답변 감사합니다. 말씀하신대로 하면 array로 저장은 안되지만 한가지 값으로만 저장이 되어요. 각각 1,2,3 이렇게 넣으면 처음에 넣은 1로만 저장이 됩니다.

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

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

로그인
🐛 버그신고