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

SiMM

Новичок
Гриша К., я тебе дал два простых до безобразия примера. Будь добр ознакомиться с ними, разобраться в них и в случае возникновения дальнейших вопросов задавать их внятно и понятно (потому как судя по сказанному нужно к примеру 1 добавить в условиях [m]isset[/m]). К чему ты сейчас приплёл своё "если" - одному богу известно, ибо ни в одном из вышеописанных мной примеров такого "если ... то..." нет и в помине.

-~{}~ 23.06.05 07:10:

> то тогда сервер спрашиват
То тогда выполнится (пример 1) только $x += $a
 

Гриша К.

Новичок
Вот немгоу разобраться с примером alexhemp, если я точно такой использую, то сервер выдает ошибки, если убрать две закрывающиеся скобки, то результат будет 0:

$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;

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

SiMM

Новичок
PHP:
$total_price = 0;
if (isset($_GET['redox'])) $total_price += $_GET['redox'];
if (isset($_GET['emt']))   $total_price += $_GET['emt'];
if (isset($_GET['sealy'])) $total_price += $_GET['sealy'];
Хотя вариант alexhempа и так уже рабочий - но раз до тебя не доходят такие сложные конструкции - делай это простыми (а данный вариант, имхо, отличается куда большей очевидностью и наглядностью).
 

Гриша К.

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

SiMM

Новичок
> если какая-то переменная не вызывается
1. Не "не вызывается", а ей не присвоено какое-либо значение
2. ... то она равна нулю.
3. Прибавление нуля не влияет на сумму (учебник математики для младших классов).

> Но тот, пример который вы привели мне, получается, что он равносилен моомему примеру?
Тому, что вам надо, если я правильно вас понял, и тому, что написал alexhemp (за исключением некоторых мелочей).
 

Гриша К.

Новичок
По матиматеке я мастер, а по PHP опыта и знаний крапаль.
Вам тяжело, понять того человека, который знает очень немного в PHP, вам все кажется очень понятным.

Спасибо большое SIMM за ответы, я попробую днем разобраться с приведенными мне примерами, и потом задам возникшие вопросы.
 

digs

Новичок
Гриша К.
Тебе же привел SiMM вариант номер 1. Нормальный вариант.
А вообще, если не знаешь сколько у тебя будет в дальнейшем переменных, то просто создай массив с их именами и перебирай в цикле.
PHP:
$vars = array("a","b","c");
$x = 0;
foreach($vars as $varname)
  if (isset($HTTP_GET_VARS[$varname])) x += $HTTP_GET_VARS[$varname];
Ну и если какие то переменные в сессиях хранишь, то еще и $_SESSION в этот же цикл прекрутить.

зы. если я вообще правильно понял, что тебе нужно
 

Гриша К.

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

Я применил варинат SiMM к своему.
Я понял что $x += $a, Это $x = $x + $a, и что происходит, потом.
Но когда я применил, это вариант к своему, получается так, что при вызове двух переменных, они не складываются вместе, а выводится сумма последней вызванной переменной.

Если кто-нибудь понимает наприме пример alexhemp, подскажите как применить к моему варинату этот пример и почему варинат SiMM не срабатывает на моем примере.

PHP:
 @ $redox = $HTTP_GET_VARS['redox'];
 @ $emt = $HTTP_GET_VARS['emt'];
 @ $sealy = $HTTP_GET_VARS['sealy'];

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

  if(isset($redox))
   {
// Следующая строка значит, что $total_price += $redox (т.е. функции, которая выводит из базы данных сумму переменной $redox) 
    $HTTP_SESSION_VARS['total_price'] += calculate_price_redox($HTTP_SESSION_VARS['cart_redox']);
   }
   
   if(isset($emt))
   {
    $HTTP_SESSION_VARS['total_price'] += calculate_price_emt($HTTP_SESSION_VARS['cart_emt']);
   }
   
   if(isset($sealy))
   {
    $HTTP_SESSION_VARS['total_price'] += calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']);
   }
 

alexhemp

Новичок
за чем тебе огромные IF?

ПРОСТО СЛОЖИ ТРИ ЧИСЛА!

Если какие-то из них будут равны нулю - измениться ли сумма? - вопрос риторический.

Зачем начинаешь делать сложно, если просто складывать не умеешь?

Самый простой вариант в твоем случае это ОДНА строка.

PHP:
$total_price = floatval($_GET['redox']) +  floatval($_GET['emt']) + floatval($_GET['sealy']);
Итого - общая сумма равная сумме трех значений.
Если значение не задано то floatval вернет 0.

Появление notice можно подавить обернув в isset как я написал в первом своем посте.
 

Гриша К.

Новичок
$x = 0;
if ($a) $x += $a;
if ($b) $x += $b;
if ($c) $x += $c;

В приведенном примере получается, так что если переменные вызываются в порядке $a, $b и $c, то подсчет $x происходит так:
когда вызывается $a, то $x = 0 + $a;
когда вызывается $b, то $x = 0 + $a + $b;
когда вызывается $c, то $x = 0 + $a + $b + $c

но когда я применил этот пример к своему варинату, описанному выше, у меня получается так:
когда вызывается $a, то $x = 0 + $a;
когда вызывается $b, то $x = 0 + $b;
когда вызывается $c, то $x = 0 + $c;

ПОМОГИТЕ ПОЖАЛУЙСТА РАЗОБРАТЬСЯ, ПОЧЕМУ В МОЕМ ПРИМЕРЕ ЭТО ВАРИАНТ НЕ РАБОТАЕТ!

-~{}~ 23.06.05 19:48:

alexhemp подсакжите пожалуйста, как на моем варианте привести ваш пример.
Вот так я применил ваш варинат на своем примере, и когда я поставил floatval перед переменной, то $HTTP_SESSION_VARS['total_price'] получается всегда выводит результат равный 0, если то же самое сделать без floatval, то результат будет считаться правильно, но сервер будет выводит предупрждение, потомучто он не будет понимать, что если переменная не вызвана, то она должна быть равна 0.
Пожалуйста, помогите разобраться на моем варианте скрипта.
PHP:
@ $redox = $HTTP_GET_VARS['redox']; 
@ $emt = $HTTP_GET_VARS['emt']; 
@ $sealy = $HTTP_GET_VARS['sealy']; 

  if(isset($redox)) 
   { 
$HTTP_SESSION_VARS['total_price'] = calculate_price_redox(floatval($HTTP_SESSION_VARS['cart_redox'])) +  calculate_price_emt(floatval($HTTP_SESSION_VARS['cart_emt'])) +  calculate_price_sealy(floatval($HTTP_SESSION_VARS['cart_sealy']));
   } 
    
   if(isset($emt)) 
   { 
    $HTTP_SESSION_VARS['total_price'] = calculate_price_redox(floatval($HTTP_SESSION_VARS['cart_redox'])) +  calculate_price_emt(floatval($HTTP_SESSION_VARS['cart_emt'])) +  calculate_price_sealy(floatval($HTTP_SESSION_VARS['cart_sealy']));
    } 
    
   if(isset($sealy)) 
   { 
    $HTTP_SESSION_VARS['total_price'] = calculate_price_redox(floatval($HTTP_SESSION_VARS['cart_redox'])) +  calculate_price_emt(floatval($HTTP_SESSION_VARS['cart_emt'])) +  calculate_price_sealy(floatval($HTTP_SESSION_VARS['cart_sealy']));
   }
 

SelenIT

IT-лунатик :)
Гриша К.
[size=-1][off]Знаешь анекдот про студентов-медиков, брезгливость и внимательность? Твой случай чем-то похож...[/off][/size]

ВНИМАТЕЛЬНО посмотри какие переменные ты проверяешь, а какие складываешь.
 

Гриша К.

Новичок
Да SelenIT вы правы. Я сам вот так сделал, и все нормально.
СПАСИБО ВСЕМ ЗА ПОМОЩЬ, БЛАГОДАРЯ ТОМУ, ЧТО МНОГО ЛЮДЕЙ ОДНО И ТОЖЕ (ПОЧТИ) ПО РАЗНОМУ ОБЪЯСНЯЛИ, Я РАЗОБРАЛСЯ.

PHP:
@ $redox = $HTTP_GET_VARS['redox']; 
@ $emt = $HTTP_GET_VARS['emt']; 
@ $sealy = $HTTP_GET_VARS['sealy']; 

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

  if(isset($HTTP_SESSION_VARS['cart_redox']); 
   { 
// Следующая строка значит, что $total_price += $redox (т.е. функции, которая выводит из базы данных сумму переменной $redox) 
    $HTTP_SESSION_VARS['total_price'] += calculate_price_redox($HTTP_SESSION_VARS['cart_redox']); 
   } 
    
   if(isset($HTTP_SESSION_VARS['cart_emt']); 
   { 
    $HTTP_SESSION_VARS['total_price'] += calculate_price_emt($HTTP_SESSION_VARS['cart_emt']); 
   } 
    
   if(isset($HTTP_SESSION_VARS['cart_sealy']); 
   { 
    $HTTP_SESSION_VARS['total_price'] += calculate_price_sealy($HTTP_SESSION_VARS['cart_sealy']); 
   }
 
Сверху