Seite 1 von 1

Prob mit DB-Eintrag

Verfasst: 09.02.2004 20:34
von thl1000
Moin,

wahrscheinlich bin ich heute zu blöde...

Folgendes Prob:

Code: Alles auswählen

$sql = "SELECT * FROM  " . PRODUCTS_TABLE . " WHERE cat_id = " . $viewcat . "  ORDER BY prod_price";

if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not query products information', '', __LINE__, __FILE__, $sql);
	}

	$product_data = array();

	while( $row = $db->sql_fetchrow($result) )
	{
		$product_data[] = $row;
		reset($product_data);
	}

	if ( !($total_products = count($product_data)) )
	{
		message_die(GENERAL_MESSAGE, "In dieser Kategorie sind keine Speisen vorhanden!");
	}

	for($j = 0; $j < $total_products; $j++)
	{
		if ( !empty($product_data) )
		{					
			$product_id = $product_data[$j]['prod_id'];
			$product_name = $product_data[$j]['prod_name'];
			$product_desc = $product_data[$j]['prod_desc'];
			$product_price = $product_data[$j]['prod_price'];

			$s_hidden_fields = '<input type="hidden" name="prod_price" value="' . $product_price . '" /><input type="hidden" name="prod_id" value="' . $product_id . '" />';
			
			$template->assign_block_vars('forumrow', array(
				'PRODUCT_ID' => $product_id,
				'PRODUCT_NAME' => $product_name,
				'PRODUCT_DESC' => $product_desc,
				'PRODUCT_PRICE' => $product_price . " €",
				
				'S_HIDDEN_FORM_FIELDS' => $s_hidden_fields
				)
			);
		}
	}
}

if ( $prod_id )
{
	if ( !$userdata['session_logged_in'] )
	{
		$redirect = POST_CAT_URL . "=" . $viewcat;
		redirect(append_sid("login.$phpEx?redirect=card.$phpEx&" . $redirect, true));	
	}
	
	$sql = "SELECT session_id FROM " . SESSIONS_TABLE . " WHERE session_user_id = " . $userdata['user_id'];
	
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain session information', '', __LINE__, __FILE__, $sql);
	}
	
	$row = $db->sql_fetchrow($result);
	$session_id = $row['session_id'];
	
	$sql = "SELECT MAX(cart_id) AS total FROM " . CART_TABLE;
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain next cart_id information', '', __LINE__, __FILE__, $sql);
	}

	if ( !($row = $db->sql_fetchrow($result)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain next cart_id information', '', __LINE__, __FILE__, $sql);
	}
	
	$new_id = $row['total'] + 1;
	
	$prod_id = $HTTP_POST_VARS['prod_id'];
	$prod_price = $HTTP_POST_VARS['prod_price'];
	
	
	$sql = "INSERT INTO " . CART_TABLE . " (cart_id, cart_quantity, session_id, user_id, session_ip, prod_id, prod_price) VALUES ('$new_id', '$quantity', '$session_id', '$userdata[user_id]', '$userdata[session_ip]', '$prod_id', '$prod_price')";
	
	if ( !$db->sql_query($sql) )
	{
		message_die(GENERAL_ERROR, 'Could not insert data into cart table', '', __LINE__, __FILE__, $sql);
	}
}

$template->assign_vars(array(
	'L_ITEM' => "Menge",
	'L_PRICE' => "Preis",
	'L_ADD_TO_CART' => "zum Warenkorb hinzufügen",
	'L_ORDER' => "Bestellung abgeben",
	
	'S_ADD_TO_CART' => append_sid("card.$phpEx?c=" . $viewcat),
	'U_VIEW_CART' => append_sid("view_cart.$phpEx")
	)
);
Wenn ich nun den Submit-Button anklicke, wird immer das letze Produkt in die DB eingetragen, ich komme nicht auuf den Fehler...

Hier noch das Template:

Code: Alles auswählen

<form action="{S_ADD_TO_CART}" method="post">
<table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
	<tr> 
		<!-- BEGIN catrow -->
		<th class="row1" height="25" colspan="2" nowrap="nowrap">&nbsp;{catrow.CAT_TITLE}&nbsp;</th>
		<!-- END catrow -->
  	</tr>
  	<tr> 
		<th class="thCornerL" height="25" width="70%" nowrap="nowrap">&nbsp;{L_PRODUCT}&nbsp;</th>
		<th class="thCornerL" height="25" width="15%" nowrap="nowrap">&nbsp;{L_ITEM}&nbsp;</th>
		<th class="thCornerL" height="25" width="15%" nowrap="nowrap">&nbsp;{L_PRICE}&nbsp;</th>	
  	</tr>
  	<!-- BEGIN forumrow -->
  	<tr> 
		<td bgcolor="{forumrow.ROW_COLOR}" width="70%" height="50">
			<span class="forumlink"> 
				<a href="#">{forumrow.PRODUCT_NAME}</a>
				<br />
	  		</span> 
	  		<span class="genmed">
	  			{forumrow.PRODUCT_DESC}
	  			<br />
	  		</span>
		</td>
		<td class="row2" align="center" valign="middle" height="50">
			<span class="gensmall">
				<input type="text" name="quantity" value="1" size="2" maxlength="2">
			</span>
		</td>
		<td class="row2" align="center" valign="middle" height="50">
			<span class="gensmall">
				{forumrow.PRODUCT_PRICE}
			</span>
		</td>
		<td class="row1" align="center" valign="middle">
			{forumrow.S_HIDDEN_FORM_FIELDS}
			<input type="submit" name="submit" class="mainoption" value="{L_ADD_TO_CART}" />
		</td>
	<!-- END forumrow -->
</table>
</form>
Bin für jede Hilfe dankbar...

Re: Prob mit DB-Eintrag

Verfasst: 09.02.2004 21:42
von Dwing
thl1000 hat geschrieben: Wenn ich nun den Submit-Button anklicke, wird immer das letze Produkt in die DB eingetragen, ich komme nicht auuf den Fehler...
Und was soll es eintragen?

RE

Verfasst: 09.02.2004 21:59
von thl1000
Hallo,

es soll folgendes eingtragen werden:

Code: Alles auswählen

$sql = "INSERT INTO " . CART_TABLE . " (cart_id, cart_quantity, session_id, user_id, session_ip, prod_id, prod_price) VALUES ('$new_id', '$quantity', '$session_id', '$userdata[user_id]', '$userdata[session_ip]', '$prod_id', '$prod_price')";
Steht doch oben schon im Code...

Es sollen also, unteranderem, die Produkt-Id, der Produkt-Preis und die Produktmenge eingetragen werden. Das sind eben die Punkte, wo es nicht funktioniert. Es werden immer die Daten des letzten Produktes eingetragen, und nicht die Daten des gewählten Produktes.

Verfasst: 09.02.2004 22:08
von Dwing
Ich find jetzt auf Anhieb auch keinen Fehler.
Was du mal versuchen könntest, alle Variable die im Query stehen, bevor sie definiert werden durch unset(); schicken.

Code: Alles auswählen

unset($prod_price);
unset($prod_id);
unset($new_id);
unset(...);

$new_id = $row['total'] + 1;
   
$prod_id = $HTTP_POST_VARS['prod_id'];
$prod_price = $HTTP_POST_VARS['prod_price']; 

RE

Verfasst: 09.02.2004 22:14
von thl1000
Das funzt auch nicht,

in den Variablen

Code: Alles auswählen

$prod_id = $HTTP_POST_VARS['prod_id'];
$prod_price = $HTTP_POST_VARS['prod_price'];
stehen immer nur die ID und der Preis des letzten Produktes.

Ich verzweifle noch...

Verfasst: 11.02.2004 13:30
von Pyramide
Wenn du in ein Formular zig Felder mit dem selben Namen einbaust, muss sich der Browser ja für einen Wert entscheiden, den er senden soll. Beginne und beende das Formular mal innerhalb des forumrow-Blocks (wieso eigentlich forumrow?).