tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von saftmeister
  • 1 Beitrag von saftmeister
  • 1 Beitrag von saftmeister
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
690
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FairfaX FairfaX ist offline Rookie
    Registriert seit
    Jun 2011
    Beiträge
    5
    Hallo zusammen!

    Ich arbeite jetzt schon seit einer Woche an einem Warenkorb-script mit Datenbankbasierten Login- und Registerbereich, welche auch alle funktionieren .

    Nun hab ich ein Problem, ich muss diese Warenkorb Session sprich den ausgewählten Warenkorbinhalt in eine Datenbank speichern.

    Tja und jetzt weis ich nicht mehr weiter , ich habe schon sämtliche Methoden aus verschieden Foren probiert aber irgendwie hakt es...

    Ich hoffe mir kann jemand helfen bzw. einen Denkanstoss geben wie ich dieses Problem lösen könnte.

    p.s. habe es mit session_set_save_handler()-Funktion auch probiert, aber verstehe es nicht ganz.....

    Hier meine Warenkorb.php und Index.php

    Indexx.php
    PHP-Code:
    <?php require warenkorb.php'; ?>

    <html>
    <head>

    </head>
    <body>

    <?php warenkorb(); ?>
    <br /><br />
    <?php produkte(); ?>

    </body>
    </html>

    Warenkorb

    warenkorb.php
    PHP-Code:
    <?php

    session_start
    ();

    $page 'indexx.php';

    mysql_connect ('localhost','root','') or die (mysql_error());
    mysql_select_db('warenkorb') or die(mysql_error());


    if (isset(
    $_GET['add'])) {
       
    $menge =mysql_query('SELECT id, menge FROM produkte WHERE id='.mysql_real_escape_string((int)$_GET['add']));
        while (
    $menge_row mysql_fetch_assoc($menge)) {
              if (
    $menge_row['menge']!=$_SESSION['cart_'.(int)$_GET['add']]) {
                 
    $_SESSION['cart_'.(int)$_GET['add']]+='1';

              }
       }
       
    header('Location: '.$page);
    }

    if (isset(
    $_GET['remove'])) {
      
    $_SESSION['cart_'.(int)$_GET['remove']]--;
      
    header('Location: '.$page);
    }

    if (isset(
    $_GET['delete'])) {
      
    $_SESSION['cart_'.(int)$_GET['delete']]='0';
      
    header('Location: '.$page);
    }
    echo 
    "<h3>Artikel im Einkaufswagen</h3>";

    function 
    produkte () {
     echo 
    "<h3>Vorhandene Artikel</h3>";
     
    $get mysql_query('SELECT id, name, beschreibung, preis FROM produkte WHERE menge > 0 ORDER BY id DESC');
     if (
    mysql_num_rows($get)==0) {
       echo 
    "Keine Artikel vorhanden!";
    }
     else {
        while (
    $get_row mysql_fetch_assoc($get)) {
              echo 
    '<p>'.$get_row['name'].'<br />'.$get_row['beschreibung'].'<br />&euro;'.number_format($get_row['preis'], 2).' <a href="warenkorb.php?add='.$get_row['id'].'">Add</a></p>';

        }
      }
    }

    function 
    warenkorb() {
      foreach(
    $_SESSION as $name => $value) {
       if (
    $value>0) {
         if (
    substr($name05)=='cart_') {
            
    $id substr($name5, (strlen($name)-5));
            
    $get mysql_query('SELECT id, name, preis FROM produkte WHERE id='.mysql_real_escape_string((int)$id));
            while (
    $get_row mysql_fetch_assoc($get)) {
             
    $sub $get_row['preis']*$value;
             echo 
    $get_row['name'].' x '.$value.' für &euro;'.number_format($get_row['preis'], 2).'  = &euro; '.number_format($sub2).' <a href="warenkorb.php?remove='.$id.'">[-]</a> <a href="warenkorb.php?add='.$id.'">[+]</a> <a href="warenkorb.php?delete='.$id.'">[Löschen]</a><br />';
            }
         }
         
    $total += $sub;
       }
      }
      if (
    $total==0) {
        echo 
    "Ihr Warenkorb ist leer.";
      }
      else {
       echo 
    '<p>Gesamt: &euro;'.number_format($total2).'</p>';
        echo 
    "<h5><a href='bestellung.php'>Bestellung abschließen</a> </h5>";

      }
    }


    ?>
    Geändert von FairfaX (02.06.11 um 05:12 Uhr)
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Viel einfacher wäre es, wenn du eine Cart-Klasse baust, oder statt einfach alles direkt in $_SESSION zu speichern, vorher in ein Array packen und dann das Array in $_SESSION speichern. Dann kannst du nämlich ganz einfach das komplette Array serialisieren und in der DB ablegen.

    Da ich allerdings die Vermutung habe, das du mit in der DB speicher meinst, das die gekauften Artikel einer Bestellung zugeordnet werden sollen: Du brauchst eine Tabelle Bestellungen, welche ID+Bestellnummer+UserID+ArtikelID+Menge und ggf. den Preis aufnehmen kann, sprich du brauchst die Spalten dafür. Einen INSERT-Query kann man dann ja problemlos vornehmen.

    Oder für welchen Zweck soll das Speichern denn nun stattfinden?
    FairfaX bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    FairfaX FairfaX ist offline Rookie
    Registriert seit
    Jun 2011
    Beiträge
    5
    Danke saftmeister, für deine schnelle Antwort!

    Zur Speicherung:
    Stimmt, die Artikel sollen einer Bestellung zugeordnet werden ( m zu n Beziehung?) da bräucht ich doch noch eine Tabelle z.B. BestellPosition oder....?

    Und der Code müsste dann so aussehen oder?: (Funktioniert nicht)

    PHP-Code:
    $query "INSERT INTO bestellungen (id, name, preis, menge) 
    VALUES ('
    $_SESSION . cart_() . ')"
              
    $abfsessions mysql_query($query); 
              if (!
    $abfsessions) die ("Fehler in der Abfrage"); 


    Gruß
    Geändert von FairfaX (02.06.11 um 15:55 Uhr)
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Nein, wenn du 4 Spalten angibst, musst du auch 4 Spalten füllen. Angenommen, du hast ein Array $cart, was in der Session liegt und so aussieht:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    $cart = array(
      'user' => '1234',   // Mal angenommen, das wäre die ID des Users saftmeister
      'bestellartikelliste' => array(  // Artikel im Warenkorb sind ja evtl. mehrer, also wieder ein array
         1 => array(       // Artikel haben Eigenschaften wie ID, Artikelnummer, Preis, Farbe, Größe, etc. 
            id => 567,
            artikel_nr => 'ABC123',
            bez => 'Waschmaschine "Superweiß"',
            umdr_pro_min => 1500,
            farbe => 'weiss'
            preis => 500.0,
            anzahl => 1,
         ),
         2 => array(        // Und noch ein Artikel mit bestimmten Attributen
            id => 789,
            bez => 'Kühlschrank Superfreeze',
            artikel_nr => 'DEF987',
            farbe => 'marinblau',
            preis => 250.0,
            anzahl => 1
         )
      )
    );
     
    // Den Waren-Korb in die Session
    $_SESSION['cart'] = $cart;

    An anderer Stelle kannst du dann auf die Elemente im Warenkorb zugreifen, um sie in die Bestellungstabelle zu schreiben:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    $cart = $_SESSION['cart'];
     
    foreach($cart['bestellartikelliste'] as $bestellartikel)
    {
       
       $query = sprintf("INSERT INTO bestellungen (artikelid, name, preis, menge) VALUES (%d, %s, %f, %d)",
          $bestellartikel['id'], $bestellartikel['bez'], $bestellartikel['preis'], $bestellartikel['anzahl']
       );
       mysql_query( $query ) or die( mysql_error() );
     
       $insert_id = mysql_insert_id();
     
       // Hier die insert_id benutzen, um sie in eine Kreuz-Tabelle zu schreiben - wegen Normalisierung
    }
    FairfaX bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    FairfaX FairfaX ist offline Rookie
    Registriert seit
    Jun 2011
    Beiträge
    5
    ok, danke werde es jetzt mal ausprobieren!
     

  6. #6
    FairfaX FairfaX ist offline Rookie
    Registriert seit
    Jun 2011
    Beiträge
    5
    Hallo,

    also ich habe den Code jetzt angepasst und eingefügt, aber irgendwie tut sich da nichts...

    Deshalb wollte ich fragen, ob mir jemand zeigen kann wo und wie ich den Code in meine Warenkorb.php einfügen muss, damit die Inhalte in der Datenbank gespeichert werden.

    Ich komm einfach nicht weiter und wäre für jede Hilfe dankbar!
     

  7. #7
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Wenn du jetzt noch die Warenkorb.php posten würdest, und beschreibst, wie du vorgehen willst, damit die Werte in die DB geschrieben werden (ungefährer Ablauf), könnte man evtl. weiter helfen.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  8. #8
    FairfaX FairfaX ist offline Rookie
    Registriert seit
    Jun 2011
    Beiträge
    5
    Ok, ich habe eine Datenbank (warenkorb) mit 2 Tabellen (1. produkte und 2.bestellung).

    Dazu habe ich zwei php Dateien.

    1. Indexx.php
    2. Warenkorb.php

    Die Warenkorb.php beinhaltet 2 Schleifen. Die erste Schleife (function produkte) ruft die vorhandenen Produkte aus der Datenbank ab.

    Die zweite (function warenkorb), zeigt die ausgewählten Produkte in der Session
    $_SESSION['warenkorb_'] an.

    Nun sollen beim Klick auf Bestellung abschließen, alle Produkte, die sich in der $_SESSION['warenkorb_'] in die Datenbank eingetragen werden.

    Ich wollte dies so machen, dass die Produkte = id, name, menge und preis, welche sich in der $_SESSION['warenkorb_'] befinden in die Datenbank gespeichert werden, aber ich hab es bis jetzt nicht hinbekommen.

    Zuerst habe ich es über INSERT INTO versucht, dann mit dem session__set_save_handler versucht, bin aber kläglich gescheitert. auf anraten von saftmeister habe ich es mit array code aber ohne erfolg

    Das Problem liegt wahrscheinlich daran, dass man die $_SESSION['warenkorb_'] auslesen muss und dann kann man erst die Variablen in die Datenbank bestellung -> speichern. und genau hier komm ich nicht weiter...



    Indexx.php
    PHP-Code:
    <?php require warenkorb.php?> 

    <html> 
    <head> 

    </head> 
    <body> 

    <?php warenkorb(); ?> 
    <br /><br /> 
    <?php produkte(); ?> 

    </body> 
    </html>


    Warenkorb.php
    PHP-Code:
    <?php

    session_start
    ();


    $page 'indexx.php';

    mysql_connect ('localhost','root','') or die (mysql_error());
    mysql_select_db('warenkorb') or die(mysql_error());


    if (isset(
    $_GET['add'])) {
       
    $menge =mysql_query('SELECT id, menge FROM produkte WHERE id='.mysql_real_escape_string((int)$_GET['add']));
        while (
    $menge_row mysql_fetch_assoc($menge)) {
              if (
    $menge_row['menge']!=$_SESSION['warenkorb_'.(int)$_GET['add']]) {
                 
    $_SESSION['warenkorb_'.(int)$_GET['add']]+='1';

              }
       }
       
    header('Location: '.$page);
    }

    if (isset(
    $_GET['remove'])) {
      
    $_SESSION['warenkorb_'.(int)$_GET['remove']]--;
      
    header('Location: '.$page);
    }

    if (isset(
    $_GET['delete'])) {
      
    $_SESSION['warenkorb_'.(int)$_GET['delete']]='0';
      
    header('Location: '.$page);
    }
    echo 
    '<span style="font-family:Verdana;font-size:large;font-weight:bold;color:blue;">Artikel im Einkaufswagen</span><br /><br />';

    function 
    produkte () {
     echo 
    "<h3>Vorhandene Artikel</h3>";
     
    $get mysql_query('SELECT id, name, beschreibung, preis FROM produkte WHERE menge > 0 ORDER BY id DESC');
     if (
    mysql_num_rows($get)==0) {
       echo 
    "Keine Artikel vorhanden!";
    }
     else {
        while (
    $get_row mysql_fetch_assoc($get)) {
              echo 
    '<p>'.$get_row['name'].'<br />'.$get_row['beschreibung'].'<br /><br />Preis: &euro;'.number_format($get_row['preis'], 2).'  <a href="warenkorb.php?add='.$get_row['id'].'">ADD</a></p>';

        }
      }
    }




    function 
    warenkorb() {
      foreach(
    $_SESSION as $name => $value) {
       if (
    $value>0) {
         if (
    substr($name010)=='warenkorb_') {
            
    $id substr($name10, (strlen($name)-10));
            
    $get mysql_query('SELECT id, name, preis FROM produkte WHERE id='.mysql_real_escape_string((int)$id));
            while (
    $get_row mysql_fetch_assoc($get)) {
             
    $sub $get_row['preis']*$value;
             echo 
    $get_row['name'].' x '.$value.' für &euro;'.number_format($get_row['preis'], 2).'  = &euro; '.number_format($sub2).' <a href="warenkorb.php?remove='.$id.'">[-]</a> <a href="warenkorb.php?add='.$id.'">[+]</a> <a href="warenkorb.php?delete='.$id.'">[Löschen]</a><br />';
            }
         }
         
    $gesamt += $sub;
       }
      }
      if (
    $gesamt==0) {
        echo 
    "Ihr Warenkorb ist leer.";
      }
      else {
       echo 
    '<p>Gesamt: &euro;'.number_format($gesamt2).'</p>';
        echo 
    "<h5><a href='bestellung.php'>Bestellung abschließen</a> </h5>";



      }
    }




    ?>
    Geändert von FairfaX (04.06.11 um 18:32 Uhr)
     

  9. #9
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Ein INSERT INTO ist aber genau das richtige, um es in der DB abzulegen. Hier mal ein Entwurf:

    Code php:
    1
    2
    3
    
    // Hier müsstest du die Variablen $id, $name, $menge und $preis mit den Werten aus warenkorb_ befüllen
    $query = "INSERT INTO bestellungen (id, name, menge, preis) VALUES ($id, $name, $menge, $preis)";
    mysql_query( $query ) or die ( mysql_error() );

    Das ist als Schablone allgemein für MySQL-Datenbank-Abfragen (INSERT gehört dazu) zu sehen.
    FairfaX bedankt sich. 
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 16.04.09, 15:35
  2. Session Daten in Datenbank speichern
    Von Katzenbauer im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.08.06, 21:06
  3. Datei in session speichern?
    Von webpagemaster im Forum PHP
    Antworten: 1
    Letzter Beitrag: 19.04.06, 14:37
  4. Switch in Session speichern ?
    Von phpMars im Forum PHP
    Antworten: 10
    Letzter Beitrag: 06.09.05, 15:08
  5. Antworten: 12
    Letzter Beitrag: 21.11.04, 17:19

Stichworte