Упрощение условий IF, на приведенном примере...

Гриша К.

Новичок
Упрощение условий IF, на приведенном примере...

Есть три переменных $redox, $emt, $sealy.

Когда вызывается одна из трех переменных методом get, то $total_price (суммы) будет равнятся, соответственно, одно из этих переменных (ее сумме).

Если get запрос = cart.php?redox=...,
то $total_price = $redox

Если get запрос = cart.php?emt=...,
то $total_price = $emt

Если get запрос = cart.php?sealy=...,
то $total_price = $sealy

А вот когда вызываются две переменных или все переменные, то $total_price (суммы) будет равнятся сумме тех переменных которые вызваны get запросом,
в результает мне необходимо описывать каждое такое условие при помощи if (условий получается 4), а если будет не 3 переменных а нпример 4,
то все возможные условия которые мне надо будет описать, возрастут в геометрическрй прогрессии.

Если get запрос = cart.php?redox=... и cart.php?emt=...,
то $total_price = $redox + $emt

Если get запрос = cart.php?redox=... и cart.php?sealy=...,
то $total_price = $redox + $sealy

Если get запрос = cart.php?emt=... и cart.php?sealy=...
то $total_price = $emt + $sealy

Если get запрос = cart.php?redox=..., cart.php?emt=... и cart.php?sealy=...,
то $total_price = $redox + $emt + $sealy

Подскажите пожалуйста, как можно упростить эти условия, чтобы при возникновении новых переменных,
описание всех условий не было столь громоздким (если таких услвоий будет 10, то описывать мне предется более 70 условий)


Вот пример кода php?, как я описываю эти условия:
PHP:
Если get запрос = cart.php?redox=..., 
то $total_price = $redox

  if($redox)
   {    
    if(!isset($HTTP_SESSION_VARS['cart_redox']))
     {
      $HTTP_SESSION_VARS['cart_redox'] = array();
      $HTTP_SESSION_VARS['items'] = 0;
      $HTTP_SESSION_VARS['total_price'] ='0.00';
     }
    $HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']);
    $HTTP_SESSION_VARS['items'] = calculate_items_redox($HTTP_SESSION_VARS['cart_redox']);
   }  

Если get запрос = cart.php?emt=...,
то $total_price = $emt
  
  if()
   {
    if(!isset($HTTP_SESSION_VARS['cart_emt']))
     {
      $HTTP_SESSION_VARS['cart_emt'] = array();
      $HTTP_SESSION_VARS['items'] = 0;
      $HTTP_SESSION_VARS['total_price'] ='0.00';
     }
    $HTTP_SESSION_VARS['total_price'] = calculate_price_emt($HTTP_SESSION_VARS['cart_emt']);
    $HTTP_SESSION_VARS['items'] = calculate_items_emt($HTTP_SESSION_VARS['cart_emt']);
   } 

Если get запрос = cart.php?sealy=...,
то $total_price = $sealy

  if($sealy)
   {
    if(!isset($HTTP_SESSION_VARS['cart_sealy']))
    {
       $HTTP_SESSION_VARS['cart_sealy'] = array();
       $HTTP_SESSION_VARS['items'] = 0;
       $HTTP_SESSION_VARS['total_price'] ='0.00';
    }
    $HTTP_SESSION_VARS['total_price'] = calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
    $HTTP_SESSION_VARS['items'] = calculate_items_sealy($HTTP_SESSION_VARS['cart_sealy']);
   }


Если get запрос = cart.php?redox=... и cart.php?emt=...,
то $total_price = $redox + $emt

 if(isset($HTTP_SESSION_VARS['cart_redox']) && isset($HTTP_SESSION_VARS['cart_emt']))
	{
 $HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_price_emt($HTTP_SESSION_VARS['cart_emt']);
 $HTTP_SESSION_VARS['items'] = calculate_items_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_items_emt($HTTP_SESSION_VARS['cart_emt']);
	}
 

Если get запрос = cart.php?redox=... и cart.php?sealy=...,
то $total_price = $redox + $sealy

 if(isset($HTTP_SESSION_VARS['cart_redox']) && isset($HTTP_SESSION_VARS['cart_sealy']))
	{
 $HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
 $HTTP_SESSION_VARS['items'] = calculate_items_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_items_sealy($HTTP_SESSION_VARS['cart_sealy']);
	} 
 

Если get запрос = cart.php?emt=... и cart.php?sealy=...
то $total_price = $emt + $sealy

 if(isset($HTTP_SESSION_VARS['cart_emt']) && isset($HTTP_SESSION_VARS['cart_sealy']))
	{
 $HTTP_SESSION_VARS['total_price'] = calculate_price_emt($HTTP_SESSION_VARS['cart_emt']) +  calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
 $HTTP_SESSION_VARS['items'] = calculate_items_emt($HTTP_SESSION_VARS['cart_emt']) +  calculate_items_sealy($HTTP_SESSION_VARS['cart_sealy']);
	}
 

Если get запрос = cart.php?redox=..., cart.php?emt=... и  cart.php?sealy=...,
то $total_price = $redox + $emt + $sealy

 if(isset($HTTP_SESSION_VARS['cart_redox']) && isset($HTTP_SESSION_VARS['cart_emt']) && isset($HTTP_SESSION_VARS['cart_sealy']) )
	{
 $HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_price_emt($HTTP_SESSION_VARS['cart_emt']) +  calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
 $HTTP_SESSION_VARS['items'] = calculate_items_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_items_emt($HTTP_SESSION_VARS['cart_emt']) +  calculate_items_sealy($HTTP_SESSION_VARS['cart_sealy']);
	}
 

matross

Новичок
Re: Упрощение условий IF, на приведенном примере...

М-да, читай правила форума!!!
 

Romantik

TeaM PHPClub
И ты думаешь есть охота кому-то копать столько кода?
приведи упрощенный пример
 

alexhemp

Новичок
а почему не использовать isset? и просто тупо складывать все 3 переменные.

типа

$redox = isset($_GET['redox']))?floatval($_GET['redox'])):0;
$emt = isset($_GET['emt']))?floatval($_GET['emt'])):0;
$sealy = isset($_GET['sealy']))?floatval($_GET['sealy'])):0;

$total_price = $redox + $emt + $sealy;

А дальше - по аналогии. Не нужно рассматривать "случаи". Нужно как минимум знать что X + 0 = X
 

Гриша К.

Новичок
Спасибо за ответы.
baev имеется ввиду, что сначала был один get-запрос, например cart.php?redox..., потом пользователь зашел на другую страницу, выбрал ссылку, и она передала скрипту например другой get-запрос cart.php?emt..., т.е. get-запросы передаются по очереди и влюбом порядке, в зависимости от выбора пользователя.

alexhemp я пробовал складывать все вместе, но броузер говорил, примерно: что есть лишниие переменные, но как вы написали на примере я понял, я попробую, у меня это будет так?:
@ $redox = isset($HTTP_GET_VARS['redox']);
@ $emt = isset($HTTP_GET_VARS['emt']);
@ $sealy = isset($HTTP_GET_VARS['sealy']);

$HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) + calculate_price_emt($HTTP_SESSION_VARS['cart_emt']) + calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);


А вот простой пример:
Есть три переменные $a, $b и $c:
if ($a)
$x = $a;

if($b)
$x = $b;

if($c)
$x = $c;

------------

if($a && $b)
x = $a + $b;

if($a && $c)
x = $a + $c;

if($b && $c)
x= $b+ $c;

if($a && $b && $c)
x = $a + $b + $c;
 

Гриша К.

Новичок
@ $redox = isset($_GET['redox']))?floatval($_GET['redox'])):0;
@ $emt = isset($_GET['emt']))?floatval($_GET['emt'])):0;
@ $sealy = isset($_GET['sealy']))?floatval($_GET['sealy'])):0;
При таком варианте отображается ошибка о том, что есть лишние скобки, если две закрывающие скобки убрать, то результат равняется 0.
 

baev

‹°°¬•
Команда форума
А Вы скобочки посчитайте.

Кстати, что у Вас произойдёт, если пользователь с третьей страницы опять вернётся на первую и ещё там чего-нибудь закажет?
 

Гриша К.

Новичок
Я посчитал, и сделал вот так, может не правильно:
@ $redox = isset($_GET['redox'])?floatval($_GET['redox']):0;
@ $emt = isset($_GET['emt']))?floatval($_GET['emt'])):0;
@ $sealy = isset($_GET['sealy'])?floatval($_GET['sealy']):0;
В данном случае все get-запросы равны 0.

Я смысол его понял, но у меня не получается сделать так, чтобы броузер понимал, что например когда
PHP:
 if($redox)
{
$HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_price_emt($HTTP_SESSION_VARS['cart_emt']) +  calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
}
при тако варианте все считается нормально, но браузер отображает ошибку. о том, что переменные cart_emt и cart_sealy лишние:
Notice: Undefined index: cart_emt in Z:\home\magazin\www\get_order\cart.php on line 225

Notice: Undefined index: cart_sealy in Z:\home\magazin\www\get_order\cart.php on line 225

Т.е. нужно, чтобы сервер понимал, что когда

вызывается только одна переменная if($redox), то $HTTP_SESSION_VARS['cart_emt'] и $HTTP_SESSION_VARS['cart_sealy'] равны 0.

Есть пользователь с третьей страницы опять вернется на первую и еще там чего-нибудь закажет, при моем варианте все считается как положено.
 

baev

‹°°¬•
Команда форума
Я смысол его понял
-- не верю.

Смысл-то как раз в том, что если переменная не определена, ей присваивается значение 0.

Зачем "гетам" чего-то присваиваете? Вам нужно просто аналогично "разобраться" с переменными сессии.
 

Гриша К.

Новичок
Я использую скрипт из книги,
и эти три переменные описаны там так
@ $redox = $HTTP_GET_VARS['redox'];
@ $emt = $HTTP_GET_VARS['emt'];
@ $sealy = $HTTP_GET_VARS['sealy'];

$HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) + calculate_price_emt($HTTP_SESSION_VARS['cart_emt']) + calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);


Если просто взять вариант alexhemp

$redox = isset($_GET['redox']))?floatval($_GET['redox'])):0;
$emt = isset($_GET['emt']))?floatval($_GET['emt'])):0;
$sealy = isset($_GET['sealy']))?floatval($_GET['sealy'])):0;

$total_price = $redox + $emt + $sealy;

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

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

baev

‹°°¬•
Команда форума
время поджимает, и разбираться во всем приходится самому, поэтому сразу залезаю в середину книги и разбираюсь, а потом смотрю начало
Во-первых, так больше времени потратите.
Во-вторых, раз уж так извращаетесь, смотрите не "в начало книги", а в мануал.

Не понимая смысла того кода, что написали, Вы так и будете по три строчки в день "рожать".

В данном случае все get-запросы равны 0
Ещё раз: Вам в этот код надо не гет-переменные вставлять, а $HTTP_SESSION_VARS.
 

Гриша К.

Новичок
Вы имеете ввиду вот так?:
при таком варианте $HTTP_SESSION_VARS['total_price'] все время равнятеся 0:

PHP:
$HTTP_SESSION_VARS['total_price'] = calculate_price_redox(isset($HTTP_SESSION_VARS['cart_redox']))?(floatval($HTTP_SESSION_VARS['cart_redox'])):0 + calculate_price_emt(isset($HTTP_SESSION_VARS['cart_emt']))?(floatval($HTTP_SESSION_VARS['cart_emt'])):0 + calculate_price_sealy(isset($HTTP_SESSION_VARS['cart_sealy']))?(floatval($HTTP_SESSION_VARS['cart_sealy'])):0;


Про isset я почитал, а про floatval нашел.
Да и когда опыта, нет, то я даже и не предтсавля. что могут быть какие-то такие варинаты,
isset($_GET['redox'])?floatval($_GET['redox']):0;
Мне с покупательской тележкой осталось только, это вопрос решить, и обратиться могу только на форум, вот и пытаюсь, тут узнать ответы на свои вопросы.

-~{}~ 23.06.05 05:33:

Вот есть три переменные:
@ $redox = $HTTP_GET_VARS['redox'];
@ $emt = $HTTP_GET_VARS['emt'];
@ $sealy = $HTTP_GET_VARS['sealy'];

Есть переменная $total_price (которая выводит сумму всех переменных):
PHP:
$HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) +  calculate_price_emt($HTTP_SESSION_VARS['cart_emt']) +  calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
Как вот мне сделать так, чтобы когда get-запросом запрашивалась, одна переменная, то сервер это понимал, и результат выводил например такой:

PHP:
$HTTP_SESSION_VARS['total_price'] = calculate_price_redox($HTTP_SESSION_VARS['cart_redox']) +  0 +  0;
Вот как мне корректно, тупо, сложить три переменных, что если одна из них не вызывалась, то она считалась равной 0.
 

baev

‹°°¬•
Команда форума
Вы имеете ввиду вот так?
Я что неясно написал?

Блин, Вы ж опять -- слепили код не думая, и не понимая, что делаете. Теперь у Вас скобок не хватает. Вы так и будете из-за каждого символа на форум обращаться?
 

Гриша К.

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

Вы не могли бы мне написать правильный код на моем примере, если вы знаете?
Я уже извелся весь, с этим методом тыка.
 

SiMM

Новичок
А вот простой пример:
Есть три переменные $a, $b и $c:
if ($a)
$x = $a;

if($b)
$x = $b;

if($c)
$x = $c;

------------

if($a && $b)
x = $a + $b;

if($a && $c)
x = $a + $c;

if($b && $c)
x= $b+ $c;

if($a && $b && $c)
x = $a + $b + $c;
Вариант 1 (муторный)
PHP:
$x = 0;
if ($a) $x += $a;
if ($b) $x += $b;
if ($c) $x += $c;
Вариант 2 (простой, как две копейки)
PHP:
$x = $a + $b + $c;
PS: в остальную написанную здесь муть въезжать не было никакого желания.
 

Гриша К.

Новичок
Но вот проблема, если условие такое:
if ($a)
$x = $a + $b + $c;

и если get-запрос, например был такой cart?a=..., то
то тогда сервер спрашиват, а откуда у вас взялись в формуле перменные $b и переменные $c, если get-запрос cart?a=....
Вот как дать понять серверу, что если переменные $b и $c не вызывалиьс, то они равняются 0.
 
Сверху