Frage zur $_SESSION

  • Schönen guten Abend,


    ich beschäftige mich seit ein paar Tagen mit den $_SESSION. Mein Ergebnis bis hierin sieht so aus



    Mit diesem


    PHP
    1. if (isset($_SESSION['success'])) { [....] }


    prüfe ich erst einmal ob eine Session mit dem Namen "success" existiert. Soweit klappt es auch. Mein Fehler muss wohl hier liegen:



    Wenn die erste Abfrage greift "$_SESSION['success'] == 2" dann wird mir dennoch folgender Fehler ausgegeben: Notice: Undefined index: success in [...] Warum wird dieses "if ($_SESSION['success'] == 1)" noch ausgeführt, wenn der erste Block bereits erfolgreich war, ich dachte ich kann das mit dem IF lösen.


    Was mache ich falsch bzw. wie muss die Schreibweise richtig lauten?

  • Du fragst 2mal mit IF ab ob der Wert von 'success' == x ist, vor der 2. Abfrage löscht du aber den Index 'success' (unset()) -> d.h. der Index 'success' exsistiert nichtmehr und kann nicht abgeragt werden..

  • Danke für deine Hilfe Wolf. Jetzt ist mir auch klar, warum ich die Fehlermeldung nicht erhalten habe, wenn der zweite Bereich aufgerufen wurde. Dir noch einen schönen Abend.

  • auserdem würde ich an deiner Stelle via === prüfen um auch zu prüfen ob der inhalt wirklich eine nummer ist und nicht ein true

    PHP
    1. $_SESSION['success'] === 1

    bzw. === 2

  • Hallo Wolf,


    alles klar, habe ich auch abgeändert. Das heißt wenn ich === nehme, muss es IMMER eie Zahl sein?


    EDIT:


    Wenn ich deinen Vorschlag nehme

    PHP
    1. $_SESSION['success'] === 1

    dann wird ständig unbekannter Wert ausgegeben. Kann sein dass dass die === in diesem Fall doch nicht gehen?

    Dieser Beitrag wurde bereits 3 Mal editiert, zuletzt von Klaus ()

  • Was schreibst du denn in die Session ..?
    mach mal ein (und poste das Ergebniss)

    PHP
    1. var_dump($_SESSION['success']);


    Der unterschied zwischen == und === ist das bei === auch der typ der Variable überprüft wird -> (string|integer|array|object|boolean) .. bei == wird der wert einfach direkt verglichen und notfalls zu einem bool umgewandelt und alles was > 0 ist bool TRUE was bedeutet das das IF ausgeführt wird

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von wolf ()

  • Wieso steht dort ein string und kein int?


    Falls das so beabsichtigt sein sollte, erfolgt die Prüfung so:


    PHP
    1. $_SESSION['success'] === "1"
  • Das ganze liegt wohl daran, wie ich die Session erstelle?


    PHP
    1. $_SESSION['success'] = "1";


    Müsste ich dann bestimmt so machen?


    PHP
    1. $_SESSION['success'] = 1;
  • Was ist besser, es so


    PHP
    1. $_SESSION['success'] = 1;


    oder so zu schreiben?


    PHP
    1. $_SESSION['success'] = "1";


    Gibt es vor oder Nachteile?

  • Vorweg: siehe Der Feine Unterschied: != und !==


    Ersteres. Du willst ja eine Zahl ablegen.


    Auch immer daran denken, dass Werte aus $_GET, $_POST, und auch aus der db als String kommen.
    Wenn Du also zB über ein Formular den Wert bekommst, dann:

    PHP
    1. $val = $_POST['feld']; // ist immer ein string, es sei denn im form-feld wurde zB [] genutzt


    Am besten Du legst beim Zuweisen gleich fest, was Du erwartest:

    PHP
    1. // angenommen der wert kommt aus einer var $success
    2. $_SESSION['success'] = (int)$success; // (int) ^= einen integer erzwingen
    3. // get auch mit float, string, ...