Правильное ли условие

285
30 мая 2017, 03:18

Есть самописный POS для аптек на PHP. И тут чтоб кассир не смог продавать больше чем количество препарата которая есть на складе делаю так

include('../connect.php');
$nl = $_POST['nall'] ;
$a = $_POST['invoice'];
$b = $_POST['product'];
$c = $_POST['qty'];
   if($c > $nl) {
      echo "<div align='center'><font color='red' 
      style='font:bold 22px 'Aleo';'>Внимание Вы не сможете расходовать больше чем остаток. Сейчас будете перенаправлены' </font> </div><br> "; 
      echo "<meta http-equiv=\"refresh\" content=\"3;url=" . 
      $_SERVER['HTTP_REFERER'] . "\">";
   exit; 
   } ?>

Как видно по коду если продаваемое количество препарата (переменная $c) БОЛЬШЕ чем количества остатка на складе (переменная $nl) то вывести ошибку. Но если допустим количество препарата на складе 10 шт и кассир собирается продавать тоже 10 шт то всё равно выводит ошибку что нельзя расходовать больше чем остаток. Как правильно написать условие чтоб именно когда кассир собирается продавать больше а не ровно вывести ошибку? В самом начале сделал так и всё заработало

if($_POST['qty'] > $_POST['nall']) {
  echo "<div align='center'><font color='red' 
  style='font:bold 22px 'Aleo';'>Внимание Вы не сможете 

расходовать больше чем остаток. Сейчас будете перенаправлены'
"; echo ""; exit; }

Answer 1

Данные с POST запроса, которые ожидаются, что будут числами - необходимо перевести к типу int, т.к. полученные данные придут с типом string

Answer 2

Проблема в том что всегда надо сделать проверки параметров прежде чем использовать их. Всегда надо следить за типами ваших данных, это можно сделать разными способами, один из них intval, хотя и можно просто умножить переменные на единицу $_POST['nall']*1. И тип измениться.

include('../connect.php');
$nl = intval($_POST['nall']) ;
$a = $_POST['invoice'];
$b = $_POST['product'];
$c = intval($_POST['qty']);
   if($c > $nl) {
      echo "<div align='center'><font color='red' 
      style='font:bold 22px 'Aleo';'>Внимание Вы не сможете 
расходовать больше чем остаток. Сейчас будете перенаправлены' </font> 
</div><br> "; 
      echo "<meta http-equiv=\"refresh\" content=\"3;url=" . 
      $_SERVER['HTTP_REFERER'] . "\">";
   exit; 
} ?>

А про остольных переменных не могу сказать, я не знаю для чего они нужны вам и какие значения в них. intval делает явное преоброзование типа в int. Подробно можете посмотреть тут

READ ALSO
Как вывести видео на сайте, зная его имя?

Как вывести видео на сайте, зная его имя?

Сделал добавление видео на сайт, файлы загружаются в ту папку, которую я указалВ базу данных я заношу имя файла, размер, тип

322
Magento + IIS не работает поиск на кириллице

Magento + IIS не работает поиск на кириллице

Всем привет! Прошу помочь в поиске решения проблемы! Есть сервер WS 2012 R2 magento 19

270
Периодическая ошибка Class Not Found

Периодическая ошибка Class Not Found

Здравствуйте! Пишу не большой сайт на Laravel 54, на нем имеется аутентификация через oAuth 2

317
Оптимизация SQL запроса (CPU 100%)

Оптимизация SQL запроса (CPU 100%)

Всем привет! Имею такой код:

257