0

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));
                }
            }   
        }   
    }
?>  
3
  • Don't depend on client-side code for validation. Validate in your server-side code to be sure the input is correct. Are you asking how to validate the inputs in PHP? Commented Sep 2, 2013 at 13:43
  • Please show us a little php code! Commented Sep 2, 2013 at 13:44
  • @DCoder no that is what i mean. What I am saying is I want the program to validate the inputs so that user must click on a specific coffee type and assign the quantity of that coffee specifically. So that the user cant just click on cappuccino and change the quantity of a different coffee type to get that value. Hence a coffee that should have cost $3.00 is being outputted as $2.00. Commented Sep 2, 2013 at 14:01

1 Answer 1

3

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.