Eintragung erfolgt nur teilweise

lordofscotland

Erfahrenes Mitglied
Hallo Community,

ich habe folgendes Problem, ich möchte in einem Shopsystem Artikel eintragen lassen.
Doch bei bestimmten Sachen klappt das ganze nicht, das Problem ist das der erste Artikel in jeder Tabelle nur zum Teil eingetragen wird.

Ich lasse das ganze folgendermassen geschehen:

PHP:
$a = $PHPSESSID;
include("dbconnect_inc.php");
$strQ = "SELECT * FROM products Where '$artnr' = art_nr and '$id' = id";
 $res = mysql_query($strQ);
 $anz = mysql_num_rows($res);
 while ( $z = mysql_fetch_row($res))
 {
 $strQ = "INSERT INTO warenkorb";
 $strQ.= "(art_nr, bezeichnung, preis, color, size, menge, connid)";
 $strQ.= " VALUES ('$z[2]', '$z[4]', '$z[7]', '$z[8]', '$weite', '$anzahl', '$a')";
 mysql_query($strQ);
 $n = mysql_affected_rows();
 if ( $n <> -1 )
{
print"
<div align=center>
<br><font style=color:#FFFFFF;>Produkt $z[4] erfolgreich in den Warenkorb gelegt</font></div>";
}
else
print "Es ist ein fehler aufgetreten\n\t
 $strQ";
}

Die Daten kommen aus einer Datei die zum Teil Formularelement enthält, zum besseren Verständis hänge ich die beiden Dateien hier mit an.

Dank im Voraus.

lordofscotland
 

Anhänge

Versuch mal mit der mysql_real_escape_string()- und der mysql_error()-Funktion zu arbeiten, beispielsweise:
PHP:
<?php

	…
	include 'dbconnect_inc.php';

	$query = "
		SELECT
		        *
		  FROM
		        `products`
		  WHERE
		        `art_nr` = '".mysql_real_escape_string($artnr)."'
		    AND `id`     = '".mysql_real_escape_string($id)."'
		";
	$result = mysql_query($query) or die(mysql_error());
	$anzahl = mysql_num_rows($result);
	while( $z = mysql_fetch_row($result) ) { 
		$query = "
			INSERT INTO
			        `warenkorb`
			  SET
			        `art_nr`      = '".mysql_real_escape_string($z[2])."',
			        `bezeichnung` = '".mysql_real_escape_string($z[4])."',
			        `preis`       = '".mysql_real_escape_string($z[7])."',
			        `color`       = '".mysql_real_escape_string($z[8])."',
			        `size`        = '".mysql_real_escape_string($weite)."',
			        `menge`       = '".mysql_real_escape_string($anzahl)."',
			        `connid`      = '".mysql_real_escape_string($a)."'
			";
		mysql_query($query) or die(mysql_error());
		$n = mysql_affected_rows();
		if( $n != -1 ) {
			echo '<p>Produkt '.$z[4].' erfolgreich in den Warenkorb gelegt</p>';
		}
	}
	…

?>
 
Danke das ganze klappt, nur gibt es noch einen kleinen winzigen Fehler, wenn der Kunde mehr als 9 Stück haben will, trägt das ganze mir nur 1 Stück ein.

*grübel* Wie geht das von statten bitte?
 
Warum machst du es dir denn so kompliziert? ;-)

1. Selektion: die ID ist redundant, da die Artikelnummer generell PK ist.

2. Selektion: In dieser Tabelle reichen folgende Angaben: PK (eigentlich nicht nötig, jedoch entspricht es dem guten Stil), SessionID, FK_Artikel (eigentlich hat jede Attributausprägung eine eigene Artikelnummer, entweder änderst du deine Struktur der Artikel-Tabelle, oder du musst die einzelnen Attribute (Farbe, Größe,...) mit in die Tabelle schreiben), Anzahl, Timestamp

Den Preise und die Bezeichnung erhältst du über den FK_Artikel (MwSt, Währung, Verpackung & Versandkosten (sollten jeweils als Fremdschlüssel in der Artikel-Tabelle liegen) bekommst du ebenfalls über die Artikel-Tabelle

Die SessionID dient der Zuordnung (zur Laufzeit) und der Timestamp dient dazu, die Inhalte des Warenkorbs nach X Min. wieder automatisiert zu löschen.


Schöne Grüße,
Claus
 
Zuletzt bearbeitet:
Nabend Community,

@ Gumbo

Irgend etwas klappt nicht ganz bei dem Script was du geschrieben hast, es trägt mir die Anzahl ein, doch die Größe bleibt leer.

Wie kann ich das ganze abändern damit es die Größe einträgt, dazu gesagt die Größe kann als Zahl 34/25 oder als einfaches zeichen XL vorhanden sein.

Danke im Voraus für die Hilfe.


lordofscotland
 
Ob die Datenbank-Abfrage mit den richtigen Werten gefüttert wird, müsstest du selbst überprüfen. Lass sie dir doch einfach ausgeben.
 
Zurück