您好我想知道是否可以验证"checkbox"
和"number"
。这很难解释我想要什么,但我会尽我所能;)。无论如何我有这个代码:
<input type = "checkbox" name = "coffee[]" value = "cappuccino"/>Cappuccino
<input type = "number" value = "qty." name = "cappuccino_qty" size = "2"/><br>
<input type = "checkbox" name = "coffee[]" value = "espresso"/>Espresso
<input type = "number" value = "qty." name = "espresso_qty" size = "2"/><br>
......等等
我希望程序验证"checkbox"
和"number"
,以便用户无法作弊。例如,如果选择“卡布奇诺”,其分配数量(“cappuccino_qty”)应该是唯一能够提交的输入类型。说卡布奇诺价格为2.00美元,意式咖啡价格为3.00美元。使用我的代码,用户可以检查浓缩咖啡并将卡布奇诺的数量改为一个或多个。因此,我的输出浓缩咖啡价格为2.00美元而不是3.00美元。我想防止这种情况发生。
这是我的全部代码:
<html>
<head>
<title>Order</Title>
<style>
</style>
<body>
<form action = "order.php" method = "post">
Coffee:<p>
<input type = "checkbox" name = "coffee[]" value = "cappuccino"/>Cappuccino
<input type = "number" value = "qty." name = "cappuccino_qty" size = "2"/><br>
<input type = "checkbox" name = "coffee[]" value = "espresso"/>Espresso
<input type = "number" value = "qty." name = "espresso_qty" size = "2"/><br>
<input type = "checkbox" name = "coffee[]" value = "double_espresso"/>Double Espresso
<input type = "number" value = "qty." name = "double_espresso_qty" size = "2"/><br>
<input type = "checkbox" name = "coffee[]" value = "flat_white"/>Flat White
<input type = "number" value = "qty." name = "flat_white_qty" size = "2"/><br>
<input type = "checkbox" name = "coffee[]" value = "latte"/>Latte
<input type = "number" value = "qty." name = "latte_qty" size = "2"/><br>
<input type = "checkbox" name = "coffee[]" value = "ice"/>Ice Coffee
<input type = "number" value = "qty." name = "ice_qty" size = "2"/><br>
<p>
<input type = "radio" value = "in" name = "dine"/>Dine in
<input type = "radio" value = "out" name = "dine"/>Take out
<br>
<input type = "submit" value = "submit" name = "submit"/>
</form>
</body>
</head>
</Html>
<?php
//coffee cost//
$cappuccino_cost = 3.75;
$espresso_cost = 3.00;
$double_espresso_cost = 4.25;
$flat_white_cost = 3.75;
$latte_cost = 3.5;
$ice_cost = 2.5;
//default qty of each coffee//
$cappuccino_qty = 0;
$espresso_qty = 0;
$double_espresso_qty = 0;
$flatwhite_qty = 0;
$latte_qty = 0;
$ice_qty = 0;
//discounts & charges//
$charge = 1.05;
$discount = 0.1;
//submitting inputs//
if(isset($_POST["submit"]))
{
//number of checkboxe(s) that are checked
if(isset($_POST['coffee']))
{
$checked_array = $_POST['coffee'];
$count = count($checked_array);
if($count != 0)
{
//coffee cost is being readied//
if(!isset($_POST['coffee']) && $_POST['coffee'] == 'cappuccino')
{
$cappuccino_cost = 0;
}
if(!isset($_POST['coffee']) && $_POST['coffee'] == 'espresso')
{
$espresso_cost = 0;
}
if(!isset($_POST['coffee']) && $_POST['coffee'] == 'double_espresso')
{
$double_espresso_cost = 0;
}
if(!isset($_POST['coffee']) && $_POST['coffee'] == 'flat_white')
{
$flat_white_cost = 0;
}
if(!isset($_POST['coffee']) && $_POST['coffee'] == 'latte')
{
$latte_cost = 0;
}
if(!isset($_POST['coffee']) && $_POST['coffee'] == 'ice')
{
$ice_cost = 0;
}
//the quantity calculated//
if(isset($_POST['cappuccino_qty']) && $_POST['cappuccino_qty'] != 'qty.')
{
$cappuccino_qty = $_POST['cappuccino_qty'];
}
if(isset($_POST['espresso_qty']) && $_POST['espresso_qty'] != 'qty.')
{
$espresso_qty = $_POST['espresso_qty'];
}
if(isset($_POST['double_espresso_qty']) && $_POST['double_espresso_qty'] != 'qty.')
{
$double_espresso_qty = $_POST['double_espresso_qty'];
}
if(isset($_POST['flat_white_qty']) && $_POST['flat_white_qty'] != 'qty.')
{
$flat_white_qty = $_POST['flat_white_qty'];
}
if(isset($_POST['latte_qty']) && $_POST['latte_qty'] != 'qty.')
{
$latte_qty = $_POST['latte_qty'];
}
if(isset($_POST['ice_qty']) && $_POST['ice_qty'] != 'qty.')
{
$ice_qty = $_POST['ice_qty'];
}
//cost calculated//
$cappuccino = $cappuccino_cost * $cappuccino_qty;
$espresso = $espresso_cost * $espresso_qty;
$double = $double_espresso_cost * $double_espresso_qty;
$flat = $flat_white_cost * $flat_white_qty;
$latte = $latte_cost * $latte_qty;
$ice = $ice_cost * $ice_qty;
//total amount of cost and no. cofee//
$total = $cappuccino + $espresso + $double + $flat + $latte + $ice;
$total_coffee = $cappuccino_qty + $espresso_qty + $double_espresso_qty + $flat_white_qty + $latte_qty + $ice_qty;
//take away charge calculated//
if(isset($_POST['dine']) && $_POST['dine'] == 'out')
{
$total = $charge * $total;
$total = round($total,2);
}
//discount calculated//
if($count >= 3 or $total_coffee >= 3)
{
$total = $total - ($total * $discount);
$total = round($total,2);
}
//output total
if($total != 0)
{
echo "$".(round($total,2));
}
}
}
}
?>
答案 0 :(得分:4)
三个字:把它排好!
观察此代码:
<form action="order.php" method="post">
<p>
Coffee: <br>
<!-- This ensures false is submitted if the cappuccino box is unticked -->
<input type="hidden" name="coffee[cappuccino][selected]" value="0">
<label><input type="checkbox" name="coffee[cappuccino][selected]" value="1"> Cappuccino</label>
<input type="number" name="coffee[cappuccino][qty]" size="2"><br>
<!-- This ensures false is submitted if the espresso box is unticked -->
<input type="hidden" name="coffee[espresso][selected]" value="0">
<label><input type="checkbox" name="coffee[espresso][selected]" value="1"> Espresso</label>
<input type="number" name="coffee[espresso][qty]" size="2"><br>
</p>
<p>[...]</p>
<p>
<label><input type="radio" name="dine" value="in"> Dine in</label>
<label><input type="radio" name="dine" value="out"> Take out</label>
</p>
<p><input type="submit" value="submit" name="submit"></p>
</form>
当提交时,输入作为关联数组提交,如下所示:
array (size=3)
'coffee' =>
array (size=2)
'cappuccino' =>
array (size=2)
'selected' => string '1' (length=1)
'qty' => string '4' (length=1)
'espresso' =>
array (size=2)
'selected' => string '1' (length=1)
'qty' => string '3' (length=1)
'dine' => string 'in' (length=2)
'submit' => string 'submit' (length=6)
正如您所看到的,每种咖啡现在都作为一个数组提交,其中咖啡类型是一个键,它还有一个自己的数组,另外还有两个键:selected
和qty
。
selected
确定是否勾选了该咖啡的复选框(1
)(0
)并且qty
保留了用户输入。
这几乎可以验证,因为现在每个数量输入都属于单独的咖啡。
我希望我能正确理解你的困境,这可以回答你的问题,或者让你知道如何继续这样做。
享受:)