Session Element löschen
droom
- php
Ich habe meine Session so:
if (!session_is_registered('cart')) {
session_register('cart');
$_SESSION['cart'] = array();
}
dann füge ich in dieser Session ein artikel zb mit id=4:
if($saction == "ses"){
//habe ich diesen artikel schon eingefügt?
for($i=0;$i<count($_SESSION['cart']);$i++){
if ($_SESSION['cart'][$i] == '4'){$alreadyadd=true;}
}
if(!$alreadyadd) {$_SESSION['cart'][] ='4';}
}
Funktionniert alles ganz gut. Nun möchte ich auch Elemente dieser Session löschen können. Wenn ich den Artikel 4 löschen möchte, habe ich es so versucht:
$_SESSION['cart'][4] ="";
und
unset($_SESSION['cart'][4]);
Beide methode funktionnieren nicht. Was mache ich da falsch
Sup!
Funktionniert alles ganz gut. Nun möchte ich auch Elemente dieser Session löschen können. Wenn ich den Artikel 4 löschen möchte, habe ich es so versucht:
$_SESSION['cart'][4] ="";
und
unset($_SESSION['cart'][4]);
Im Array an Position 4 muss sich nicht unbedingt der Artikel "4" befinden, besonders, wenn es der einzige Artikel ist.
Das würde vielleicht mit einem assoziativen Array ("Hash") gehen, aber $_SESSION['cart'][] scheint kein assoziativer Array zu sein.
$_SESSION['cart'] ist anscheinend einer.
Gruesse,
Bio
Danke Bio für den Hinweis. War ja ein Denkfehler, so funktionnierts nun, um den artikel zu löschen:
for($i=0;$i<count($_SESSION['cart']);$i++){
if ($_SESSION['cart'][$i]== 4) {
unset($_SESSION['cart'][$i]);
}
}
Hello,
Danke Bio für den Hinweis. War ja ein Denkfehler, so funktionnierts nun, um den artikel zu löschen:
for($i=0;$i<count($_SESSION['cart']);$i++)
{
if ($_SESSION['cart'][$i]== 4)
{
unset($_SESSION['cart'][$i]);
}
}
Das ist aber immer noch falsch.
Angenommen, du hat bereits 20 Artikel drin.
Dann lösch mit dieser Methode mal den vierten
und dann lösche später noch den 17ten Artikel.
Die For-Schliefe ist hier bereits seit über drei (vier?) Jahren als fehlerträchtig überholt. Es gibt dafür eigene Funktionen von PHP.
http://de.php.net/manual/en/function.array-search.php
und weitere
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hast Recht Tom. Es passt noch nicht.
Ich habe in einem array folgendes:
$_SESSION['cart'][0]="Erst";
$_SESSION['cart'][1]="Zweite";
$_SESSION['cart'][2]="Dritte";
$_SESSION['cart'][3]="Vierte";
Wie kann ich $_SESSION['cart'][1] löschen ohne das es Probleme gibt?
wenn unset($_SESSION['cart'][1]); mache, dann kennt er nicht mehr $_SESSION['cart'][2] und $_SESSION['cart'][3]. Sehr wahrscheinlich, weil meine Struktur dann folgendermassen ist:
$_SESSION['cart'][0]="Erst";
$_SESSION['cart'][2]="Dritte";
$_SESSION['cart'][3]="Vierte";
Wie kann ich also gezielt ein Element löschen, wenn ich sein Value weiss.
Hello,
Hast Recht Tom. Es passt noch nicht.
Ich habe in einem array folgendes:
$_SESSION['cart'][0]="Erst";
$_SESSION['cart'][1]="Zweite";
$_SESSION['cart'][2]="Dritte";
$_SESSION['cart'][3]="Vierte";Wie kann ich $_SESSION['cart'][1] löschen ohne das es Probleme gibt?
wenn unset($_SESSION['cart'][1]); mache, dann kennt er nicht mehr $_SESSION['cart'][2] und $_SESSION['cart'][3]. Sehr wahrscheinlich, weil meine Struktur dann folgendermassen ist:
$_SESSION['cart'][0]="Erst";
$_SESSION['cart'][2]="Dritte";
$_SESSION['cart'][3]="Vierte";Wie kann ich also gezielt ein Element löschen, wenn ich sein Value weiss.
Doch, mit unset($_SESSION['cart'][1]) kannst Du das Element mit dem Index [1] löschen.
Aber für die Anzeige und Verarbeitung solltest Du nicht länger for() benutzen, sondern die für PHP-Arrays vorgesehen Funktion forech()
http://de3.php.net/manual/en/control-structures.foreach.php
Die durchläuft jeweils eine Liste (Dimension) des Arrays.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo droom,
wenn unset($_SESSION['cart'][1]); mache, dann kennt er nicht mehr $_SESSION['cart'][2] und $_SESSION['cart'][3]. Sehr wahrscheinlich, weil meine Struktur dann folgendermassen ist:
Mit wahrscheinlich brauchst du dich in solchen Fällen nicht zufrieden zu geben: var_dump().
Wie kann ich also gezielt ein Element löschen, wenn ich sein Value weiss.
Tom hat dich doch schon auf array_search() verwiesen:
if (in_array('Zweite', $_SESSION['cart'])) {
unset($_SESSION['cart'][array_search('Zweite', $_SESSION['cart'])]);
}
Schöne Grüße,
Johannes
Hello,
if (!session_is_registered('cart'))
if (isset($_SESSION['cart']))
Du bringst da zwei verschiedene PHP-Versionen durcheinander.
Die Funktionen und Vorgehensweisen hatten zwar noch nebeneinander Existenzberechtigung, von einer Vermischung wurde aber ausdrücklich gewarnt.
Von einem vermeintlich objektorientierten Ansatz mit session_is_registered() & Co. ist man schnell wieder abgekommen, da die Sprache einfach bleiben sollte.
Es wurden stattdessen die "superglobalen" Arrays eingeführt, die im ganzen Script in allen Scopes (es gibt ja nur zwei Schichten) zur Verfügung stehen. Du kannst also _nach_ der Initialisierung der Session überall auf die Elemente des Arrays $_SESSION[] zugreifen, sie ändern, Elemente hinzufügen oder löschen...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom