Почему, когда я добавляю два целых числа, PHP возвращает неверный результат (6 + 7 = 1)? - PullRequest
0 голосов
/ 30 октября 2009

У меня есть две переменные:

$qty = 7;
$_POST['qty'] = 6;

var_dump($qty, $_POST['qty']); // both vars are integers
$_SESSION['qty'] = $qty + $_POST['qty'];
echo '='.$_SESSION['qty'];

Возвращает:

int(7) int(6) =1 

(int)$qty, (int)$_POST['qty'] не решает проблему.

Что я делаю не так?

Обновление:

... intval($qty) + intval($_POST['qty']);

не помогает.

И я заметил еще одну деталь. Проблема только в том случае, если $ _SESSION ['qty']> = 10:

$_SESSION['qty'] = $qty + $_POST['qty']; // $qty = 3, $_POST['qty'] = 6

Вернуть хороший результат ($ _SESSION ['qty'] = 9).

решаемые

Спасибо всем за ваши ответы. Но проблема более не актуальная (это была проблема с сервером). В любом случае +1 ко всем.

Ответы [ 5 ]

10 голосов
/ 30 октября 2009

Ваш $ _SESSION неявно инициализируется где-то как строка

$_SESSION = 'blah';

$_SESSION['qty'] = 13;
var_dump($_SESSION['qty']); // gives "1"
1 голос
/ 30 октября 2009

Я бы напечатал_r ($ _ SESSION), чтобы увидеть, что это такое.

1 голос
/ 30 октября 2009

То, что вы делаете с (int) - это приведение переменной, а не ее преобразование. Вы должны использовать intval($var) вместо.

См. PHP: целые числа .

1 голос
/ 30 октября 2009

Что это тебе дает?

$localQty = 7;
$_POST['qty'] = 6;

$_SESSION['qty'] = ($localQty + $_POST['qty']);
var_dump($_SESSION['qty']);

Правильно ли вы инициализируете свою сессию с помощью session_start () в начале скрипта?

1 голос
/ 30 октября 2009

Очень странно, у меня никогда не было таких проблем. Если вы явно используете целочисленные значения в арифметической операции? (Не то же самое, что приведение к целому числу)

$_SESSION['qty'] = (intval($qty) + intval($_POST['qty']));

Вы пытались использовать только свои собственные переменные и не указывать значение POST вне операции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...