Session + Array = Warenkorb?
Chris
- php
0 Andreas0 Thomas Meinike0 Andreas
0 Chris
Hallo!
Ich bin gerade am Versuch, einen Warenkorb zu programmieren.
Leider habe ich null Erfahrung mit Sessions...
Ich möchte in einem mehrdimensionalen Array "Produkt-ID" und "Produkt-Anzahl" speichern. Eben dieses Array soll in der Session-Variable gespeichert werden. Nur kriege ich das ganze nciht so recht auf die Reihe:
<script language="PHP">
//add, id + menge sind input
if (add==ok)
{
$temp=$_SESSION["warenkorb"];
$temp[$id][$menge];
$_SESSION["warenkorb"] = $temp;
}
</script>
Ich weiß selbst, dass der Code hier nicht doll ist... Es soll auch viel mehr ein Ansatz sein.
Vielleicht kann mir ja jemand helfen und mir erklären, wie man das macht.
DANKE
Hallo!
<script language="PHP">
oh, oh, oh, was ist denn das? Das ist doch kein Javascript! Aber die Datei heißt .php, oder?
//add, id + menge sind input
if (add==ok)
{
$temp=$_SESSION["warenkorb"];
soweit so gut!
$temp[$id][$menge];
Du weißt was Du hier machst?
Mal kurz zu Arrays:
http://www.php.net/manual/de/language.types.array.php
http://www.dclp-faq.de/q-arrays-mehrdimensional.html
Du kannst nicht die elemente so hintereinander hängen. Das wäre auch nicht mehrdimensional!!! Was Du willst ist:
$temp['id'] = $id;
$temp['menge'] $menge;
ich habe das mal so gelöst:
// Session-Warenkorb in Variable schreiben
$warenkorb = $_SESSION["warenkorb"];
// Neuen Artikel in eigenen Array schreiben
$neuer_artikel = array ('PID' => $PID,
'Beschreibung' => $beschr,
'Preis' => $preis,
'Anzahl' => $anzahl);
// neuen Artikel an Warenkorb-Array anhängen, der Warenkorb enthält pro Artikel einen Array
array_push($warenkorb,$neuer_artikel);
// geänderten Warenkorb wieder in Session speichern
$_SESSION["warenkorb"] = $warenkorb;
Dann hast Du immer zugriff auf den Artikel:
$warenkorb = $_SESSION["warenkorb"];
// Preis des ersten Artikels im Warenkorb
echo $warenkorb[1]['Preis'];
// Beschreibung das 12. Artikels:
echo $warenkorb[12]['Beschreibung'];
OK?
Den Warenkorb auflisten kannst Du dann z.B. so:
foreach(warenkorb as $artikel){
echo $artikel['PID'];
echo " - ";
echo $artikel['Beschreibung'];
echo " - ";
echo $artikel['Preis'];
echo "<br>";
}
Grüße
Andreas
Hallo,
<script language="PHP">
oh, oh, oh, was ist denn das? Das ist doch kein Javascript!
Nein, kein JavaScript. Es steht doch PHP da ...
Wo ist Dein Problem mit dieser absolut gueltigen Schreibweise? Der PHP-Interpreter springt darauf genauso an wie bei <?php ... ?> und im Ausgabe-HTML-Code sind diese <script ...>-Zeilen natuerlich nicht mehr vorhanden.
Das ist wohl die unueblichste Schreibweise, die aber bei bestimmten Editoren, die mit den "normalen" PHP-Tags nicht klar kommen, hilfreich sein kann.
MfG, Thomas
hallo!
Nein, kein JavaScript. Es steht doch PHP da ...
Wo ist Dein Problem mit dieser absolut gueltigen Schreibweise? Der PHP-Interpreter springt darauf genauso an wie bei <?php ... ?> und im Ausgabe-HTML-Code sind diese <script ...>-Zeilen natuerlich nicht mehr vorhanden.
Ups, das wußte ich nicht, wieder was gelernt! Hatte ich aber wiklich noch nie gehört!
Grüße
Andreas
Erstmal Danke für die Tipps!
Nur das mit dem Array funktioniert noch immer nicht so recht. Ich habe den Quelltext soweit Deiner Antwort angepasst.
Beim session_register merkt der Interpreter irgendwie nicht, dass warenkorb ein Array sein soll...
Warning: First argument to array_push() needs to be an array in basket.php on line 31
Warning: Invalid argument supplied for foreach() in basket.php on line 60
Line 31: array_push( $warenkorb, $neuer_artikel );
Line 60: foreach(warenkorb as $artikel)
Das Array-Problem habe jetzt gelöst. Beim eachfor hat das $-Zeichen gefehlt...
@Andreas
Weißt Du wie ich einen Artikel wieder einfach entfernen kann?
Ich dachte so:
------------------------------------------------------------
foreach($warenkorb as $artikel){
echo $artikel['PID'];
echo " - ";
echo $artikel['Anzahl'];
echo " - ";
echo $artikel['Rabatt'];
echo " - ";
echo "<form action='basket.php' method='post' target='_self'>";
echo "<input type='hidden' name='id' value='";
echo $artikel['PID'];
echo "'>";
echo "<input type='Text' name='menge' value='";
echo $artikel['Anzahl'];
echo "' size='2' maxlength='2'>";
echo "<input type='Submit' name='minus' value='ok'>";
echo "</form>";
echo "<br>";
}
------------------------------------------------------------
Wie muss ich jetzt die Funktion hinter dem Minus-Button belegen?
Hallo!
Wie muss ich jetzt die Funktion hinter dem Minus-Button belegen?
naja, ich mache das normalerweise mit Links, an die ich in der Schleife die jeweilige Nummer des Artikels hänge. Aber ich würde das evtl. etwas anders machen:
die Produkt ID scheibe ich jetzt nicht in den Artikel-Array, sondern als key des Artikel array, dann kann man hinterher einfacher auf Artikel zugreifen/löschen:
$neuer_artikel = array ('Beschreibung' => $beschr,
'Preis' => $preis,
'Anzahl' => $anzahl);
// das geht so nicht mehr:
array_push($warenkorb,$neuer_artikel);
// sondern nur noch so:
$warenkorb[$PID] = $neuer_artikel;
//jetzt noch die Schleife anpassen:
foreach($warenkorb as $id => $artikel){
echo $id;
echo " - ";
echo $artikel['Beschreibung'];
echo " - ";
echo $artikel['Preis'];
echo "<br>";
// und jetzt der Link zum löschen:
echo <a href="$PHP_SELF?delete=$id">entfernen</a>;
echo "<br>";
}
So, jetzt hast Du einen Link auf dieselbe Seite, mit dem Parameter delete und dem Wert der jeweiligen Produknummer.
Jetzt mußt Du am Anfang der Seite abfragen, ob "delete" übergeben wird, also
if(isset($_GET['delete'])){
// und jetzt nur das Element aus dem Array löschen:
$del_id= $_GET['delete'];
unset($warenkorb[$del_id]);
}
Vergiss nicht vorher
$warenkorb = $_SESSION["warenkorb"];
und nochwas:
Du brauchst gar kein session_register(hattest Du doch verwendet, oder?) mit
$_SESSION["warenkorb"] = $warenkorb ;
Wird der Wert in der Session automatisch überschrieben!
Nur dann darfst Du am Anfang nicht session_start() vergessen ;-)
Habe das aber alles nicht getestet!
Grüße
Andreas
PS: guck Dir mal folgende Seiten an uns bookmarke die:
zu arrays allgemein:
http://www.dclp-faq.de/ch-arrays.html
http://www.schattenbaum.net/php/array.php
http://www.php.net/manual/de/ref.array.php
zu Sessions
http://www.dclp-faq.de/ch-version4_session.html
http://www.php.net/manual/de/ref.session.php
(komme gerade nicht aufs php manual aber da ist auch noch ein sehr ausführliche Anleitung zu Arrays und wie das mit den Sessions funktioniert)