0

So basically what I am trying to do is using a loop to display multiple image and create a corresponding button to each image. If I pressed on the corresponding button, it will store the image into another database.

The first part display quite well. However, the second part I can hardly figure out how to determine the corresponding button for each image.

<?php while($row=mysqli_fetch_array($result)) { ?>
<div id="item">
  <?php echo '<img height="200" width="200" src="data:image;base64,'.$row[2]. '">';?>
  </br>
  <?php echo $row[ "name"];?>
  </br>
  <?php echo $row[ "price"];?>
  </br>
  <?php echo $row[ "description"];?>
  </br>
 <form>Quantity:
  <input type="text" value="" name="quantity" />
  </br>
  <input type="submit" value="add to cart" name="cart" />
 </form>
  <?php 
if (isset($_POST[ "cart"])){ 
$addtoname=$_SESSION[ 'username']; 
$addtoprice=$row[ 'price']; 
$addtodiscount=$row[ 'discount']; 
$addtoid=$row[ 'id']; 
$addtoimage=$row[ 'image']; 
$addtoquantity=$_POST[ 'quantity']; 
$hostname="localhost" ; 
$username="root";
$password="" ; 
$database="myproject" ; $con=mysqli_connect($hostname,$username,$password,$database) or die(mysqli_error()); 
$select=mysqli_select_db($con, "myproject")or die( "cannnot select db"); mysqli_query($con,"INSERT INTO cart(username,quantity,price,image,id,discount) VALUES('$addtoname','$addtoquantity','$addtoprice','$addtoimage','$addtoid','$addtodiscount')"); 
echo "success"; 
} 
else{ 
echo "fail"; 
}?>
</div>
<?php }//end of while ?>

It seems like it always go to fail AND never run into isset($_POST[ "cart"]))

Any tips will be much appreciated.

Thank you

4
  • $_POST[ 'quantity']; where does this coming from? u dont have a form that submits the data in $_POST, you should put a form in your inputs Commented May 29, 2016 at 6:50
  • 1
    @Try, This is a totally wrong coding pattern. You should correct workflow first. Commented May 29, 2016 at 6:59
  • Is there more code you're not showing us? I see an input field and a button, but no necessary form for these items to work. Commented May 29, 2016 at 6:59
  • So i include the form tag to the both input. But it seems still not work. I have just learn php lately so any advice will be much appreciated. The logic i am using is looping the button with the while loop in php to create multiple button. And the button is corresponding to each image. So i wonder if this algorithm is used, will the button created is automatically corresponding to the image. Or there are something i need to set to make it work properly. Thank you Commented May 29, 2016 at 7:16

2 Answers 2

1

Create 2 files:

One with the actual form populated by the DB:

<?php while($row=mysqli_fetch_array($result)) { ?>
<div id="item">
 <form method="post" action="cartReceiver.php">Quantity:
  <?php echo '<img height="200" width="200" src="data:image;base64,'.$row[2]. '">';?>
  </br>
  <?php echo $row[ "name"];?>
  </br>
  <?php echo $row[ "price"];?>
  </br>
  <?php echo $row[ "description"];?>
  </br>
  <input type="text" value="" name="quantity" />
  </br>
  <input type="submit" value="add to cart" name="cart" />
 </form>
</div>
<?php }//end of while ?>

And then the receiver of the action declared in form(cartReceiver.php):

<?php
if (isset($_POST[ "cart"])){ 
$addtoname=$_SESSION[ 'username']; 
$addtoprice=$row[ 'price']; 
$addtodiscount=$row[ 'discount']; 
$addtoid=$row[ 'id']; 
$addtoimage=$row[ 'image']; 
$addtoquantity=$_POST[ 'quantity']; 
$hostname="localhost" ; 
$username="root";
$password="" ; 
$database="myproject" ; $con=mysqli_connect($hostname,$username,$password,$database) or die(mysqli_error()); 
$select=mysqli_select_db($con, "myproject")or die( "cannnot select db"); mysqli_query($con,"INSERT INTO cart(username,quantity,price,image,id,discount) VALUES('$addtoname','$addtoquantity','$addtoprice','$addtoimage','$addtoid','$addtodiscount')"); 
echo "success"; 
} 
else{ 
echo "fail"; 
}

Note that I changed the tag order of the form. If you wish to receive the fetched parameters from POST without querying the DB after transition, then you can change the first file like this:

 <?php while($row=mysqli_fetch_array($result)) { ?>
    <div id="item">
     <form method="post" action="cartReceiver.php">Quantity:
      <?php echo '<img height="200" name="image" width="200" src="data:image;base64,'.$row[2]. '">';?>
      </br>
      <input type="text" name="username" value="<?php echo $row[ "name"];?>" readonly /> 
      </br>
      <input type="text" name="price" value="<?php echo $row[ "price"];?>" readonly />
      <input type="hidden" name="discount" value="<?php echo $row[ "discount"];?>" />
      </br>
      <input type="text" name="description" value="<?php echo $row[ "description"];?>" readonly />  
      </br>
      <input type="text" value="" name="quantity" />
      </br>
      <input type="submit" value="add to cart" name="cart" />
     </form>
    </div>
    <?php }//end of while ?>

So the cartReceiver.php file will look like this in this case:

<?php
if (isset($_POST[ "cart"])){ 
$addtoname=$_POST['username']; 
$addtoprice=$_POST['price']; 
$addtodiscount=$_POST['discount']; 
$addtoid=$_POST['id']; 
$addtoimage=$_POST['image']; 
$addtoquantity=$_POST[ 'quantity']; 
$hostname="localhost" ; 
$username="root";
$password="" ; 
$database="myproject" ; $con=mysqli_connect($hostname,$username,$password,$database) or die(mysqli_error()); 
$select=mysqli_select_db($con, "myproject")or die( "cannnot select db"); mysqli_query($con,"INSERT INTO cart(username,quantity,price,image,id,discount) VALUES('$addtoname','$addtoquantity','$addtoprice','$addtoimage','$addtoid','$addtodiscount')"); 
echo "success"; 
} 
else{ 
echo "fail"; 
}

Notice the readonly attirbute in the inputs. It will prevent the users from altering their contents.

Now you can access all the inputs after you submit the form (click the add to cart button) by using $_POST['name'],$_POST['description'] etc

EDIT: Code updated for your needs. Since it seems you dont want to display the discount, you pass it to the form through a hidden field which can be then accessed as the others through $_POST.

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

2 Comments

Then how should I access to the current row of data that I clicked on the button. Because it is a while loop and in the end the row of data to get in is the last row of data. Thank you
I've updated my answer to show you exactly how to do it.
0

First if all you need to make sure your submit button is inside a form that has the action field set to the current script. Second, I would place inside it a hidden field with the id of the image as value, so you know which image was submitted

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.