Forum: PC-Programmierung Shop Bestellsystem Problem


von Paul S. (flughafen2)


Lesenswert?

Problem:
Bei einem Shop kann ein Kunde (test_benutzer) bestellen. Dazu legt er 
die Produkte im Warenkorb.
1
DATENBANKTABELLE WARENKORB
2
id  produktid  benutzer
3
1   47         test_benutzer
4
2   925        test_benutzer
5
3   12         einbenutzer
6
DATENBANKTABELLE KATALOG
7
id  name             verfügbar
8
47  Widerstand 1K    10
9
12  Kondensator 2pF  0
10
925 Fernseher        12
Dann kommt der Bestellprozess (bei nichtverfügbarkeit geblockt), der 
Kunde gibt seine Daten an, diese werden in SESSIONS gespeichert.
Nun möchte ich, dass die folgenden Dinge passieren:
- in die Tabelle bestellungen werden die Daten eingegeben (gelöst).
- jedes Produkt, das er im Warenkorb hat, wird in der Tabelle Katalog 1 
weniger verfügbar. (?)

$user ist definiert.
So würde ein herausfinden der Datensätze aussehen:
1
$db=mysqli_connect("host","xxxxxxxx","xxxxxxxx");
2
    mysqli_set_charset($db,"utf8");
3
    mysqli_select_db($db,"shop");
4
    $sql = "SELECT * FROM warenkorb WHERE benutzer='$user'";
5
    $result = mysqli_query($db,$sql);
6
    while ($row = mysqli_fetch_assoc($result)){
7
      //mache was mit den Daten
8
    }
9
    mysqli_close($db);
Nur wie kann man die Verfügbarkeit für JEDES der Produkte im Warenkorb 
von Benutzer $user um 1 dekriminieren?

Für 1 Produkt kann man das so machen, wobei ? die produktid aus der 
Tabelle warenkorb ist.
1
$sql="UPDATE katalog SET verfuegbarkeit=verfuegbarkeit-1 WHERE id=?"

: Bearbeitet durch User
von dfgdfgdfg (Gast)


Lesenswert?

Hm die Tabellen joinen und jede Spalte davon dekrementieren?

von Lurch (Gast)


Lesenswert?

UPDATE katalog SET verfuegbarkeit=verfuegbarkeit-1 WHERE id IN 
(1,3,6,234,2352,alle weiteren produkt_id...)

von STK500-Besitzer (Gast)


Lesenswert?

Man darf nur jeweils ein Teil bestellen?
Komischer Laden...

von Nase (Gast)


Lesenswert?

Paul Schmitz schrieb:
> $sql = "SELECT * FROM warenkorb WHERE benutzer='$user'";
Du solltest Grundlagen lernen, sofern du mit deinem Shop irgendetwas 
Ernsthaftes vorhast.

von Paul S. (flughafen2)


Lesenswert?

STK500-Besitzer schrieb:
> Man darf nur jeweils ein Teil bestellen?
> Komischer Laden...

Darf man nicht nur 1, man kann mehrere im Warenkorb haben, die dann alle 
Bestellt werden.

von STK500-Besitzer (Gast)


Lesenswert?

Paul Schmitz schrieb:
> $sql="UPDATE katalog SET verfuegbarkeit=verfuegbarkeit-1 WHERE id=?"

Das bedeutet für mich, dass jeder Kunde nur jeweils ein Teil aus dem 
Sortiment bestellen darf.

Paul Schmitz schrieb:
> STK500-Besitzer schrieb:
>> Man darf nur jeweils ein Teil bestellen?
>> Komischer Laden...
>
> Darf man nicht nur 1, man kann mehrere im Warenkorb haben, die dann alle
> Bestellt werden.

Mein Post war wohl missverständlich.

Eine Bestellmenge kann man nicht eingeben?

von Datenbanker (Gast)


Lesenswert?

Nase schrieb:
> Paul Schmitz schrieb:
>> $sql = "SELECT * FROM warenkorb WHERE benutzer='$user'";
> Du solltest Grundlagen lernen, sofern du mit deinem Shop irgendetwas
> Ernsthaftes vorhast.

Gut, "benutzer" könnte der Effizienz wegen als INT verwirklicht werden, 
außerdem ein Semikolon and Ende der Abfrage. Aber das ist doch für ein 
Warenkorb-System, in dem vielleicht mal ein paarhundert Einträge 
gleichzeitig stehen, erstmal egal.
Natürlich nur, wenn $user gegen SQL-Injection geschützt ist.

Paul Schmitz schrieb:
> $db=mysqli_connect("host","xxxxxxxx","xxxxxxxx");
Ich würde Benutzername, Passwort und den Namen der Datenbank in 
Variablen auslagern und diese in einer include-Datei (z.B. Namens 
sql_data.php) aufbewahren:
Wenn du dann einmal die Login-Daten änderst (z.B. wegen Server-Umzug, 
zweites System aufbauen, ...) musst du nur an einer Stelle die SQL-Daten 
anpassen und nicht in jedem Skript einzeln.

von Pandur S. (jetztnicht)


Lesenswert?

Schon mal ueberlegt was passiert, wenn mehrere Benutzer einen Warenkorb 
offen haben, offen halten, jeder hat 60% der verfuegbaren Menge drin. 
Wann werden denn nun die Teile abgebucht ? Natuerlich erst bei 
Bestellung ? Erst bei Vorauskasse eingetroffen ?

von Paul S. (flughafen2)


Lesenswert?

Jetzt Nicht schrieb:
> Schon mal ueberlegt was passiert, wenn mehrere Benutzer einen Warenkorb
> offen haben, offen halten, jeder hat 60% der verfuegbaren Menge drin.
> Wann werden denn nun die Teile abgebucht ? Natuerlich erst bei
> Bestellung ? Erst bei Vorauskasse eingetroffen ?

Wenn der Besteller auf den Knopf 'Bestätigen und jetzt bestellen' am 
Ende klickt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.