phpnooblet Posted May 10, 2014 Share Posted May 10, 2014 (edited) 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 May 10, 2014 by phpnooblet Quote Link to comment Share on other sites More sharing options...
mac_gyver Posted May 10, 2014 Share Posted May 10, 2014 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(); } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.