Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема со сложением извлекаемых сумм из mysql


Автор: Гриша 27.6.2005, 23:04
Проблема со сложением извлекаемых сумм из валютной и рублевой таблиц mysql.

Подскажите пожалуйста решение.
Для вывода итоговой суммы в покупательской тележки, я использую функцию calculate_price($cart), которая извлекает и преобразовывает данне из двух таблиц, рублевой и валютной.

Есть две таблицы в базе данных, одна рублевая, другая валютная.
Для того, чтобы общий результат выводился в рублях, я сделал условие, при котором,
если данные извлекаются (if ($result)) из валютной таблицы (from sealy), то эти данные умножаются на курс ЦБ ($eur) данной валюты,
если данные извлекаются (if ($result1)) из рублевой таблицы (from bedding), то результат так и выводится.

Приведенный ниже код результат выводит верно, но также броузер выводит сообщение об ошибке:
Warning: Unable to jump to row 0 on MySQL result index 2 in Z:\home\magazin\www\issue_order\magazin_fns.php on line ($item_price_sealy = mysql_result($result, 0, 'price') smile

Warning: Unable to jump to row 0 on MySQL result index 5 in Z:\home\magazin\www\issue_order\magazin_fns.php on line ($item_price_sealy = mysql_result($result1, 0, 'price') smile


Код

function calculate_price($cart) 
{ 
  $price = 0.0; 
  if(is_array($cart)) 
  { 
    $conn = db_connect(); 
    foreach($cart as $id => $qty) 
    {   
      $query = "select price from sealy where id='$id'"; 
      $result = mysql_query($query); 
       
      //Если запрос из валютной таблицы 
      if ($result) 
      { 
       $item_price_sealy = mysql_result($result, 0, 'price'); 
       //Итоговая сумма равана цена из базы данных * на количество запрошенного товара * курс евро ЦБ 
       $price +=$item_price*$qty*$eur; 
      }       

      $query1 = "select price from bedding where id='$id'"; 
      $result1 = mysql_query($query1); 

      //Если запрос из рублевой таблицы 
      if ($result1) 
      { 
       $item_price = mysql_result($result1, 0, 'price'); 
       //Итоговая сумма равана цена из базы данных * на количество запрошенного товара 
       $price +=$item_price*$qty; 
      } 
    }   
  } 
  return $price; 
}

Добавлено @ 23:06
smile Я приведу пример всей работы электронной корзины:
Вот например происходит get_запрос cart?sealy=$id, и происходит добавление элементов в телегу:

Код

@ $sealy = $HTTP_GET_VARS['sealy']; 

if($sealy) 
{ 
Есль get-запроса не было то телега пуста 
if(!isset($HTTP_SESSION_VARS['cart'])) 
    { 
      $HTTP_SESSION_VARS['cart'] = array(); 
      $HTTP_SESSION_VARS['items'] = 0; 
      $HTTP_SESSION_VARS['total_price'] ='0.00'; 
    } 
Если прошол get-запрос то телега увеличивается 
if(isset($HTTP_SESSION_VARS['cart'][$sealy])) 
      $HTTP_SESSION_VARS['cart'][$sealy]++; 
          else 
    $HTTP_SESSION_VARS['cart'][$sealy] = 1; 
}


А вот идет условие прикотром $total_price выводит результат функции calculate_price которая выводит и извлекает данные из двух таблиц mysql

Код

$HTTP_SESSION_VARS['total_price'] = 0; 
$HTTP_SESSION_VARS['items'] = 0; 

   if(isset($HTTP_SESSION_VARS['cart'])) 
   { 
    $HTTP_SESSION_VARS['total_price'] += calculate_price($HTTP_SESSION_VARS['cart']); 
    }

И вот например так выводится итоговый результат в браузере
Код

global $HTTP_SESSION_VARS;

echo $HTTP_SESSION_VARS['total_price'];

Автор: Opik 27.6.2005, 23:50
Откажись от использования mysql_result - это устарелый вариант.
попробуй:
Код

$query = mysql_query("SELECT...");
$result = mysql_fetch_array($query);
//и далее обращаешься как $result['field'];

Автор: Гриша 28.6.2005, 07:30
Opik спасибо за ответ, я понял что вы имеете ввиду, я попробую. О результатах напишу.

Автор: Гриша 28.6.2005, 09:38
Opik, спасибо большое вам за помощь, все работает хорошо. Еще на одном хорошем форуме по php мне так и не дали удовлитворительного ответа.
Вот результат:
Код

function calculate_price($cart) 
{ 
  $price = 0.0; 
  if(is_array($cart)) 
  { 
    $conn = db_connect(); 
    foreach($cart as $id => $qty) 
    {   
      $query = mysql_query("select price from sealy where id='$id'");
      $result = mysql_fetch_array($query);
           
      //Если запрос из валютной таблицы 
      if ($result) 
      { 
       $item_price_sealy = $result['0'];
       //Итоговая сумма равана цена из базы данных * на количество запрошенного товара * курс евро ЦБ 
       $price +=$item_price*$qty*$eur;
      }       

      $query1 = mysql_query("select price from bedding where id='$id'");
      $result1 = mysql_fetch_array($query1);

      //Если запрос из рублевой таблицы 
      if ($result1) 
      { 
       $item_price = $result1['0']; 
       //Итоговая сумма равана цена из базы данных * на количество запрошенного товара 
       $price +=$item_price*$qty; 
      } 
    }   
  } 
  return $price; 
}

Автор: Opik 28.6.2005, 13:36
Гриша
Хм, вот это что?
Код

$result1['0'];
первый элемент массива? тогда разумнее так:
Код

$result1[0];
а удобнее так:
Код

$result1['price'];

Цитата
Opik, спасибо большое вам за помощь, все работает хорошо.

имхо лучше слова на свете smile
Добавлено @ 13:38
Гриша
и да, кстати, эти 2 запроса можно объединить.
рой в сторону LEFT JOIN а по поводу одинаковых полей - AS

Автор: Гриша 29.6.2005, 17:12
Opik, спасибо, такой вариант нагляднее $result1['price'], я им воспользуюсь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)