warenkorb

M

manuelag

Neues Mitglied
Thread Starter
Dabei seit
26.01.2007
Beiträge
13
Reaktionspunkte
0
Hallo,
leider bin ich im Forum nicht fündig geworden, bastel schon seit Wochen an einem Warenkorb herum, da ich gerade versuche PHP und SQL zu erlernen. Wäre klasse, wenn mir jemand helfen könnte. Am besten so, dass es auch ein Neuling versteht. Von meiner Artikelseite sollen auf klick die Waren in den Warenkorb gelegt werden, was leider nicht funktioniert. Es steht leider nur das gesamte Gerüst da, ohne Daten. irgednwo gehen mir die Daten verloren...

Danke
Manuela


Das Script sieht folgendermaßen aus:

Code:
<?php
session_start();
include("dbconnect.php");

$_SESSION['nummer'] = $kundennummer;

if(!isset($_GET['id'])) {
$sql = "INSERT into
    warenkorb
        artikelid,
        kundennummer,
        anzahl
    values ($id, ".$_SESSION['nummer'].", $anzahl)";

mysql_query($sql) or die(mysql_error());
}
$sql = "SELECT
            name,
            preis,
            anzahl
        from
            artikel,
            warenkorb
        WHERE
            warenkorb.kundennummer=".$_SESSION['nummer']." AND artikel.id=warenkorb.artikelid";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);

$anzahl = "UPDATE
                warenkorb
            SET
                anzahl=".($row['anzahl']+1)
            ."WHERE
                artikelid='$artikelid'
            AND
                kundennummer='$kundennummer'";
$result = mysql_query($anzahl) or die(mysql_error());

?>

<html>
<head><title>Warenkorb</title></head>
<body>
<h1>Warenkorb</h1>
<p><a href="bestellung.php">Jetzt bestellen</a><br><br>
<p>Folgende Artikel liegen im Warenkorb<p>
<table cellspacing=2 cellpadding=4 border=0>
<tr bgcolor="yellow">
<th>Artikel</th><th>Preis</th><th>Anzahl</th>
</tr>
<?php  

    print "<tr bgcolor='#cccccc'>";
    print "<td>".$row['name']."</td><td>".$row['preis']." Euro</td><td>".$row['anzahl']."</td><td><a href='warenkorb.php?delete=".$row['artikelid']."'>"."Artikel l&ouml;schen</a></td>";
    print "</tr>";            
?>
</table>
<p><a href="artikel.php">Zurück zur Artikelseite</a></p>
</body></html>
 
Magst Du den Quelltext bitte mit den PHP-Tags vom Forum einfügen?
Dann geht auch die Einrückung nicht verloren, und das ganze wird lesbar :)
Ansonsten:
Grundsätze:

Den Query ausgeben lassen, und mit PHPMyAdmin überprüfen, ob der auch was ausgibt.

Das Result-Array mal mit print_r($arrayname) ausgeben lasse, und gucken, wie der Inhalt ist.

gruß
Lukas
 
PHP:
if(!isset($_GET['id'])) {
$sql = "INSERT into 
	warenkorb 
		artikelid, 
		kundennummer, 
		anzahl
	values ($id, ".$_SESSION['nummer'].", $anzahl)";

mysql_query($sql) or die(mysql_error());
}

Überprüf auch mal, ob der Code im if-Zweig überhaupt ausgeführt wird.
Wo werden die Variablen $id und $anzahl initialisiert?
 
PHP Tags vom Forum? Leider weiß ich nicht, wo ich die finde.

Grüße
Manuela
 
Entweder Manuel wie HTML-Tags einfügen, mit [ PHP ][ /PHP ] ohne Lerzeichen.
Oder beim Erstellen, bzw erweiterten Erstellen eines Beitrag in der Icon-Leiste über der Textarea, bei mir das zweite Icon von Rechts. Steht auch klein PHP drin. :)

gruß
Lukas
 
Zuletzt bearbeitet von einem Moderator:
Sorry, das php war etwas winzig...
Falls das so auch nicht klappt, habe ich die Datei angehängt.

Manuela


PHP:
<?php
session_start();
include("dbconnect.php");

$_SESSION['nummer'] = $kundennummer;

if(!isset($_GET['id'])) {
$sql = "INSERT into
    warenkorb
        artikelid,
        kundennummer,
        anzahl
    values ($id, ".$_SESSION['nummer'].", $anzahl)";

mysql_query($sql) or die(mysql_error());
}
$sql = "SELECT
            name,
            preis,
            anzahl
        from
            artikel,
            warenkorb
        WHERE
            warenkorb.kundennummer=".$_SESSION['nummer']." AND artikel.id=warenkorb.artikelid";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);

$anzahl = "UPDATE
                warenkorb
            SET
                anzahl=".($row['anzahl']+1)
            ."WHERE
                artikelid='$artikelid'
            AND
                kundennummer='$kundennummer'";
$result = mysql_query($anzahl) or die(mysql_error());

?>

<html>
<head><title>Warenkorb</title></head>
<body>
<h1>Warenkorb</h1>
<p><a href="bestellung.php">Jetzt bestellen</a><br><br>
<p>Folgende Artikel liegen im Warenkorb<p>
<table cellspacing=2 cellpadding=4 border=0>
<tr bgcolor="yellow">
<th>Artikel</th><th>Preis</th><th>Anzahl</th>
</tr>
<?php   

    print "<tr bgcolor='#cccccc'>";
    print "<td>".$row['name']."</td><td>".$row['preis']." Euro</td><td>".$row['anzahl']."</td><td><a href='warenkorb.php?delete=".$row['artikelid']."'>"."Artikel l&ouml;schen</a></td>";
    print "</tr>";             
?>
</table>
<p><a href="artikel.php">Zurück zur Artikelseite</a></p>
</body></html>
 
Hallo No Nick,
die Variablen id und anzahl sind in der Datenbank Artikel enthalten, bzw Anzahl soll zu Warenkorb neu hinzugefügt werden.

Grüße
Manuela
 
Hallo

Wenn das Skript vollständig ist, dann enthalten die Variablen aber an den Stellen, an denen Du Sie verwendest, keine Werte.

Auch $kundennummer, deren Wert Du an die Session übergeben willst, ist wohl leer.

Lass Dir die Query doch einfach mal ausgeben (mit echo oder print), dann siehst Du, welche Anfrage an MySQL gesendet werden soll.

lg
 
Klasse, jetzt gibt es folgende fehlermeldung:

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 'artikelid='' AND kundennummer='3'' at line 5

lg
Manuela
 
Das ist doch schon mal etwas ;)
Der Fehler kommt von der Update-Query? Sieht so aus, als wär die Variable $artikelid leer.

lg
 
das erste insert wird doch nie ausgefuehrt, oder? mal abgesehen davon, dass der insert doch eigentlich

Code:
insert into tabelle (spalte1, spalte2) values (wert1, wert2)

lauten sollte, oder?

und noch was: google mal nach sql injection. es ist absolut schlechter stil, einfach eine variable vom browser fuer abfragen an die datenbank zu verwenden. bist du dir denn sicher, dass in id immer "123" steht und nicht z.b. sowaswie "1; drop database"?

markus
 
Session will nicht

ich bekomme es nicht hin, dass die Session die Kundennummer aus der Datenbank kunden übernimmt. Ich mache offensichtlich etwas in der Registierung oder Abfrage falsch. Einfach definierte werden weitergegben, aber eine, die sich aus der Datenbank den Wert holt, eben nicht, dadurch habe ich keine eindeutige Zuordnung der User und kann damit auch die Bestellungen nicht zuordnen. nachdem ich nun mittelrweile planlos rumprobiert habe, hoffe, mir kann hier jemand helfen:

der authorifizierungs code:
PHP:
<?php
/*Sessions müssen vor allem anderen aufgerufen werden*/
session_start();
if (isset($kennung)) {
$sql = "SELECT
			vorname,
			nachname,
			kundennummer
		FROM
			kunden
		WHERE
			kennung='$kennung'
		AND
			passwort='$passwort'";
			
$result = mysql_query($sql) or die (mysql_error());

/*Falls keine Ergebniszeile vorliegt sind die Daten nicht korrekt*/
if (!($row = mysql_fetch_row($result))) {
	/*weiterleiten zum Anmeldeformular und 
	Übergabe einer Fehlermeldung*/
	header("Location: .
	http://".$_SERVER['HTTP_HOST'] ." /index.php?meldung=Login inkorrekt");
	}
	else {
	/*Daten korrekt, also Wert in Session speichern*/
	$_SESSION['angemeldet']="ja";
	$_SESSION['manuela']="Hallo Du!";
	$_SESSION['nummer'] = $kundennummer;
	}
	}
	else if($_SESSION['angemeldet']!="ja") {
	//weiterleiten zum Anmeldeformular
	header("Location:http://".$_SERVER['HTTP_HOST']."/index.php");
	}
	/*falls Daten korrekt, wird jetzt normal weitergemacht*/
	?>
 
ich bekomme es nicht hin, dass die Session die Kundennummer aus der Datenbank kunden übernimmt. Ich mache offensichtlich etwas in der Registierung oder Abfrage falsch. Einfach definierte werden weitergegben, aber eine, die sich aus der Datenbank den Wert holt, eben nicht, dadurch habe ich keine eindeutige Zuordnung der User und kann damit auch die Bestellungen nicht zuordnen. nachdem ich nun mittelrweile planlos rumprobiert habe, hoffe, mir kann hier jemand helfen:

der authorifizierungs code:
PHP:
<?php
/*Sessions müssen vor allem anderen aufgerufen werden*/
session_start();
if (isset($kennung)) {
$sql = "SELECT
			vorname,
			nachname,
			kundennummer
		FROM
			kunden
		WHERE
			kennung='$kennung'
		AND
			passwort='$passwort'";
			
$result = mysql_query($sql) or die (mysql_error());

/*Falls keine Ergebniszeile vorliegt sind die Daten nicht korrekt*/
if (!($row = mysql_fetch_array($result,MYSQL_ASSOC))) {     // HIER
	/*weiterleiten zum Anmeldeformular und 
	Übergabe einer Fehlermeldung*/
	header("Location: .
	http://".$_SERVER['HTTP_HOST'] ." /index.php?meldung=Login inkorrekt");
	}
	else {
	/*Daten korrekt, also Wert in Session speichern*/
	$_SESSION['angemeldet']="ja";
	$_SESSION['manuela']="Hallo Du!";
	$_SESSION['nummer'] = $row['kundennummer'];    // HIER
	}
	}
	else if($_SESSION['angemeldet']!="ja") {
	//weiterleiten zum Anmeldeformular
	header("Location:http://".$_SERVER['HTTP_HOST']."/index.php");
	}
	/*falls Daten korrekt, wird jetzt normal weitergemacht*/
	?>


Du kannst nach einem mysql_fetch_row nicht auf die Spalten mit $spaltenname zugreifen...
Ich hab das Script mal ein wenig umgeändert, bei den // HIER sind die Änderrungen:

Einmal statt mysql_fetch_row hab ich mysql_fetch_array() gewählt. Damit kann man auch mit dem Spaltennamen auf das Ergebniss zugreifen.

Dann hab ich die Zeie, wo die Nummer gespeichert wird geändert.
mysql_fetch_array (und auch row() ) liefern nämlich ein Array zurück.

Jetzt sollte es klappen :)

gruß
Lukas
 
Super, danke!!!! Es klappt wirklich!
 
hinzuaddieren

Ein Problem gelöst, taucht natürlich ein weiteres auf. Ich hoffe nochmal auf den entscheidenden Hinweis. Die Bestellung wird brav im Warenkorb aufgeführt, aber die Positionen werden nicht aufaddiert, sondern einzeln aufgeführt.:rolleyes:

PHP:
<?php
	
	include("dbconnect.php");
	include("authentifizierung.php");
	
	session_start();
	
	//Abfrage ob schon gleiche Datensätze vorhanden sind
	//um dann je nach Ergebniss die Anzahl zu erhöhen
	//oder neuen Datensatz anlegen

	
	$abfrage="SELECT 
				id,
				kundennummer
			  FROM
				artikel, 
				kunden";

	$result = mysql_query($abfrage) or die (mysql_error());
	
	// Testausgabe ob Werte übergeben sind
	
	echo "<br>SNR:".$_SESSION['nummer'];
	echo "<br>Name:" .$_SESSION['name'];
	echo "<br>id".$id." ";
	
	
	if (mysql_num_rows($result)==0) { 
		while($count = mysql_fetch_assoc($result)){
        if ($id == $count['artikelid'] and $count['anzahl']>='1'){
   
                    echo $count['anzahl'];
                    echo"<br>Beim update warenkorb<br>";
           
                        $sql="UPDATE
                                warenkorb
                              SET
                                anzahl = ".($count['anzahl']++)."
                              WHERE
                                artikelid = $id
                            AND
                                kundennummer = '".$_SESSION['nummer']."'
                            ";
                   
           
                    mysql_query($sql) or die ("Folgender Fehler beim Update trat auf:".mysql_error());
                    echo $id = $count['artikelid'];
        }       
        else if(!($id == $count['artikelid']) and $count['anzahl'] <= '0')
        {
        echo "<br>Insertinto_SQL-schreiben:<br>";
                              $sql="INSERT INTO warenkorb
                                (kundennummer, artikelid,anzahl )
                               VALUES
                                    ('".$_SESSION['nummer']."', $id, '1')";
                     
                          mysql_query($sql) or die (mysql_error());       
        }
    }   
	}	
	else {echo "nichts";
	
	
		//Bestelldaten in Datenbank schreiben
		//Da das bestellid-Feld auf autoincrement
		//gesetzt wurde , muss es nicht angegeben werden.
		    
			  $sql="INSERT INTO warenkorb
				(kundennummer, artikelid,anzahl )
			  VALUES
				('".$_SESSION['nummer']."', $id, '1')";
		  
			  mysql_query($sql) or die (mysql_error());
		  
		}
		  
	
	// Warenkorb anzeigen
	
		  $sql="SELECT
					name,
					preis,
					anzahl
				FROM
					artikel,
					warenkorb
				WHERE
					warenkorb.kundennummer = '".$_SESSION['nummer']."'
				AND
					artikel.id = warenkorb.artikelid";
		  
		  $result = mysql_query($sql) or die (mysql_error());

?>

<html>
	<head><title>Warenkorb</title></head>
		<body>
			<h1>Warenkorb</h1>
				Folgende Artikel haben Sie vorgemerkt
				<table cellspacing=2 cellpadding=4 border=0>
					<tr bgcolor="yellow">
						<th>Artikel</th><th>Preis</th><th>Anzahl</th>
<?php
        
		while($row = mysql_fetch_assoc($result)){
                 print "<tr bgcolor='#cccccc'>";
                 print "<td>".$row['name']."</td><td>".$row['preis']." Euro</td><td>".$row['anzahl']."</td>";
		}
				 
        
?>
</table>
<a href="artikel.php">Zurueck zur Artikelseite</a>
</body>
</html>
 
Dürfte ich dazu mal die Tabellenstrukturen sehen? Wenn die Spalte "anzahl" nämlich Integer ist (was sie sein sollte), dann kannst Du imho nicht mit einem Textwert vergleichen. Die "Zahl" mit der Du vergleichst, machst Du aber durch die " ' " zu einem Textwert.

Zudem, das "else if" gehört zusammen, also "elseif".

Dann, das allerste Query, ich gehe jede Wette ein, dass das so nicht stimmt...
Denn damit gibst Du ALLE Datensatzkombinationen von den Tabellen "artikel" und "kunden" aus. Das kann nicht erwünscht sein...

(Mehr hab ich nicht nachgeguckt, sorry)

Ich weiß ja jetzt nicht, wie lange Du schon PHP und MySQL machst, aber ganz ehrlich, ohne Dir zu nahe treten zu wollen:
Ich glaube nicht, das Du fitt genug darin bist, ein Shop-System darin aufzubauen. Vor allem, weil gerade diese Dinger auch noch Auflagen erfüllen müssen, damit man sie einsetzen darf.

Ich weiß ja nicht, inwieweit Du das Script auch produktiv einsetzen möchtest, wenn es Dir nur zum Lernen dient, bin ich der Meinung, dass Du lieber mit was kleinerem anfängst, bzw. weitermachst...

Ich mein, das Potenzial und der Wille scheint da zu sein, definitiv, aber die Erfahrung, die vermisse ich ein wenig ;)
Und ich bin eher so ein Mensch, der lieber ein kleines Projekt 10 mal macht, und danach die Sachen sicher im Kopf hat, als ein großes Projekt zu machen, bei dem ich irgendwann überfordert bin. :)

lieben Gruß
Lukas
 
Hallo Lucas,
du hast zweifelsfrei recht, dass ich ein blutiger Anfänger bin. Mein Problem ist aber, dass ich dabei bin es zu lernen und diese Aufgabe eine Lernaufgabe ist, deren Ergebnis ich brauche. Mein Ziel ist es nicht, Webshops zu schreiben und ins Internet zu stellen, keine Sorge. Das ganze ist ein Fernstudium und läuft neben der "normalen" Arbeit. Und beim Tutor erhält man immer gaaaanz tolle tipps, wie "du musst debugging betreiben". oder es meldet sich gar niemand zurück. Deshalb hoffe ich hier Hilfe zu bekommen, da ich mit Büchern zur Zeit nicht mehr weiterkomme. oder kennst du ein "ultimatives"?

g
Manuela
 
ach so, hier auch die tabellenstruktur angehängt.

Manuela
 

Anhänge

  • Bild 1.jpg
    Bild 1.jpg
    66,1 KB · Aufrufe: 37
MIT K !!!! LUKAS MIT K!!!!! :D :D :D

Also, auf welches Material ich gerne zurückgreife ist folgendes:

Einmal das quakenet:#php Tutorial
http://tut.php-q.net/
Da wird alles mal angeschnitten, von PHP über SQL bishin zu OOP in PHP und dergleichen.
Das einmal gut durchlesen, das ein oder andere Beispiel machen, und danach kann mans auch als Nachschlagewerk benutzen :)

Dann, das SQL-PHP-Tutorial von reeg:
http://ffm.junetz.de/members/reeg/
Da ist vor allen Dingen SQL SEHR gut erklärt.

Als Funktionsreferenz hab ich dann noch SelfPHP:
http://www.selfphp.info/
Es ist um einiges Übersichtlichlicher als das Offline-PHP-Handbuch.
Und wenn man grob weiß, was für eine Funktion man sucht (Bsb. "Sortiere ein Array"), kann man ganz simpel einmal alle Funktionen aus dem Bereich (Array-Funktionen bei unserem Beispiel) durchklicken. Die Beispiele sind nicht immer der hit, aber für Details sollte man so oder so im PHP-Handbuch nachgucken :)

Mit den drein bin ich eigentlich recht gut gerüstet. Zumindest hats gereich, damit ich mit selbst PHP beibringen kann, ganz ohne Dozent :D

Ich hoffe mal, die Links helfen Dir ein wenig weiter.
lieben Gruß, und noch viel Spaß mit PHP
Lukas
 
Hallo Lukas mit K,
sorry für die falsche Schreibweise, danke für die Links. dann hoffe, ich mal, dass ich da finde, wonach mein Tutor sucht. Sind eben nicht alle so, dass sie von alleine diese Progarmmiersprachen erlernen....
 
Zurück
Oben Unten