I have a form where I am inserting personal data and images. The user can add more than one image. Now when the user submits the form then I am inserting the data and images in the temporary table and creating a session for images that are as below.
$_SESSION['workimages']=$storeWorkImages;
I am getting the output which is correct (For example user added 3 images).
Array (
[0] => 1381658980.jpeg
[1] => 211907337.png
[2] => 266964890.jpg
)
Till now, The User data in a temporary table. I don’t have any issues here.
Now What I am doing is, I am displaying all the images on the checkout page where the user can view the images for confirmation. So I use the below code.
<?php if(isset($_SESSION['workimages'])){?>
<form method="post" id="checkout" name="checkout" action="#" autocomplete="off">
<?php foreach($_SESSION['workimages'] as $workimages){?>
<ul>
<li>
<img src="assets/images/uploads/<?php echo $workimages;?>" alt="" class="workimg">
<a href="javascript:void(0);" class="disabledme btn_workremove">Remove</a>
<a href="javascript:void(0);" class="disabledme btn_workrestore">Restore</a>
</li>
<?php }?>
</ul>
<div class="calculateWrap">
<label>quantity</label>
<input type="text" value="<?php echo count($_SESSION['workimages']);?>" name="qty" id="qty">
<label>Amount</label> $
<input type="text" name="amount" id="totalamt" value="1">
</div>
<input type="hidden" name="user_id" value="1"> <!--1 is for testing-->
<input type="submit" name="submit" value="Proceed to pay">
</form>
<?php }?>
I am using the below script for remove
and restore
.
Note: The Below script is used only for adding the class and display the remove and restore the text. It is not completely removing from the session.
I don’t want to remove from the session because the user can reactive the image again.
$(function() {
$(".btn_workremove").click(function() {
$(this).parent().addClass("disabledimage");
$('.disabledimage .btn_workrestore').addClass("d-block");
});
$(".btn_workrestore").click(function() {
$(this).parent().removeClass("disabledimage");
$(this).removeClass("d-block");
$('.disabledimage .btn_workremove').addClass("d-block");
});
});
Check the below image. I am getting this output.
Note: The second image removed but still I want to show it to the user.
Now If I click on Proceed to pay button
then I am inserting the all the data in the real table(I am sharing only checkout query here)
$qty = validate_data($_POST['qty']);
$amount = validate_data($_POST['amount']);
$user_id = validate_data($_POST['user_id']);
$sql = "INSERT INTO `tbl_checkout`(`qty`, `amount`, `user_id`) VALUES (:qty, :amount, :user_id)";
$stmt = $pdo - > prepare($sql);
$stmt - > execute(['qty' => $qty,
'amount' => $amount,
'user_id' => $user_id
]);
Now my main issue is, I am getting 3 qty instead of 2. I removed second image but still giving me 3 qty.
Would you help me out with this issue?
Advertisement
Answer
You are getting the quantity by counting the amount of images is the session variable
<input type="text" value="<?php echo count($_SESSION['workimages']);?>" name="qty" id="qty">
The session variable is a server-side variable, you cannot change this with javascript. I would suggest using jQuery to remove or add 1 to the quantity when remove or restore is clicked.
example:
$(function() {
$(".btn_workremove").click(function() {
$(this).parent().addClass("disabledimage");
$('.disabledimage .btn_workrestore').addClass("d-block");
var qty = parseInt($('#qty').val())
$('#qty').val(qty - 1) // <---- remove 1 from quantity
});
$(".btn_workrestore").click(function() {
$(this).parent().removeClass("disabledimage");
$(this).removeClass("d-block");
$('.disabledimage .btn_workremove').addClass("d-block");
var qty = parseInt($('#qty').val())
$('#qty').val(qty + 1) // <---- add 1 to quantity
});
});