我正在为假设的租赁业务建立一个网站,并且当用户点击“添加到购物车”按钮时,我正在尝试检查指定时间跨度内的可用库存。我运行的SQL查询遇到了一些麻烦,主要是(我认为),因为我的$ product_id变量是一个整数,但我要查询的列是“item1”,“item2”等形式。 / p>
我试图使用的逻辑是从表中可用的数字中减去所需的数量,在给定的时间跨度内取这些值的最小值,然后检查在任何时候该数字是否低于零
以下是相关代码:
switch ($action) {
case 'view':
$cart = cart_get_items();
break;
case 'add':
$product_id = filter_input(INPUT_GET, 'product_id', FILTER_VALIDATE_INT);
$quantity = filter_input(INPUT_GET, 'quantity');
$pickup = filter_input(INPUT_GET, 'pickup');
$return = filter_input(INPUT_GET, 'return');
// validate the quantity entry
if ($quantity === null) {
display_error('You must enter a quantity.');
} elseif (!is_valid_number($quantity, 1)) {
display_error('Quantity must be 1 or more.');
}
// check for available inventory
$query = "SELECT MIN((SELECT CONCAT('item',:product_id)) - :quantity) FROM running_inventory WHERE date BETWEEN :pickup AND :return";
$statement = $db->prepare($query);
$statement->bindValue(':product_id', $product_id);
$statement->bindValue(':quantity', $quantity);
$statement->bindValue(':pickup', $pickup);
$statement->bindValue(':return', $return);
$statement->execute();
$available = $statement->fetch();
$num_avail = $available[0];
var_dump($num_avail);
$statement->closeCursor();
if ($num_avail - $quantity >= 0) {
cart_add_item($product_id, $quantity);
} else {
display_error('The indicated quantity of stock is not available for your rental period.');
}
$cart = cart_get_items();
break;
这是$ available的var_dump:
array(2) { ["MIN((SELECT CONCAT('item','6')) - '3')"]=> string(2) "-3" [0]=> string(2) "-3" } string(2) "-3"
显然只是从0减去$ quantity,但我似乎无法弄清问题的确切位置。
答案 0 :(得分:0)
试试这个:
<form name="cityselect" onsubmit="return redirectTo(this)">
<select name="menu" value="GO">
<option selected="selected">Select One</option>
<option value="http://www.domain-one.com">London</option>
<option value="http://www.domain-two.com">Glasgow</option>
</select>
</form>
<script>
function redirectTo(elem) {
event.preventDefault();
top.location.href = elem.firstElementChild.options[elem.firstElementChild.selectedIndex].value
}
</script>