-2

I've created a question form in my e-commerce website to add product to cart.

Here are the screenshots:

enter image description here

enter image description here

You can see these two screenshots above. If the user clicks on the Daily radio button then two div's are hidden, because on daily option the user don't need to give an answer to those two questions. But if the user clicks on Weekly or Monthly radio button, then those two div's are appearing. I am hiding and showing these two div's with jQuery hide() and show(). So, I am validating it all but I wanna validate this properly that if user click on Daily button so that the two hidden divs should not validate as required in back-end but if user click on Weekly or monthly then the two divs should validate as required. I am unable to get logic how this can be implemented.

Here is my code:

<form method="post">
    <div class="select_package_validity">
        <input type="radio" class="custom-control-input plan_name" name="plan_name_selector" value="Daily">
        <input type="radio" class="custom-control-input plan_name" name="plan_name_selector" value="Weekly">
        <input type="radio" class="custom-control-input plan_name" name="plan_name_selector" value="Monthly">
        <input type="hidden" name="plan_name" class="selected_plan_name" />
    </div>
    <div class="select_days">
        <input type="radio" class="custom-control-input plan_days" name="plan_days_selector" value="5">
        <input type="radio" class="custom-control-input plan_days"name="plan_days_selector" value="6">
        <input type="radio" class="custom-control-input plan_days" name="plan_days_selector" value="7">
        <input type="hidden" name="plan_days" class="selected_plan_days" />
    </div>
    <div class="days_names">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Monday">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Tuesday">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Wednesday">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Thursday">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Friday">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Saturday">
        <input type="checkbox" class="custom-control-input" name="day_name_selector" value="Sunday">
        <input type="hidden" class="selected_days_names" name="days_names" />
    </div>
    <div class="food_time">
        <input type="checkbox" class="custom-control-input" name="food_time_selector" value="Breakfast">
        <input type="checkbox" class="custom-control-input" name="food_time_selector" value="Lunch">
        <input type="checkbox" class="custom-control-input" name="food_time_selector" value="Dinner">
        <input type="hidden" name="calculated_order_price" id="calculatedFinalPrice" />
        <input type="hidden" class="selected_food_time" name="food_time" />
    </div>
</form>

Function Code:

public function addToCartOrderPackage($data, $proId){

    // Note: $plan_days and $days_names are that 2 div's which i am hiding and showing and wanna validate only on if these are showing 

    $pro_id = mysqli_real_escape_string($this->db->link, $proId);
    $plan_name = mysqli_real_escape_string($this->db->link, $data['plan_name']);
    $plan_days = mysqli_real_escape_string($this->db->link, $data['plan_days']);
    $days_names = mysqli_real_escape_string($this->db->link, $data['days_names']);
    $calOrderPrice = mysqli_real_escape_string($this->db->link, $data['calculated_order_price']);
    $food_time = mysqli_real_escape_string($this->db->link, $data['food_time']);
    $starts_from = mysqli_real_escape_string($this->db->link, $data['starts_from']);

    $query = "SELECT * FROM products WHERE pro_id = '$pro_id' AND pro_type = 'Plan'";
    $result = $this->db->select($query);
    $value = $result->fetch_assoc();
    $pro_name = mysqli_real_escape_string($this->db->link, $value['pro_name']);
    $pro_desc = mysqli_real_escape_string($this->db->link, $value['pro_desc']);

    $withLogin = $this->withLoginAddToCart($pro_id, $pro_name, $calOrderPrice, $pro_desc, $plan_name, $plan_days, $days_names, $food_time, $starts_from);
    return $withLogin;
}

public function withLoginAddToCart($pro_id, $pro_name, $calOrderPrice, $pro_desc, $plan_name, $plan_days, $days_names, $food_time, $starts_from){
    $userid = Session::get("user_id");
    $user_id = mysqli_real_escape_string($this->db->link, $userid);
    $arraynames = explode(",", $days_names);
    $countdays = count($arraynames);

    // Note: $plan_days and $days_names are that 2 div's which i am hiding and showing and wanna validate only on if these are showing 

    if($plan_name == "" || $plan_days == "" || $days_names == "" || $calOrderPrice == "" || $food_time == ""){
        $msg = "<div class='alert alert-danger'>All fields are required. Please fill all fields.</div>";
        return $msg;
    } else {
        if($plan_days == '5' && $countdays != 5){
            $msg = "<div class='alert alert-danger'>Please select 5 days names.</div>";
            return $msg;
        } elseif($plan_days == '6' && $countdays != 6){
            $msg = "<div class='alert alert-danger'>Please select 6 days names.</div>";
            return $msg;
        } elseif($plan_days == '7' && $countdays != 7){
            $msg = "<div class='alert alert-danger'>Please select 7 days names.</div>";
            return $msg;
        } else {
            $queryO = "INSERT INTO plan_cart(user_id, pro_id, pro_name, pro_desc, pro_price, plan_name, plan_days, days_names, food_time, starts_from, pro_type) "
                    . "VALUES('$user_id', '$pro_id', '$pro_name', '$pro_desc', '$calOrderPrice', '$plan_name', '$plan_days', '$days_names', '$food_time', '$starts_from', 'Plan')";
            $resultO = $this->db->insert($queryO);
            if($resultO != false){
                header("location: plan-cart.php");
            } else {
                $msg = "<div class='alert alert-danger'>Something's went wrong, Please try again.</div>";
                return $msg;
            }
        }
    }
}
Your Common Sense
  • 156,878
  • 40
  • 214
  • 345
Zain Shabir
  • 79
  • 3
  • 11

1 Answers1

1

It's not really a jquery question and the answer could be quite simple I think. You know that the divs are hiding when the user has chosen the daily delivery, so in you server codey our validation could be

if($plan_name == "" || (($plan_days == "" || $days_names == "")&&$plan_name!='Daily') || $calOrderPrice == "" || $food_time == "")

or something along this lines.

Hans Dash
  • 761
  • 4
  • 18
  • I've posted an answer of my question of what I've tried. Please check my answer in answers list. if that is okay or not and do let me know – Zain Shabir Sep 20 '19 at 07:10
  • 1
    Your answer also works I would think, but it's a bit more code :-) – Hans Dash Sep 20 '19 at 07:13
  • Your code works. But brother. You minus my reputation I've made with effort. It's ok. Your code works great and implemented your way of code to do this and removed mine. Thanks a lot – Zain Shabir Sep 20 '19 at 07:16
  • 1
    The minus did not come from me. I can understand why someone would think the question is not very useful, but I do not agree. It is a very common struggle to have your client code and server code work together nicely. – Hans Dash Sep 20 '19 at 07:26
  • Ohh i am sorry brother. I thought it's you. But your code worked and i have implemented. It's really great way. – Zain Shabir Sep 20 '19 at 07:29