스크립안에 for문을 사용했는데 결과가 맞질않네요.

Copy
"items": [
    {
        "display_name"  : '<? echo $pname; ?>',
        "sku"            : '<? echo $prod_id; ?>'
    },
    {
        "display_name"  : '<? echo "Poor"; ?>',
        "sku"            : '<? echo "1234"; ?>',
    }
],


쇼핑카트에 있는 상품을 출력하기위해서 매뉴얼로 위처럼 만들어주면 아래처럼 결과가 잘 나옵니다.

        "items": {
            "4D5E6F": {
                "display_name": "Poor Product Ever",
                "sku": "4D5E6F"
            },
            "1A2B3C": {
                "display_name": "Best Product Ever",
                "sku": "1A2B3C"
            }
        },

그래서 아래처럼 스크립안에 php for문을 써서 만들어 보았는데 2번째 아이템만 출력이 되네요... 뭐가 잘못된건지 아무리봐도 알지못하겠습니다.

아시는분 답변주시면 감사하겠습니다.

 

Copy
<?php

echo '"items": [';

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

        $pname = $_SESSION['cart'][$i][0];

        $prod_id = $_SESSION['cart'][$i][1];

 

        echo '{';

        echo '"display_name"   : "'.$pname.'",';

        echo '"sku"            : "'.$prod_id.'"';

 

        if($i < $totalRows){

            echo '},';

        } else if($i == $totalRows -1 ){

            echo '}';

        }

    }

echo '],';

?>
|

답변 2개 / 댓글 5개

답변감사합니다. 스크립트에 넣을때 이렇게 하니까 에러가 나는데 제가 맞게 한건가요?

 

var ar = <?php echo json_encode($encoded)?>;

답변에 대한 댓글 2개

질문자님이 원하는 방식은 json포맷이 아닙니다. 배열을 그대로 json_encode했을때 에러가 안날텐데..원하시는대로 억지로 바꿔넣다보니 에러가 나는거거든요.
일단 var ar = '<?php echo json_encode($encoded)?>'; 이렇게 하시면 에러는 안나실겁니다.
예 여전히 에러는나지만 한가지 궁금한게있습니다. 제가 아래와같은 형식으로 데이타를 넘겨줘야합니다.

전이게 json형식인줄 알았는데 아니라고 하시니 한번 설명부탁드릴게요...

이렇게 하면 아무문제없이 잘 전달됩니다.

맨마지막 부분이 제가 요청한 부분입니다.

상품이 한개만 있으면 이대로 괜찮지만 쇼핑카트에는 제품이 여러게가 들어갈 수 가있어 함께 전달하려면 이 스크립트안에 for 문을 이용해 전달하려고 한겁니다.

세크리님이 알려주신 부분이 훨씬 손쉬워보여서 마음에 듭니다. 그런데 어찌하여 에러가 나는지 제가 설명을 잘못해서 문제가 생긴거지 시간되시면 한번봐주시면 감사하겠습니다.


<script>

firm.checkout({

//shipping contact
"shipping": {
"name": {
"first" : '<? echo $ship_fname; ?>',
"last" : '<? echo $ship_lname; ?>'
},
"address": {
"line1" : '<? echo $ship_address; ?>',
"line2" : '',
"city" : '<? echo $ship_city; ?>',
"state" : '<? echo $ship_state; ?>',
"zipcode": '<? echo $ship_zip; ?>'
},
"email" : '<? echo $ship_email; ?>',
"phone_number" : '<? echo $ship_dphone; ?>'
},


// cart
"items": [{
"display_name" : '<? echo $pname; ?>',
"sku" : '<? echo $prod_id; ?>',
"unit_price" : <? echo sprintf("%0.2f",$unit_price); ?>,
"qty" : <? echo $qty_num; ?>,
"item_image_url" : '<? echo "https:" . $wLimg; ?>',
"item_url" : '<? echo $firm_product_url; ?>'
}],
...
아래처럼하면 안되나요?
<?php
$array = array();
for($i=0; $i<$totalRows; $i++) {
    $pname = $_SESSION['cart'][$i][0];
    $prod_id = $_SESSION['cart'][$i][1];
 
    $array['items'][] = array(
        'display_name'=>$pname,
        'sku'=>$prod_id
    );
}
echo json_encode($array);

?>

 

자바스크립트에 넣을떄는 아래처럼..

<script> 
var ar = <?php echo json_encode($array) ?>;
</script>

답변에 대한 댓글 3개

예 아래와같이 결과값이 나옵니다.

{"items":[{"display_name":"559","sku":"1"},{"display_name":"388","sku":"1"}]}

여기서 문제는 처음 시작할때 { 과 끝에 }을 없애야하고 ] 뒤에 , 가 붙어야합니다. 그래야 제대로 출력이 됩니다. 즉 이렇게 출력이 되면 됩니다.

"items":[
{
"display_name":"559",
"sku":"1"
},
{
"display_name":"388",
"sku":"1"
}
],

알려주신것처럼 해서 이게 가능할까요?
요렇게해보세요

$array = array();
for($i=0; $i<$totalRows; $i++) {
$pname = $_SESSION['cart'][$i][0];
$prod_id = $_SESSION['cart'][$i][1];

$array[]=array('display_name'=>$pname,"sku"=>$prod_id);
}
$encoded = '"items":'.json_encode($items);
echo $encoded;
답변감사합니다. 스크립트에 넣을때 이렇게 하니까 에러가 나는데 제가 맞게 한건가요?



var ar = <?php echo json_encode($encoded)?>;

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