2009-12-31 5 views
0

$ _SESSION [ 'totalprice']이 1200이라고 가정 해 보겠습니다. echo $ totalprice; 1200을 출력하고 echo $ grandtotal; 총합은 1265이어야합니다.

여기서 내가 뭘 잘못하고 있니?

$totalprice = $_SESSION['totalprice']; 
$shipping= 65; 

if (count($_SESSION['cart'])){ 
$count = 1; 
foreach ($_SESSION['cart'] as $PID => $row){ 
    echo "<p class='padnmgn'><b>". $row['count'] . " " . $row['name'] . " @ " . $row['price']."</b></p><br/>\n"; 
    echo "<input type='hidden' name='item_name_".$count."' value='".$row['name']."'/>\n"; 
    echo "<input type='hidden' name='item_quantity_".$count."' value='".$row['count']."'/>\n"; 
    echo "<input type='hidden' name='item_price_".$count."' value='".$row['price']."'/>\n"; 
    echo "<input type='hidden' name='item_currency_".$count."' value='NOK'/>\n"; 
    echo "<input type='hidden' name='ship_method_name_".$count."' value='Posten'/>\n"; 
    echo "<input type='hidden' name='ship_method_price_".$count."' value='65.00'/>\n"; 

} 
} 
$grandtotal = $totalprice + $shipping; 

echo $totalprice; 
echo $grandtotal; 
+1

참고 사항. foreach 루프가 끝날 때'$ count ++ '를하고 싶을 것이다. 그렇지 않으면 모든 아이템들이 같은'$ count'를 갖는다. –

+0

첫 번째 규칙 : 단순화. 불필요한 코드 (* if * 안에있는 모든 것)를 주석 처리하면 어떻게됩니까? 그런 식으로 게시하십시오. 이제는 문제와 관련이없는 일련의 코드가 포함되어 있지만 아직까지는 몇 분 정도 걸립니다. – Wim

+1

다음으로,'echo' 대신'var_dump()'를 시도해보십시오. 데이터 타입과 값을 제공합니다. Safraz Ahmed가 암시 하듯이, 변수에 소수 부분이있는 것이 문제라면, 그. – Wim

답변

1

이 시도 :

$grandtotal = ((int) $totalprice) + $shipping; 
+0

여전히 66. – shin

+0

@shin을 출력합니다 : 세션의 총 가치가 어딘가에서 변경 될 가능성이 큽니다. – Sarfraz

+0

확인해 보겠습니다. 감사. – shin

0

당신에게 $totalprice 내부의 값이 실제로 정수 확실하고 당신은 또한에 도착하기 전에이 수정되지 않는 것 확신? 추가하기 바로 전에 var_dump($totalprice);을 시도해보고 그 시점에 실제로 어떤 가치가 있는지 확인하십시오.

당신이 기대하는 값을 가지고 있다면, 당신은 명시 적으로 제대로 작동하려면 계산을 위해 정수로 캐스팅해야합니다, 그래서 등 (int)$totalprice + $shipping; 예를 들어

같은 수

<?php 
    $totalprice = "1200blahblah"; 
    $shipping = 65; 
    $grandtotal = (int)$totalprice + $shipping; 
    echo $grandtotal; // still prints "1265" 
?> 
+0

문자열로 표시합니다 : string (8) "1,072.00". 그러나 내가 $ newtotalprice = (int) $ totalprice를 사용하면; var_dump ($ newtotalprice); 그것은 int (1)을 보여줍니다. – shin

+0

출력은 1, (쉼표) 072. (점) 00입니다. 그것은 문제의 원인입니까? – shin

+0

네, 그게 당신 문제입니다. PHP는 문자열을 정수로 변환하려고 시도하기 때문에 ","문자 (","를 숫자로 변환 할 수 없기 때문에)를 치기 전에 "1"을 사용합니다. 이것이 65 + 1 = 66을하는 이유입니다. 문자열에서 서식을 제거하여 원하는 숫자 만 입력하면됩니다. 그러면 ","문자가 제거됩니다. $ totalprice = str_replace (',', '', $ totalprice); 그러면 (int) $ totalprice가 올바른 값을줍니다. –

관련 문제