В настоящее время я пытаюсь сформировать логику, где я размещаю заказы, и если заказ превысил вместимость при суммировании с текущим запасом, появится соответствующее сообщение. Также, если есть входящие заказы, то при добавлении новых заказов они не могут превышать мощности при суммировании с отложенными входящими заказами, а также текущими доступными запасами. Однако моя проблема в том, что независимо от того, какую сумму я положил, она продолжает показывать мой «Сумма размещенного заказа превысила вместимость». сообщение проверки. Моя логика вокруг этой функции неверна? Спасибо.
if (isset($_POST['addBtn'])){
$brand = $_POST['brand'];
$modelName = $_POST['model_name'];
$session = $_SESSION['username'];
$station = 'At Factory';
$progress = 'Awaiting';
$status = 'Awaiting';
$handler = 'Awaiting';
$request = '-';
$stock = $_POST['stock'];
$incoming = '0';
$date = date('Y-m-j H:i:s', time());
$stock = $_POST['stock'];
$incoming = '0';
$sql2 = "SELECT o.stock,m.current,m.capacity FROM orders o
INNER JOIN models m ON o.model_id=m.model_id
WHERE o.incoming = 0";
$result2 = $conn->query($sql2);
if (!$result2) die($conn->error);
$rows = $result2->num_rows;
$stok = $rows['stock'];
$cu = $rows['current'];
$ca = $rows['capacity'];
if (($stock+$cu)>$ca){
?>
<div class = "alert alert-danger alert-dismissible" role = "alert">
<button type = "button" class = "close" data-dismiss = "alert" aria-label = "Close"><span aria-hidden = "true">×</span></button>
<strong id = "alert2">Error! </strong>Placed order stock amount has exceeded capacity.
</div>
<?php
}elseif (($stok+$stock+$cu)>$ca){
?>
<div class = "alert alert-danger alert-dismissible" role = "alert">
<button type = "button" class = "close" data-dismiss = "alert" aria-label = "Close"><span aria-hidden = "true">×</span></button>
<strong id = "alert2">Error! </strong>Pending incoming stocks has exceeded capacity.
</div>
<?php
}else{
$query = "INSERT INTO orders(brand,model_id,station,progress,status,editor,time_ordered,admin,request) VALUES ('".$brand."','".$modelName."','".$station."','".$progress."','".$status."','".$handler."','".$date."','".$session."','".$request."')";
}
}
заказы - это не БД, это имя таблицы, а o
- псевдоним для этого имени таблицы orders
@heh эта строка $rows = $result2->num_rows;
даст только количество строк в таблице, после чего вы получаете доступ $rows['stock']
, так что все это не имеет значений. проверьте, что значения получают с помощью print_r()
. Используйте для получения данных, таких как $rows = $result2->fetch_assoc()
Я считаю, что вам понадобится еще одно предложение WHERE в вашем SQL для выбора заказов на основе вашей модели.
Пример:
$sql2 = "SELECT SUM(o.stock) as stock_sum, m.current, m.capacity FROM orders o
INNER JOIN models m ON o.model_id=m.model_id
WHERE o.incoming = 0 AND m.model_id = $modelName";
Но может возникнуть ошибка, если заказов нет. Например, $cu и $ca могут быть пустыми, потому что вы получаете эти значения путем объединения заказов и моделей.
Отличным предложением было бы иметь отдельный SQL для получения суммы акций и другой SQL для получения сведений о модели.
То, что $cu и $ca пусты, на самом деле не сильно повлияет, если тип обоих столбцов в таблице базы данных установлен как целочисленный, что приведет к тому, что 0 будет значением, если оно пусто, поэтому в этом случае ошибки не произойдет.
имя вашей базы данных заказы или заказы о?