Задать вопрос

Почему скрипт неправильно складывает массив?

Есть код:
$summa=0;
$tech = mysql_query("SELECT id FROM tech WHERE tech_cat='$cat_id'   AND status='normal'");
while($techs = mysql_fetch_array($tech)){
    $tech_id=$techs['id'];
    $kolsite = mysql_query("SELECT SUM(sum) FROM remont_tech WHERE tech_id='$tech_id'");
    $kolsiter = mysql_fetch_array($kolsite);
    $summa+=$kolsiter[0];
}


Выводится сумма в зависимости от $cat_id!!

В программе 4 категорий (Компьютеры, принтеры, картриджи, мониторы)
В 3-ех категориях сумму проделанных работ вычисляет правильно, а в принтерах вместо 4070 руб, показывает 10003769 Руб.

В базе данных тип стоит INT.

Может сталкивались с такими казусами?
  • Вопрос задан
  • 2871 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А если так? Полностью замените свою подпрограмму на:
$tech = mysql_query("SELECT SUM(`rt`.`sum`) ".
                    "    FROM `tech` AS `t` ".
                    "        INNER JOIN `remont_tech` AS `rt` ON `t`.`id` = `rt`.`tech_id` ".
                    "    WHERE `t`.`tech_cat` = '".mysql_real_escape_string($cat_id)."' ".
                    "        AND `t`.`status` = 'normal'");
if ($techs = mysql_fetch_array($tech))
    $summa = $techs[0];
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
IlyasMasirov
@IlyasMasirov
Попробуйте поменять запрос на:
"SELECT SUM(remont_tech.sum)
FROM tech
INNER JOIN remont_tech ON remont_tech.id = tech.tech_cat 
WHERE tech_cat= ".$cat_id."  AND status='normal'"

и посмотрите, что получится
Ответ написан
@VeMax
Хотя ответ был уже дан, хочу обратить внимание на подстановку параметров в запрос. Ваш метод позволяет злоумышленнику выполнять произвольные запросы к вашей БД под вашим пользователем.

Так же хочу заметить, что вы используете устаревшее расширение (вроде начиная с 5.5) и возможно его когда то удалят. Обратите внимание на PDO_MySQL. Это позволите решить обе проблемы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы