PHP Shop - Session + Array Problem

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von TrainSpoTtinG, 03.08.2005.

  1. TrainSpoTtinG

    TrainSpoTtinG Thread Starter MacUser Mitglied

    Beiträge:
    369
    Zustimmungen:
    7
    MacUser seit:
    26.10.2003
    Hallo nochmal.

    Also ich probiere nun ewig mit Sessions und Arrays rum und ich bekomms nicht so hin wie ich das will. Mein Problem liegt momentan hauptsächlich daran das ich die Session-Array nicht auslesen kann. Ich bin nun mittlerweile bei der 10en Variante (die auch nicht geht) und die poste ich nun einfach mal, damit Ihr versteht was ich in etwa vor habe:

    PHP:
        <?

        // TEST
        $a_artnr = $artnr;
        $_SESSION["a"] = $a_artnr;

        ?>

    <table width="700" bordercolor="000022" border="0" align="center" cellpadding="0" cellspacing="3">

    <tr>
        <td width="35">P1</td>
        <td width="300"><span class="style3"><? echo $_SESSION["a"]."<br>"; ?></span></td>
        <td width="75"><span class="style3"><? echo $_SESSION["a"]."<br>"; ?></span></td>
        <td width="75">Menge</td>
        <td width="100"><span class="style3"><? echo $_SESSION["a"]."<br>"; ?></span></td>
        <td>Ges Pr.</td>
    </tr>
    </table>
    Die Artikelnummer ($artnr) wird übergeben, er speichert die Session (a) auch richtig ab -nur das auslesen bereitet mir kopfzerbrechen - da herrscht irgend eine Blockade.

    Das ganze ist für einen Shop. Er soll eigentlich momentan nur die Artikelnummer speichern und im Warenkorb auslesen. Das ganze recht einfach gehalten, ohne viel Schnickschnack.

    Meine jetzige Idee ist nur die Artikelnummer auszulesen, anhand dieser dann die restlichen Daten wie Preis und Beschreibung aus der Datenbank.

    Wenn das nich geht, dann eben alle Daten in die Session rein. Nur bevor ich nun wieder was ausprobiere brauche ich verständlichen und professionelleren Rat von Euch.

    Wenn Ihr was nicht verstanden habt von dem was ich eigentlich will, dann liegt das daran das ich etwas Müde bin und dazu nachdenklich - in dem Fall einfach nachhaken.

    Danke schonmal,
    Alex
     
  2. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.041
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    richtig ist:

    PHP:
    session_start();
    $arr=array(1,3,5,7,11,13);
    if (! 
    $_SESSION['prim'])
    {
      
    $_SESSION['prim']=$arr// übernahme des arrays in die session
    }
    else
    {
    foreach (
    $_SESSION['prim'] as $key => $value)
      print 
    "$key$value<br>";
    }

    um direkt auf ein Element zuzugreifen schreibst Du dann

    PHP:
    $erste=$_SESSION['prim'][0]; // Auslesen des 0ten Eintrages
     
    Zuletzt bearbeitet: 03.08.2005
  3. TrainSpoTtinG

    TrainSpoTtinG Thread Starter MacUser Mitglied

    Beiträge:
    369
    Zustimmungen:
    7
    MacUser seit:
    26.10.2003
    ok sieht ja schonmal einleuchtend aus.. kann ich denn anstatt

    PHP:
    $arr=array(1,3,5,7,11,13);
    auch beispielsweise

    PHP:
    $arr=array($artnr$beschreibung);
    schreiben??
     
  4. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.041
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    Du kannst ALLES in ein array tun, nur ob das dann Sinn macht!?
    Ich würd folgendes machen:

    Bau Dir eine Klasse ARTIKEL ( oder was auch immer Du darstellen magst - Warenkorb?). Dann kannst Du Dir beliebige Instanzen davon generieren:
    PHP:
    $einkauf= new ARTIKEL;
    $einkauf->artnr=12345;
    $einkauf->beschreibung="Kernseife";
    $einkauf->preis_in_eurocent=69;
    $einkauf->preis_mwst=16;
    $einkauf->menge=5;
    und aus von den Objekten machst Du Dir dann ne Liste im Session-Array

    array_push($einkauf,$_SESSION['ek_liste']); // Syntax aus dem Kopfe also ggf. nicht richtig


    ich such mal nach der Doku für SESSION-Variable, da stehts gut beschrieben...
     
  5. TrainSpoTtinG

    TrainSpoTtinG Thread Starter MacUser Mitglied

    Beiträge:
    369
    Zustimmungen:
    7
    MacUser seit:
    26.10.2003
    Das leuchtet mir nun alles aber schon eher ein, danke.
    Ich hoffe die Doku ist gut - denn ich hab mir nun schon einige durchgelesen und keine brachte mich in die richtige Richtung für meine Zwecke.
    Ich werde nun mal deine Variante versuchen in die Tat umzusetzen, danke schonmal für die schnelle Antwort - ich berichte später ob ichs geschnackelt habe.
     
  6. TrainSpoTtinG

    TrainSpoTtinG Thread Starter MacUser Mitglied

    Beiträge:
    369
    Zustimmungen:
    7
    MacUser seit:
    26.10.2003
    hm, also die Doku ( wenn du sie denn findest ) wäre dennoch ganz hilfreich ...

    Ein zusammenhängendes Beispiel wäre auch ganz nett, denn ich habe irgendwo in meiner Denkweise Fehler die ich bei jeder Variante wohl übernehme und dann scheitert es wieder.
     
  7. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.041
    Zustimmungen:
    1.316
    MacUser seit:
    13.09.2004
    wenn ich meine skripte veröffentliche wird mein Chef mich hauen ;)
    Allerdings bin ich ein Fan der dokumentierten Version des PHP-Manuals:

    http://www.php.net/manual/en/ref.session.php

    die Userkommentare möchte ich nicht missen! Das ist meines Erachtens die umfassenste und beste Hikfe für PHP.
     
  8. TrainSpoTtinG

    TrainSpoTtinG Thread Starter MacUser Mitglied

    Beiträge:
    369
    Zustimmungen:
    7
    MacUser seit:
    26.10.2003
    ja nur besteht mein Problem weiterhin - mein Problem ist ja anscheinend das fehlende Verständnis des Zusammenhangs. Ich bräuchte mal was funktionierendes damit ich sehe WIE es richtig ist.
    Ich machs jetzt halt ganz anders, find irgendwie in der Richtung keine Lösung....
     
  9. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    MacUser seit:
    31.01.2005
    Also Arrays werden so beschrieben:
    $array[index]

    Es könnte also bei Dir ein Artikelarray geben, welches alle Artikelnummern speichert.
    $artikel[123]
    $artikel[124]
    $artikel[125] und so weiter

    Dann gibt es zweidimensionale Arrays, die sich wiefolgt aufbauen:
    $array[index][index]

    Man könnte also hier z.B. den Preis des Artikels mitspeichern
    $artikel[123][4,50]
    $artikel[124][7,99]
    $artikel[125][12,00]

    Man kann hier x-dimensionale Arrays machen, welche alle möglichen Artikeldatenbeinhalten.

    Genauso kannst Du den Indizes anstatt Nummern auch einen String zuordnen, was in Deinem Fall so aussehen könnte.
    $artikel[123]['preis'][4,50]
    $artikel[124]['preis'][7,99]
    $artikel[125]['preis'][12,00]

    und auch hier könnte man in die x-fache Mehrdimensionalität gehen mit sowas:
    $artikel[123]['preis'][4,50]
    $artikel[123]['warengruppe'][Eiscreme]
    $artikel[123]['name'][Choc-Choc-Chip]
    $artikel[123]['beschreibung'][Häagen-Dasz Eiscreme]

    Und so weiter und so weiter. Das kann man dann mit allen Artikeln machen (z.B. aus einer Datenbank in ein Array packen).

    Und ein Formular würde jetzt so aussehen:
    PHP:
    $query "SELECT * FROM artikel ORDER BY art_id";
    $res mysql_query($query);
    $num mysql_num_rows($res);

    for (
    $i=0$i<$num$i++)  {
      
    $row mysql_fetch_array($res);
      
      
    // Array füllen
      
    $array[$row['art_nr']]['nummer'] = $row[art_nr];
      
    $array[$row['art_nr']]['preis'] = $row[art_preis];
      
    $array[$row['art_nr']]['beschreibung'] = $row[art_desc];
      .
      .
      .
    }

    print 
    '<form>';
    foreach(
    $array as $key => $value) {
      print 
    '<input type="text" name="'.$array['.$key.']['nummer'].'-nummer" value="'.$key['nummer'].'">';
      print 
    '<input type="text" name="'.$key['nummer'].'-preis" value="'.$array['.$key.']['preis'].'">';
    .
    .
    .
    }
    print 
    '<input type="submit" value=" Absenden "></form>';

    So und dann hast Du Dein array in der $_POST-Variable und kannst es nutzen.
     
  10. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    MacUser seit:
    31.01.2005
    Alternativ könnte man auch nur mit einem kleinen Array arbeiten und das ganze so regeln:
    PHP:
    // <DB-Zugriff und auslesen siehe oben>

    print '<form>';
    for (
    $i=0$i<$num$i++)  {
      
    $row mysql_fetch_array($res);
      
      print 
    '<input type="text" value="'.$row[art_desc].'"><input type="checkbox" name="artikel['.$row[art_nr].']">';
    }
    print 
    '<input type="submit" value="weg damit"></form>';
    Das was jetzt auf der anderen Seite ($_POST) ankommt ist (u.a.) das Array der Checkboxen. Wenn ein Artikel geklickt wurde, nur dann ist das Checkbox-Array auch gesetzt. Auf dem ankommenden Formular müsste dann also sowas stehen.

    PHP:
    if (isset($_POST[artikel])) {
     foreach(
    $_POST[artikel]*as $key => $value)  {
      
    $query "SELECT * FROM artikel WHERE art_nr='$_POST[artikel][$key]'";
      ... 
    //<DB-blabla>
      
      // Verarbeitung der DB-Daten
     
    }
    }
    So müsste es auch gehen. Nagel mich hier bitte nicht auf jede Codezeile genau fest, weil das eben aus dem Kopf entstand.
     
Die Seite wird geladen...

Diese Seite empfehlen