Hallo zusammen,
ich Bastel gerade an einer art Shop und bin beim Warenkorb und bei der Bestellabwicklung angekommen. Jetzt habe ich ein paar Fragen bezüglich Sessions, habe vorher nie mit Sessions gearbeitet.
Ich starte in meiner index.php, die Ausgangspunkt für die Abarbeitung des Auftritts ist, eine Session mit session_start(). Jetzt wird ein Cookie angelegt, der bis zum Sitzungsende Aktiv ist, also bis der Browser geschlossen wird.
Hier stellt sich mir die Frage, ob es die eleganteste Lösung ist, oder ob ich die Lebensdauer des Session-Cookies erhöhen sollte? Wobei meine Sessions wahrscheinlich auch nicht solange gespeichert werden.
In dem "Shop" kann man nicht einfach durch Artikel Browsen, sondern es wird über ein Suchfeld ein String eingegeben, der in der Datenbank gesucht wird und falls gefunden ausgegeben wird, dies kann man dann in den Warenkorb legen. Der Warenkorb basiert jetzt quasi nur auf Sessions, also sobald ein Benutzer etwas in den Warenkorb legt, wird ein neuer Eintrag in der Session abgelegt:
Soweit so gut, das Funktioniert auch Prima, wenn ich jetzt ein count() auf $_SESSION['cart'] gebe, wird mir auch die Anzahl der bereits in der Session stehenden Artikel ausgegeben.
So jetzt zu meinem eigentlich Problem, der Warenkorb selber.
Sobald ich auf den Warenkorb gehe, möchte ich natürlich meine Artikel schön aufgelistet bekommen, was natürlich kein problem darstellt. Allerdings möchte ich Artikel wieder löschen können und da "hapert" es momentan. Ich habe zwar eine Lösung dafür die auch soweit funktioniert, aber die ist leider nicht das Gelbe vom Ei.
Ausgabe der Artikel (Noch nicht ganz fertig).
Ich denke ihr seht das Problem von der HTML Umsetzung. Ich möchte nicht soviele Formulare haben, das muss auch anders gehen.
Die technische Seite, wobei die auch noch nicht so das Wahre ist:
Also ich kann mir gerade nicht vorstellen, dass das so funktioniert, vielleicht habe ich auch einfach eine Denkblockade, ich weiß es nicht.
Ich dachte mir noch sowas:
Wenn ich per JavaScript den Löschen Link/Button/Grafik klicke, dass der Artikel im Warenkorb verschwindet (display: none, aber wie bekomme ich den dann am besten aus der Session raus?
Vielleicht hat ja jemand eine gute Lösung dafür, aber bitte nicht schreiben das man eine fertige Shopsoftware nutzen soll.
Und Allgemein wäre natürlich noch gut zu Wissen, ob das ganze so ok ist, oder ob man das vergessen kann/anders macht. Hab dazu nicht allzuviel im Internet gefunden.
Ach und nochwas... Wenn ich eine Session Starte und die 30 Minuten Lebenszeit hat, ein Benutzer 5 Minuten nichts macht und auf ne andere Seite geht (Innerhalb meiner Seite), dann wird die Session ja wieder aufgenommen, aber wird die Lebensdauer dann auch wieder auf 30 Minuten gesetzt, oder hat die trotzdem nur noch 25 Minuten?
LG
Pit
ich Bastel gerade an einer art Shop und bin beim Warenkorb und bei der Bestellabwicklung angekommen. Jetzt habe ich ein paar Fragen bezüglich Sessions, habe vorher nie mit Sessions gearbeitet.
Ich starte in meiner index.php, die Ausgangspunkt für die Abarbeitung des Auftritts ist, eine Session mit session_start(). Jetzt wird ein Cookie angelegt, der bis zum Sitzungsende Aktiv ist, also bis der Browser geschlossen wird.
Hier stellt sich mir die Frage, ob es die eleganteste Lösung ist, oder ob ich die Lebensdauer des Session-Cookies erhöhen sollte? Wobei meine Sessions wahrscheinlich auch nicht solange gespeichert werden.
In dem "Shop" kann man nicht einfach durch Artikel Browsen, sondern es wird über ein Suchfeld ein String eingegeben, der in der Datenbank gesucht wird und falls gefunden ausgegeben wird, dies kann man dann in den Warenkorb legen. Der Warenkorb basiert jetzt quasi nur auf Sessions, also sobald ein Benutzer etwas in den Warenkorb legt, wird ein neuer Eintrag in der Session abgelegt:
PHP-Code:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$articleid = trim($_POST['articleid']);
/*...
überprüfung ob produktid valide ist (abgleich in DB)
...*/
$product = .....;
if(isset($_SESSION['cart']))
{
if(!array_key_exists($articleid, $_SESSION['cart']))
{
$_SESSION['cart'][$articleid] = $product;
return 'erfolgreich hinzugefügt';
}
else
{
return 'befindet sich bereits im warenkorb';
}
}
else
{
$_SESSION['cart'][$articleid] = $product;
return 'erfolgreich hinzugefügt.';
}
}
else
{
return 'ohne post keine produkte';
}
?>
So jetzt zu meinem eigentlich Problem, der Warenkorb selber.
Sobald ich auf den Warenkorb gehe, möchte ich natürlich meine Artikel schön aufgelistet bekommen, was natürlich kein problem darstellt. Allerdings möchte ich Artikel wieder löschen können und da "hapert" es momentan. Ich habe zwar eine Lösung dafür die auch soweit funktioniert, aber die ist leider nicht das Gelbe vom Ei.
Ausgabe der Artikel (Noch nicht ganz fertig).
PHP-Code:
<?php
if(isset($_SESSION['cart']))
{
foreach($_SESSION['cart'] as $articleid => $detail)
{
?>
<form action="" method="POST">
<li> <?=$detail;?>
<input type='submit' value='löschen' name='delete' />
<input type='hidden' value='<?=$detail;?>' name='articleid' />
</li>
</form>
<?php
}
}
else
{
echo 'keine artikel vorhanden';
}
?>
Die technische Seite, wobei die auch noch nicht so das Wahre ist:
PHP-Code:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$data = $_POST['delete'];
$articlelid = $_POST['articleid'];
/* ...
produkt validierung mit DB
...*/
switch($data)
{
case 'löschen':
unset($_SESSION['cart'][$articleid]);
return 'Artikelnummer: ' . $articleid . ' sollte jetzt gelöscht sein';
break;
/* weitere cases */
default:
return 'fehler aufgetreten';
break;
}
}
?>
Ich dachte mir noch sowas:
Wenn ich per JavaScript den Löschen Link/Button/Grafik klicke, dass der Artikel im Warenkorb verschwindet (display: none, aber wie bekomme ich den dann am besten aus der Session raus?
Vielleicht hat ja jemand eine gute Lösung dafür, aber bitte nicht schreiben das man eine fertige Shopsoftware nutzen soll.
Und Allgemein wäre natürlich noch gut zu Wissen, ob das ganze so ok ist, oder ob man das vergessen kann/anders macht. Hab dazu nicht allzuviel im Internet gefunden.
Ach und nochwas... Wenn ich eine Session Starte und die 30 Minuten Lebenszeit hat, ein Benutzer 5 Minuten nichts macht und auf ne andere Seite geht (Innerhalb meiner Seite), dann wird die Session ja wieder aufgenommen, aber wird die Lebensdauer dann auch wieder auf 30 Minuten gesetzt, oder hat die trotzdem nur noch 25 Minuten?
LG
Pit
Kommentar