Shop Bestellsystem Problem

OP #3949297
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=?"
Gast
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?
Gast
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.
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 ?
OP
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.