Jump to content

product options + checkout fields


phpnooblet

Recommended Posts

So I have the site setup to add products to cart, the products get implemented to cart.php... I just need the customer to have the option to pick style , size, and color. and it show up in the cart.php fields for me to see.

I know how to make the html form fields but thats about as far as I go... with much tampering for hours on end to no avail its time to ask the pros......

You can see what I have done, I will leave the site unchanged for now, so whomever would like to take a stab at this can see what i am working with here....

www.shirtstash.com

code as follows

Option fields - Product Page

<form id="form1" name="form1" method="post" action="cart.php">
        <input type="hidden" name="pid" id="pid" value="<?php echo $id; ?>" />
        <table>
<tr>
    <td>
    <input type="hidden" name="on0" value="Style"></td>
    <input type="radio" name="gender" value="Mens">Mens
    <input type="radio" name="gender" value="Womens">Womens
    </td>
    </tr>
    <tr>
    <td>
    <input type="hidden" name="on0" value="Size">Size</td>
    <td>
    <select name="os0">
     
    <option value="Small">Small
    <option value="Medium">Medium
    <option value="Large">Large
    <option value="Large">XLarge
    <option value="Large">XXLarge
    </select></td>
    </tr>
 <tr>
    <td>
    <input type="hidden" name="on1" value="Color" maxlength="200">Color</td>
    <td> <select name="os0">
    <option value="Small">White
    <option value="Medium">Blue
    <option value="Large">Green
    </select></td>
    </tr>
<tr>
    <td>
    <input type="hidden" name="on0" value="Size">Shipping</td>
    <td>
    <select name="os0">
     <option value="Small">Standard + Free
    <option value="Medium">2 Day + $2.00
    <option value="Large">Overnight + $5.00
    </select></td>
  </tr>

</table>
        <a href="cart.php"><input type="image" src="/styles/images/paypal.jpg" width="200" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"></a>
      </form>

Cart php

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//       Section 1 (if user attempts to add something to the cart from the product page)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (isset($_POST['pid'])) {
    $pid = $_POST['pid'];

	$wasFound = false;
	$i = 0;
	// If the cart session variable is not set or cart array is empty
	if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) { 
	    // RUN IF THE CART IS EMPTY OR NOT SET
		$_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "quantity" => 1,));
	} else {
		// RUN IF THE CART HAS AT LEAST ONE ITEM IN IT
		foreach ($_SESSION["cart_array"] as $each_item) { 
		      $i++;
		      while (list($key, $value) = each($each_item)) {
				  if ($key == "item_id" && $value == $pid) {
					  // That item is in cart already so let's adjust its quantity using array_splice()
					  array_splice($_SESSION["cart_array"], $i-1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1)));
					  $wasFound = true;
				  } // close if condition
		      } // close while loop
	       } // close foreach loop
		   if ($wasFound == false) {
			   array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
		   }
	}
	header("location: cart.php"); 
    exit();
}
?>


<?php 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//       Section 5  (render the cart for the user to view on the page)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$cartOutput = "";
$cartTotal = "";
$pp_checkout_btn = '';
$product_id_array = '';
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) {
    $cartOutput = '<div id="carthead"><p>"Your shopping cart is empty"</p></div>';
} else {
    // Start PayPal Checkout Button
    $pp_checkout_btn .= '<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="business" value="you@youremail.com">';
    // Start the For Each loop
    $i = 0;
    foreach ($_SESSION["cart_array"] as $each_item) {
        $item_id = $each_item['item_id'];
        $sql = mysql_query("SELECT * FROM products WHERE id='$item_id' LIMIT 1");
        while ($row = mysql_fetch_array($sql)) {
            $product_name = $row["product_name"];
            $price = $row["price"];
            $details = $row["details"];
        }
        $pricetotal = $price * $each_item['quantity'];
        $cartTotal = $pricetotal + $cartTotal;
        setlocale(LC_MONETARY, "en_US");
        $pricetotal = money_format("%10.2n", $pricetotal);
        // Dynamic Checkout Btn Assembly
        $x = $i + 1;
        $pp_checkout_btn .= '<input type="hidden" name="item_name_' . $x . '" value="' . $product_name . '">
        <input type="hidden" name="amount_' . $x . '" value="' . $price . '">
        <input type="hidden" name="quantity_' . $x . '" value="' . $each_item['quantity'] . '">  ';
        // Create the product array variable
        $product_id_array .= "$item_id-".$each_item['quantity'].",";
        // Dynamic table row assembly
        $cartOutput .= "<tr>";
        $cartOutput .= '<td><a href="product.php?id=' . $item_id . '">' . $product_name . '</a><br /><img src="inventory_images/' . $item_id . '.jpg" alt="' . $product_name. '" width="40" height="52" border="1" /></td>';
        $cartOutput .= '<td>' . $details . '</td>';
        $cartOutput .= '<td>$' . $price . '</td>';
        $cartOutput .= '<td><form action="cart.php" method="post">
        <input name="quantity" type="text" value="' . $each_item['quantity'] . '" size="1" maxlength="2" />
        <input name="adjustBtn' . $item_id . '" type="submit" value="change" />
        <input name="item_to_adjust" type="hidden" value="' . $item_id . '" />
        </form></td>';
        //$cartOutput .= '<td>' . $each_item['quantity'] . '</td>';
        $cartOutput .= '<td>' . $pricetotal . '</td>';
        $cartOutput .= '<td><form action="cart.php" method="post"><input name="deleteBtn' . $item_id . '" type="submit" value="X" /><input name="index_to_remove" type="hidden" value="' . $i . '" /></form></td>';
        $cartOutput .= '</tr>';
        $i++;
    }
    setlocale(LC_MONETARY, "en_US");
    $cartTotal = money_format("%10.2n", $cartTotal);
    $cartTotal = "<div style='font-size:18px; margin-top:12px;' align='right'>Cart Total : ".$cartTotal." USD</div>";
    // Finish the Paypal Checkout Btn
    $pp_checkout_btn .= '<input type="hidden" name="custom" value="' . $product_id_array . '">
    <input type="hidden" name="notify_url" value="https://www.yoursite.com/storescripts/my_ipn.php">
    <input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cbt" value="Return to The Store">
    <input type="hidden" name="cancel_return" value="https://www.yoursite.com/paypal_cancel.php">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="currency_code" value="USD">
    <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with PayPal - its fast, free and secure!">
    </form>';
}
?>

from the above I think I should manipulate this

$_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "quantity" => 1,));

to this BUT I do not know how to implement the variables / arrays.

$_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "quantity" => 1,"size"=>$size,"color"=>$color,"style"=>$style));

Cart html

   <table width="100%" border="1" cellspacing="0" cellpadding="6">
      <tr>
        <td width="18%" bgcolor="orange"><strong>Product</strong></td>
        <td width="37%" bgcolor="orange"><strong>Product Description</strong></td>
        <td width="10%" bgcolor="orange"><strong>Unit Price</strong></td>
        <td width="9%" bgcolor="orange"><strong>Quantity</strong></td>
        <td width="9%" bgcolor="orange"><strong>Style</strong></td>
        <td width="9%" bgcolor="orange"><strong>Size</strong></td>
        <td width="9%" bgcolor="orange"><strong>Color</strong></td>
        <td width="9%" bgcolor="orange"><strong>Total</strong></td>
        <td width="9%" bgcolor="orange"><strong>Remove</strong></td>
      </tr>
     <?php echo $cartOutput; ?>
     <!-- <tr>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
        <td> </td>
      </tr> -->
    </table>

Thats all the code I know to post... If am missing a block pls tell me and I will grab it.

Edited by phpnooblet
Link to comment
Share on other sites

i'm not sure if there's a question or problem, but the definition of your session cart variable needs to be both simplified and expanded.

 

1) you need to use the item_id as an index for the cart array, so that finding or modifying the contents of the cart can be done directly using the item_id. this will eliminate the need to loop through all the cart contents when adding/removing items. this also makes it possible to get all the item_id's at once (see array_keys()) when displaying the cart so that you don't need to run a database query inside of a loop.

 

2) since it would be possible to have more than one instance of an item_id in the cart (different genders, sizes, colors), you should use those values to create an addition composite array index (see example code below.)

 

3) you need to filter/validate all external data before using it.

 

4) unless you are planning on shipping each item separately, the shipping choice should be after the items have been added to the cart, not for each item.

 

5) the html of your product page is all over the place. the only hidden field should be the pid/item_id. the other hidden fields don't belong. the field names for the gender, size, color.. should be meaningful names. your <option> lists all need closing </option> tags. you need to assign meaningful and distinct values for each option.

 

an example of what the 'add to cart' code would look like using items #1 and #2 in my list (this assumes your select menus have full names for the data they submit) -

if (isset($_POST['pid'])){
    // you need to filter/validate all external data before using it (the following is just copying data for demo purposes)
    $pid = $_POST['pid'];
    $gender = $_POST['gender'];
    $size = $_POST['size'];
    $color = $_POST['color'];

    $composite_key = "$gender|$size|$color";

    if(!isset($_SESSION['cart']))
    {
        $_SESSION['cart'] = array(); // create cart if needed
    }
    
    if(!isset($_SESSION['cart'][$pid]))
    {
        $_SESSION['cart'][$pid] = array(); // create item if needed
    }
    
    if(!isset($_SESSION['cart'][$pid][$composite_key]))
    {
        $_SESSION['cart'][$pid][$composite_key] = 0; // create options if needed, qty zero
    }    
    
    $_SESSION['cart'][$pid][$composite_key]++; // add to quantity
    
    header("location: cart.php");
    exit();
}
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.