Archiv verlassen und diese Seite im Standarddesign anzeigen : wert aus SESSION-array löschen
sputnik72
18.10.2005, 16:08:45
Hallo!
Kann mir jemand bei folgendem Problem helfen?
Ich habe einen Warenkorb mit SESSION aufgebaut, in dem Posten gesammelt werden.
Diese werden so hinzugefügt:
$warenkorb[] = $id;
wobei $id von der Katalogseite übergeben wurde. Das funktioniert prima.
Nun möchte ich, dass man in der Warenkorbansicht die Möglichkeit hat, einzelene Posten zu entfernen. Ich habe hinter den Warenkorbartikeln einen Link gesetzt, der den id der Ware übermittelt:
... slettbok.php?slett=$id ...
und auf slettbok.php wollte ich den betreffenden Artikel mit
if ($_GET['slett'] != "") $id = $_GET['slett'];
unset($_SESSION['warenkorb'][$id]);
aus dem array entfernen.
Ich habe geprüft, ob die an slettbok.php übermittelten Werte für $id richtig sind - das sind sie.
Und gelöscht wird manchmal auch etwas, aber leider nicht der Artikel mit dem bestimmten id.
Was mache ich falsch?
Gruss Sputnik
xabbuh
18.10.2005, 18:11:17
Du musst den Schlüssel angeben, der einem Element zugeordnet ist, um es aus einem Array zu löschen. Somit kannst du am besten zunächst mit array_search() (http://www.php.net/array_search) den Schlüssel des Arrayelements ermitteln:
<?php
if($_GET['slett'] != '')
$id = intval($_GET['slett']);
$key = array_search($id, $_SESSION['warenkorb']);
if($key !== false)
unset($_SESSION['warenkorb'][$key]);
?>
sputnik72
18.10.2005, 23:25:04
Hallo Xabbuh,
vielen Dank! Daran lags, jetzt funktioniert es.
Ich habe danach versucht, mit Hilfe von array_search() zu überprüfen, ob ein Wert bereits im Array vorhanden ist. Im Warenkorbsystem wäre das bei einer Bestellung die Überprüfung, ob der gleiche Artikel schon einmal in den Warenkorb gelegt wurde (doppelt bestellen geht nicht). Das funktionierte zunächst scheinbar gut, jedoch bekomme ich jetzt die Fehlermeldung
Warning: array_search() [function.array-search]: Wrong datatype for second argument in...
Die gleiche Meldung habe ich mit in_array bekommen.
Weisst Du woran das liegen könnte?
Gruss Sputnik
xabbuh
19.10.2005, 13:52:52
Wie hast du es denn versucht?
sputnik72
19.10.2005, 22:47:07
Ich habe es so probiert (den in_array-Versuch habe ich leider nicht mehr):
if ($_GET['id'] != "") $id = $_GET['id'];
$key = array_search($id, $_SESSION['warenkorb']);
if($key !== false) {
echo ("<p>Das Buch ist bereits Teil der Bestellung.</p>");
}
else {
$warenkorb[] = $id;
echo ("<p>Das Buch wurde der Bestellung hinzugefügt.</p>");
}
xabbuh
19.10.2005, 23:51:56
Ist in dem Moment denn $_SESSION['warenkorb'] überhaupt schon ein Array?
sputnik72
20.10.2005, 10:04:28
Oben auf der Seite habe ich
if (!isset($_SESSION['warenkorb']))
{
$_SESSION['warenkorb'] = $warenkorb;
}
stehen.
Gruss Sputnik
sputnik72
20.10.2005, 10:30:31
Die Fehlermeldung kommt nur wenn der Warenkorb leer ist. Bedeutet das, dass in_array und array_search nur angewendet werden können, wenn der Array bereits Werte enthält?
Dann könnte man ja noch eine empty-Abfrage vorschalten...
feuervogel
20.10.2005, 10:51:49
Oben auf der Seite habe ich
if (!isset($_SESSION['warenkorb']))
{
$_SESSION['warenkorb'] = $warenkorb;
}
stehen.
Gruss Sputnik
und wie ist $warenkorb gefüllt? besser wäre wohl ein
$_SESSION[ 'warenkorb' ] = array();
meikel (†)
20.10.2005, 13:15:44
besser wäre wohl ein
$_SESSION[ 'warenkorb' ] = array();
Noch besser:
$_SESSION['warenkorb'][$_POST['artikelnummer'] = $_POST['menge'];
Dann sind auch Updates einer Artikelnummer (Erhöhung der Menge) möglich:
$_SESSION['warenkorb'][$_POST['artikelnummer']] = (isset($_SESSION['warenkorb'][$_POST['artikelnummer']]))
? $_SESSION['warenkorb'][$_POST['artikelnummer']] + $_POST['menge']
: $_POST['menge'];
Hinweis (für die Anderen): Voraussetzung ist, daß $_POST['artikelnummer'] und $_POST['menge'] VORHER auf gültige Werte überprüft wurden.
sputnik72
21.10.2005, 14:31:04
Hallo Feuervogel,
danke! Jetzt funktioniert es so, wie ich wollte!
Hallo Meikel,
danke für den Vorschlag! Ich denke ich lass es erstmal so, da die Artikel sowieso nicht mehrfach bestellt werden können. Aber falls ich diese Funktion mal brauche, werde ich Deinen Vorschlag wieder hervorholen.
Gruss Sputnik
vBulletin® v3.8.3, Copyright ©2000-2024, Jelsoft Enterprises Ltd.