Do you get any errors? Anything in the logs?
Checkout Form isn't Submitting
I'm new to laravel and first time working on ecom site and trying to submit the checkout form, but it is not submitting. It has values of products form cart (product name, code, price) and currently entered user data, and screenshot of DB table (orders) https://ibb.co/bbBHCky
checkout.blade.php
<ul class="list-group mb-3">
<?php $total_amount = 0; ?>
@foreach($userCart as $cart)
<li class="list-group-item d-flex justify-content-between lh-condensed">
<div>
<h6 class="my-0">{{ $cart->product_name }}</h6>
<small class="text-muted">Quantity: {{ $cart->quantity }}</small>
<small class="text-muted" style="display: none;">{{ $cart->product_code }}</small>
<small class="text-muted" style="display: none;">{{ $cart->product_id }}</small>
</div>
<span class="text-muted">Rs {{ $cart->price }}</span>
</li>
@endforeach
<li class="list-group-item d-flex justify-content-between">
<span>Total (PKR)</span>
<strong>{{ $total }}</strong>
</li>
</ul>
<form method="post" action="{{ url('/checkout') }}" class="needs-validation" novalidate>{{
csrf_field() }}
<div class="row">
<div class="col-md-6 mb-3">
<label for="firstName">Name</label>
<input type="text" name="name" class="form-control" id="firstName"
placeholder="name" value="" required
style="border: 1px solid black !important;">
<div class="invalid-feedback">
Valid first name is required.
</div>
</div>
</div>
<div class="mb-3">
<label for="email">Email </label>
<input type="email" name="email" class="form-control" id="email"
placeholder="[email protected]"
required="required" style="border: 1px solid black !important;">
<div class="invalid-feedback">
Please enter a valid email address for shipping updates.
</div>
</div>
<div class="mb-3">
<label for="address">Address</label>
<input type="text" name="address" class="form-control" id="address" placeholder="1234
Main St" required
style="border: 1px solid black !important;">
<div class="invalid-feedback">
Please enter your shipping address.
</div>
</div>
<div class="row">
<div class="col-md-5 mb-3">
<label for="country">Country</label>
<select name="country" class="custom-select d-block w-100" id="country" required>
<option value="">Choose...</option>
<option value="usa">United States</option>
</select>
<div class="invalid-feedback">
Please select a valid country.
</div>
</div>
<div class="col-md-4 mb-3">
<label for="state">State</label>
<select name="state" class="custom-select d-block w-100" id="state" required>
<option value="">Choose...</option>
<option value="cal">California</option>
</select>
<div class="invalid-feedback">
Please provide a valid state.
</div>
</div>
<div class="col-md-5 mb-3">
<label for="country">City</label>
<select name="city" class="custom-select d-block w-100" id="country" required>
<option value="">Choose...</option>
<option value="lhr">United States</option>
</select>
<div class="invalid-feedback">
Please select a valid country.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="zip">Zip</label>
<input type="text" name="zipcode" class="form-control" id="zip" placeholder="" required
style="border: 1px solid black !important;">
<div class="invalid-feedback">
Zip code required.
</div>
</div>
<div class="col-md-5 mb-3">
<label for="zip">Mobile</label>
<input type="text" name="mobile" class="form-control" id="zip" placeholder="" required
style="border: 1px solid black !important;">
<div class="invalid-feedback">
mobile no required.
</div>
</div>
</div>
<button class="btn btn-primary btn-lg btn-block" type="submit" style="background-color:
black;">Place Order</button>
</form>
code of ProductsController:
public function placeOrder(Request $request)
{
if ($request->isMethod('post')) {
$data = $request->all();
$session_id = Session::get('session_id');
if (empty($session_id)) {
$session_id = str_random(40);
Session::put('session_id', $session_id);
}
$order = new Order;
$order->id = $id;
$order->name = $name;
$order->email = $email;
$order->address = $address;
$order->country = $country;
$order->state = $state;
$order->city = $city;
$order->zipcode = $zipcode;
$order->mobile = $mobile;
$order->product_id = $product_id;
$order->product_code = $product_code;
$order->product_name = $product_name;
$order->product_price = $product_price;
$order->product_quantity = $qty;
$order->order_status = "New";
$order->grand_total = $data['grand_total'];
$order->save();
return view('products.checkout');
}
}
and route is:
Route::match(['get','post'],'/place-order','ProductsController@placeOrder');
That is because you don't send any cart values from you form. This is what you have in your code.
<form method="post" action="{{ url('/checkout') }}" class="needs-validation" novalidate>
{{csrf_field() }}
<input type="text" name="name" class="form-control" id="firstName"
placeholder="name" value="" required
style="border: 1px solid black !important;">
<input type="email" name="email" class="form-control" id="email"
placeholder="[email protected]"
required="required" style="border: 1px solid black !important;">
<input type="text" name="address" class="form-control" id="address" placeholder="1234
Main St" required
style="border: 1px solid black !important;">
<select name="country" class="custom-select d-block w-100" id="country" required>
<option value="">Choose...</option>
<option value="usa">United States</option>
</select>
<select name="state" class="custom-select d-block w-100" id="state" required>
<option value="">Choose...</option>
<option value="cal">California</option>
</select>
<select name="city" class="custom-select d-block w-100" id="country" required>
<option value="">Choose...</option>
<option value="lhr">United States</option>
</select>
<input type="text" name="zipcode" class="form-control" id="zip" placeholder="" required
style="border: 1px solid black !important;">
<input type="text" name="mobile" class="form-control" id="zip" placeholder="" required
style="border: 1px solid black !important;">
<button class="btn btn-primary btn-lg btn-block" type="submit" style="background-color:
black;">Place Order</button>
</form>
You need to add a field or more depending on your solution with the cart. Either you pass a JSON string with all the items and quantities or a reference to a cart_id in some table.
Please or to participate in this conversation.