Калькулятор цены на основе Количество

Я пытаюсь создать простой скрипт для добавления на мой html-сайт.

Мне нужно это, чтобы рассчитать цену, основанную на количестве, которое вводит пользователь.

Например, значение 1-1000 будет умножено на 1.50 и отобразится, 1001-5000 умножено на 1,20 и отобразится, 5001-10000, умноженное на 1 и отображаемое, и любое число выше, которое отобразит сообщение об ошибке типа «Должно быть ниже 10000 ».

Я пытался сделать это на php без успеха.

    Вы можете использовать, if для проверки хранилища и расчета рассчитанного значения:

     if($input <= 1000) { echo $input * 1.5; } elseif($input <= 5000) { echo $input * 1.2; } elseif($input <= 10000) { echo $input; } else { echo "Must be below 10000"; } 

    Вы можете найти переключатель оператора очень полезным ( Switch in PHP ). Что-то вроде этого:

     ... switch ($quantity) { case (($quantity >= 1) && ($quantity <= 1000)): $multiplicator = 1.5; echo $quantity * $multiplicator; break; case (($quantity >= 1001) && ($quantity <= 5000)): $multiplicator = 1.2; echo $quantity * $multiplicator; break; case (($quantity >= 5001) && ($quantity <= 10000)): $multiplicator = 1.2; echo $quantity * $multiplicator; break; case ($quantity > 10000): echo 'Quantity must be less then 10000!'; break; } .... 

    Отредактировано: еще один вариант с использованием цикла:

     ... $limits_array = array( 0 => array( 'min' => 1, 'max' => 1000, 'mul' => 1.5, ), 1 => array( 'min' => 1001, 'max' => 5000, 'mul' => 1.2, ), 2 => array( 'min' => 5001, 'max' => 10000, 'mul' => 1, ), ); foreach ($limits_array as $limits) if (($quantity >= $limits['min']) && ($quantity <= $limits['max']) { echo $quantity * $limits['mul']; break; } if ($quantity > $limits['max']) echo 'Quantity must be less then 10000!'; ... 

    Обратите внимание, что после последнего элемента value foreach ($ value – это общее имя для него, это ограничение $) все еще сохраняет последний элемент из массива. Взгляните на скобки.

    Вместо определения каждого условия в выражении IF я бы предложил определить константы для каждого этапа:

     <form action="" method="post"> <input type="text" name="qnt" /> <input type="submit" /> </form> <?php define('MIN_STAGE', 1); define('MAX_STAGE', 3); define('STAGE_1_MIN', 0); define('STAGE_1_MAX', 1000); define('STAGE_1_MULTIPLIER', 1.50); define('STAGE_2_MIN', STAGE_1_MAX); define('STAGE_2_MAX', 5000); define('STAGE_2_MULTIPLIER', 1.20); define('STAGE_3_MIN', STAGE_2_MAX); define('STAGE_3_MAX', 10000); define('STAGE_3_MULTIPLIER', 1); for($i = MIN_STAGE; $i <= MAX_STAGE; $i++) { if ($_POST['qnt'] > constant("STAGE_".$i."_MIN") && $_POST['qnt'] <= constant("STAGE_".$i."_MAX")) { echo $_POST['qnt'] * constant("STAGE_".$i."_MULTIPLIER"); } elseif ($_POST['qnt'] < constant("STAGE_".MIN_STAGE."_MIN") || $_POST['qnt'] > constant("STAGE_".MAX_STAGE."_MAX")) { die ('Must be between ' . constant("STAGE_".MIN_STAGE."_MIN") . ' AND ' . constant("STAGE_".MAX_STAGE."_MAX")); } } 

    Если вы хотите его в чистом php – это не так хорошо. Для многих перезагрузок, но вот как это работает (это плохой код, для плохих идей):

     <?php $price = 10; if(isset($_REQUEST['count']){ $count = (int)$count; if($count > 10000){ echo 'Must be below 10000'; } elseif($count >= 1 && $count <= 1000){ $price *= 1.2; } //Etc... $total = $price * $count; } 

    На мой взгляд, вы должны попытаться добиться этого с помощью JS (или проще – с jQuery). Прежде всего, создайте форму:

     <input type="text" id="count" /> <input type="button" id="calculate" value="Calculate" /> 

    Затем сделайте что-то вроде этого:

     $(function(){ var price = 10; var multiplier = 1; $('#calculate').click(function(){ var count = parseInt($('#count').val()); if(count > 10000){ alert('Must be below 10000'); return; } else if(count >= 1 && count <= 1000){ multiplier = 1.2; } alert('Current price is ' + price + ' * ' + multiplier + ' = ' + getActualPrice()); }); function getActualPrice(){ return price * multiplier; } }); 

    скрипка