validating input types “checkbox” and “number” php/html

只谈情不闲聊 提交于 2019-12-13 05:24:02

问题


Hi i was wondering if it is possible to validate "checkbox" and "number". It is really hard to explain what I want but I'll try my best ;). Anyways I have this code:

<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>

...so on

I want the program to validate both the "checkbox" and "number"so that a user would not be able to cheat. Such as that if the "cappuccino" is selected its assigned quantity ("cappuccino_qty") should be the only input type able to submit. Say cappuccino cost $2.00 and espresso cost $3.00 With my code a user is able to check espresso and change quantity of cappuccino to one or more. So with my output espresso cost $2.00 instead of $3.00. I want to prevent that from happening.

This is my whole code:

<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:


Three words: array it up!

Observe this code:

<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>

When this submits, the inputs are submitted as an associative array as this:

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)

As you can see, each coffee is now being submitted as an array with the type of coffee being a key that also has an array of its own with two further keys: selected and qty.

The selected determines if the checkbox for that coffee was ticked (1) or not (0) and the qty holds the user input.

This pretty much does your validation since each quantity input now belongs to the individual coffee.

I hope I've understood your dilemma correctly and this answers your question or give a you an idea of how to go on about doing this.

Enjoy :)



来源:https://stackoverflow.com/questions/18574626/validating-input-types-checkbox-and-number-php-html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!