2009-12-31 6 views
0

Предположим, что $ _SESSION ['totalprice'] равно 1200. Однако echo $ totalprice; выходы 1200 и echo $ grandtotal; выходы 66. 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

Как примечание; вы, вероятно, захотите сделать '$ count ++' в конце цикла foreach, в противном случае все ваши элементы имеют одинаковый '$ count'. –

+0

Первое правило: упростить. Что произойдет, если вы закомментируете весь ненужный код (все внутри * if *). Пожалуйста, также опубликуйте его таким образом, так как теперь вы включаете кучу кода, который не имеет ничего общего с вашей проблемой, но для этого все еще требуется несколько минут. – Wim

+1

Затем попробуйте 'var_dump()' вместо 'echo', он даст вам тип данных, а также значение, поэтому, если проблема в том, что есть некоторые десятичные части для ваших переменных, как предполагает 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 даст вам правильное значение. –

Смежные вопросы