验证输入类型“复选框”和“数字”php / html

时间:2013-09-02 13:36:36

标签: php html validation checkbox

您好我想知道是否可以验证"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));
                }
            }   
        }   
    }
?>  

1 个答案:

答案 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)

正如您所看到的,每种咖啡现在都作为一个数组提交,其中咖啡类型是一个键,它还有一个自己的数组,另外还有两个键:selectedqty

selected确定是否勾选了该咖啡的复选框(1)(0)并且qty保留了用户输入。

这几乎可以验证,因为现在每个数量输入都属于单独的咖啡。

我希望我能正确理解你的困境,这可以回答你的问题,或者让你知道如何继续这样做。

享受:)