Проблема со сложением извлекаемых сумм из валютной и рублевой таблиц mysql

Гриша К.

Новичок
Проблема со сложением извлекаемых сумм из валютной и рублевой таблиц 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');)

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');)

PHP:
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;
 }
 

baev

‹°°¬•
Команда форума
Смотрите, как у Вас формируется массив $cart.

И откуда в нём берётся $cart['0']
 

Гриша К.

Новичок
Я наверное не совсем вас понял.
Я приведу пример всей работы электронной корзины:
Вот например происходит get_запрос cart?sealy=$id, и происходит добавление элементов в телегу:
PHP:
@ $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
PHP:
$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;
PHP:
echo $HTTP_SESSION_VARS['total_price'];
 

baev

‹°°¬•
Команда форума
Вот тут:

function calculate_price($cart)

переменную $cart Вы откуда берёте?
 

Гриша К.

Новичок
Я неправильно написал выше приведенный код, я его отредактировал и ище раз теперь привожу здесь.
Массив $cart используется при создании тележки для покупок, и при передачи данных в функцию function calculate_price($cart) использется параметр $cart.
PHP:
@ $sealy = $HTTP_GET_VARS['sealy'];

if($sealy)
{
//Этот блок кода создает тележку (массив $cart)
if(!isset($HTTP_SESSION_VARS['cart']))
    {
      $HTTP_SESSION_VARS['cart'] = array();
      $HTTP_SESSION_VARS['items'] = 0;
      $HTTP_SESSION_VARS['total_price'] ='0.00';
    }

//Когда тележка создана, добавляю в нее элементы.
if(isset($HTTP_SESSION_VARS['cart'][$sealy]))
      $HTTP_SESSION_VARS['cart'][$sealy]++;
          else
    $HTTP_SESSION_VARS['cart'][$sealy] = 1;
}
-~{}~ 28.06.05 00:16:

=============================================
Если в функции calculate_price($cart) оставить только извлечение и вывод if ($result) например из влютной таблицы (sealy), то функция выводит результат итоговой суммы без ошибок.
Помогите пожалуйста решить этот вопрос, в php у меня знаний мало, возможно, у кого есть опыт в php, сможет ответить на мой вопрос.
PHP:
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; 
      }  
    }   
  } 
  return $price; 
}
 

baev

‹°°¬•
Команда форума
В массиве элементы нумеруются, начиная с нулевого номера.
Если Вы никаких действий с ключами не проводили, то у Вас и получается, что вот тут:

PHP:
    foreach($cart as $id => $qty)
    {  
      $query = "select price from sealy where id='$id'";
-- первый запрос в цикле имеет вид:

select price from sealy where id='0'
 

Гриша К.

Новичок
Спасибо за ответ.
Я не совсем понимаю вас, потомучто я вижу это так:
иде get-запрос cart.php?sealy=virginia; (virginia = $id)
Получается образно говоря вот так:
PHP:
function calculate_price($cart) 
{ 
  $price = 0.0; 
  if(is_array($cart)) 
  { 
    $conn = db_connect(); 
    foreach($cart as $virginia => 1) 
    {   
      $query = "select price from sealy where id='virginia'"; 
      $result = mysql_query($query); 
       
      //Если запрос из валютной таблицы 
      if ($result) 
      { 
       $item_price_sealy = mysql_result($result, 0, 'price'); 
...
}
И броузер выводит ошибку об этой строчке: $item_price_sealy = mysql_result($result, 0, 'price');
и об этой ... $item_price_sealy = mysql_result($result1, 0, 'price');

Я возможно что-то не так понимаю.
Но результат код выводит верно, но я так и не могу понять почему выводится ошибка и как ее исправить.
 

Profic

just Profic (PHP5 BetaTeam)
курить [m]mysql_query[/m]() на предмет того, что она возвращает и каким образом оно конвертируется в bool
плюс [m]mysql_fetch_assoc[/m]()

хинт: ваша проверка всегда возвращает true
 

Гриша К.

Новичок
Profic спасибо за ответ. Попробую разобраться с вашим ответом на мой вопрос, почитаю по ссылкам.

-~{}~ 28.06.05 10:13:

Вот, что мне посоветовали еще на одном хорошем форуме по php:
Откажись от использования mysql_result - это устарелый вариант.
попробуй:
PHP:
$query = mysql_query("SELECT...");
$result = mysql_fetch_array($query);
//и далее обращаешься как $result['field'];
В результате все работает без ошибок, т.е. есть две таблицы mysql одна содержит товары одной категори в рублях, другая таблица содержит товары другой категории в евро, а функция function calculate_price($cart) извлекает данные из mysql, преобразовывает цены в евро в цены в рублях (умножением на курс евро ЦБ - $eur) и выводит итоговый результат из двух таблиц в рублях.

Вот результат:
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; 
}
 
Сверху