Jump to content

[SOLVED] pulling product list from database


lional

Recommended Posts

I got rid of the comma by doing

 

if ($key != "") {

$query .= $key . ',';

}

 

but I still get

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '59,41,25,22,1,2,3')' at line 1

I think each value needs single quotes around it.  With integers maybe not, but try this:

 

 

         $query = "SELECT * FROM supplements WHERE supp_id IN (";
         foreach ($_SESSION['cart'] as $key => $value) {
            $query .= "'$key'" . ",";
         }
         $query .= substr ($query, 0, -1) . ") ";

Okay I found an easier solution that should work.

 

Instead of this block of code, which you had your quotes messed up in anyway, try this:

 

         $query = 'SELECT * FROM supplements WHERE supp_id IN (';
         foreach ($_SESSION['cart'] as $key => $value) {
            $query .= $key . ',';
         }
         $query .= substr ($query, 0, -1) . ') ';

 

 

Just use this, you can give IN() an array rather than using a foreach to extract each individual $key.

 

$query = "SELECT * FROM supplements WHERE supp_id IN({$_SESSION['cart']})";

That didn't work for some reason and I got the products to list but it hasn't pulled the quantities through that should be added to the array in the beginning of the script.

 

Here is my code

<body bgcolor="#32818B" topmargin="0">
<?php
session_start();
  include 'header.php';
  $client_out = $_SESSION['clid'];
  include 'includes/conn_db.php';
    $query_cl = "SELECT * from client_supps WHERE client_id = '$client_out'";
$result_cl = mysql_query($query_cl, $conn);
$supp_id_out = array();
while ($row_cl = mysql_fetch_assoc($result_cl)){
$supp_id_out[] = $row_cl["supp_id"];
$qty_out = $row_cl["qty"];


}
foreach($supp_id_out as $key => $value)
{
$qty1 = $value;
$pid = $key;

	// add to the cart session variable
	$_SESSION['cart'][$pid] = $qty1;

}	

	// Display the cart if it is not empty
	$list = "". implode(",", $_SESSION['cart']) ."";
	print $list;
					// Retrieve all of the information for the products in the cart
		$query = "SELECT * FROM supplements WHERE supp_id IN ($list)";
		$result = mysql_query($query) or die(mysql_error());

		// create a table and a form
		print <<<TOP
		 <table width="790" align="center" bgcolor="#b3314b" cellpadding="0" cellspacing="0">
          <tr><td height="450">
					<table summary="" width="560" align="center" bgcolor="#b3314b">
<tr>
<td nowrap align="center"><font face="arial" size="2" color="white">></font></tr></table>
					<table summary="" align="center" width="560" border="1">
					<tr>
					<td>
					<table border="0" width="560" cellpadding="3"bgcolor="#b3314b">
					<tr>
					<td align="left" width="250"><font face="arial" size="2" color="white"><b>Supplement</b></font></td>

					<td align="right" width="120"><font face="arial" size="2" color="white"><b>Line Total</b></font></td>
					</tr>
			<form action="view_cart.php" method="post">		
TOP;
		// Print each item
		$total = 0; // total cost of the order
		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
		/*
		if ($row['specials_discount'] > 0) {
		$list_price_out = $row['price'] / $row['specials_discount'];
		} else {
      $list_price_out = $row['price'];
      }
      */
  $supplement_out = $row['supplement'];
  print $supplement_out;
      $list_price_out = $row['price'];
      $list_price_out = number_format($list_price_out, 2, '.', '');
		// Calculate the total and subtotals
		$subtotal = $_SESSION['cart'][$row['supp_id']] * $list_price_out;
		$subtotal = number_format($subtotal, 2, '.', '');
		$total += $subtotal;
		$total = number_format($total, 2, '.', '');
		// if ($_SESSION['cart'][$row['supp_id']] > 0) {
		// print the row
		print <<<ROW
					<tr>

					<td align="left"><font face="arial" size="2" color="white">{$row['supplement']}</font></td>

					<td align="center">
            
            <input type="text" size="3" name="product[{$row['supp_id']}]" value="{$_SESSION['cart'][$row['supp_id']]}"></td>
            
<td align="right"><font face="arial" size="2" color="white">R $list_price_out </font></td>
<td align="right"><font face="arial" size="2" color="white">R $subtotal</font></td>
</tr>
ROW;
// }
} // end of the WHILE loop
// print the footer and close the table and the form
print <<<FOOTER
<tr>
<td></td><td></td><td></td>
<td align="right" valign="top"><font face="arial" size="2" color="white"><b>Total:</b></font></td>
<td align="right" valign="top"><font face="arial" size="2" color="white"><b>R $total</b></font><br><br></td>
</tr>
</table>
<div align="center">
  <table width="260" align="center">
<tr><td width="130" align="right"><input type="image" name="submit" src="images/update_cart.jpg" border="0"></form></td><td width="130" align="left"><form action="checkout.php" method="post"><input type="image" name="checkout" src="images/checkout.jpg" border="0"></form>
</td><td width="85"></td></tr></div>
FOOTER;
/*
print <<<EMP
					<table border="0" width="580" align="center">
					<tr>
					<td>
					<table summary="" width="300" border="1" style="border-color:#960232" bgcolor="#f8f3c2" align="center">
					<tr>
					<td>
					<table border="0" width="300" cellpadding="3">
					<tr><td align="center"><p><font face="arial" size="2" color="#5e5d5d">Your cart is empty!</font>
					</td></tr></table></table></table>
EMP;
*/

?>

        </table>
         </table>
         
  
         
       </body>
</html>

I have tried doing the script another way, but I get this error on my query

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM supplements WHERE supp_id IN (59, 41, 25, 22,)' at line 1

 

here is my code

<?php
  session_start();
  $photo_out = $_SESSION['file_details'];
  include 'header.php';
  
foreach($_POST['product'] as $key => $value)
{
$qty1 = $value;
$pid = $key;

	// add to the cart session variable
	$_SESSION['cart'][$pid] = $qty1;

}


if (isset($_POST['submit'])) {
		foreach ($_POST['product'] as $key => $value) {
		 if (($value == 0) AND (is_numeric($value))) {
				unset ($_SESSION['cart'][$key]);
				} elseif (is_numeric($value) AND ($value > 0)) {
					$_SESSION['cart'][$key] = $value;
				}
			}

			}

		// check if the shopping cart is empty
		$empty = TRUE;
		if (isset($_SESSION['cart'])) {
			foreach($_SESSION['cart'] as $key => $value) {
				if (isset($value)) {
					$empty = FALSE;

				}
			}
		}
	// Display the cart if it is not empty
	if (!$empty) {
    include 'includes/conn_db.php';
					// Retrieve all of the information for the products in the cart
		$query = "SELECT * FROM supplements WHERE supp_id IN ("; 
		foreach ($_SESSION['cart'] as $key => $value) {
		$query .= $key . ', ';
		}
		$query .= substr ($query, 0, -1) . ")";
		$result = mysql_query($query) or die(mysql_error());

		// create a table and a form
		print <<<TOP
		 <table width="790" align="center" bgcolor="#b3314b" cellpadding="0" cellspacing="0">
          <tr><td height="450">
					<table summary="" width="560" align="center" bgcolor="#b3314b">
<tr>
<td nowrap align="center"><font face="arial" size="2" color="white"><b>ORDER DETAILS FOR PHOTO $photo_out</b></font></tr></table>
					<table summary="" align="center" width="560" border="1">
					<tr>
					<td>
					<table border="0" width="560" cellpadding="3"bgcolor="#b3314b">
					<tr>
					<td align="left" width="250"><font face="arial" size="2" color="white"><b>Product</b></font></td>
					<td align="center" width="125"><font face="arial" size="2" color="white"><b>Size in mm</b></font></td>
					<td align="center" width="70"><font face="arial" size="2" color="white"><b>Qty</b></font></td>
					<td align="right" width="120"><font face="arial" size="2" color="white"><b>Unit Price</b></font></td>
					<td align="right" width="120"><font face="arial" size="2" color="white"><b>Line Total</b></font></td>
					</tr>
			<form action="view_cart.php" method="post">		
TOP;
		// Print each item
		$total = 0; // total cost of the order
		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
		/*
		if ($row['specials_discount'] > 0) {
		$list_price_out = $row['price'] / $row['specials_discount'];
		} else {
      $list_price_out = $row['price'];
      }
      */
      $list_price_out = $row['price'];
      $list_price_out = number_format($list_price_out, 2, '.', '');
		// Calculate the total and subtotals
		$subtotal = $_SESSION['cart'][$row['prod_id']] * $list_price_out;
		$subtotal = number_format($subtotal, 2, '.', '');
		$total += $subtotal;
		$total = number_format($total, 2, '.', '');
		if ($_SESSION['cart'][$row['prod_id']] > 0) {
		// print the row
		print <<<ROW
					<tr>

					<td align="left"><font face="arial" size="2" color="white">{$row['supplement']}</font></td>

            
<td align="right"><font face="arial" size="2" color="white">R $list_price_out </font></td>
<td align="right"><font face="arial" size="2" color="white">R $subtotal</font></td>
</tr>
ROW;
}
} // end of the WHILE loop
// print the footer and close the table and the form
print <<<FOOTER
<tr>
<td></td><td></td><td></td>
<td align="right" valign="top"><font face="arial" size="2" color="white"><b>Total:</b></font></td>
<td align="right" valign="top"><font face="arial" size="2" color="white"><b>R $total</b></font><br><br></td>
</tr>
</table>
<div align="center">
  <table width="260" align="center">
<tr><td width="130" align="right"><input type="image" name="submit" src="images/update_cart.jpg" border="0"></form></td><td width="130" align="left"><form action="checkout.php" method="post"><input type="image" name="checkout" src="images/checkout.jpg" border="0"></form>
</td><td width="85"></td></tr></div>
FOOTER;
} else {
print <<<EMP
					<table border="0" width="580" align="center">
					<tr>
					<td>
					<table summary="" width="300" border="1" style="border-color:#960232" bgcolor="#f8f3c2" align="center">
					<tr>
					<td>
					<table border="0" width="300" cellpadding="3">
					<tr><td align="center"><p><font face="arial" size="2" color="#5e5d5d">Your cart is empty!</font>
					</td></tr></table></table></table>
EMP;
}
?>

        </table>
         </table>
         
  
         
       </body>
</html>

I believe I mentioned this in one of my previous posts but, the problem that's occurring is due to the extra comma after the #22.  You have to change your logic a bit.

 

         $i=0;  //ADDED
         $query = "SELECT * FROM supplements WHERE supp_id IN ("; 
         foreach ($_SESSION['cart'] as $key => $value) {
            $query .= ($i==0) ? $key : ','.$key;  //CHANGED
            $i++;  //ADDED
         }

Thanks but my problem was that I had the following line

 

if ($_SESSION['cart'][$row['prod_id']] > 0) {

and it should have been

 

if ($_SESSION['cart'][$row['supp_id']] > 0) {

 

It all works now

 

Thanks Maq I really appreciated your help and time. I learned a lot

 

Lional

 

It all works now

 

Thanks Maq I really appreciated your help and time. I learned a lot

 

Lional

 

Sure no problem.  Glad it all works now, after that grueling display of modifying and debugging code, but that's how you learn.

 

Please mark [sOLVED]  ;)

Archived

This topic is now archived and is closed to further replies.

×
×
  • 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.