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
    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
    $_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
    $_SESSION['success'] === 1

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

    3 Mal editiert, zuletzt von Klaus (5. Juli 2015 um 20:26)

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

    PHP
    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

    Einmal editiert, zuletzt von wolf (5. Juli 2015 um 21:48)

  • Wieso steht dort ein string und kein int?

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

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

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

    Müsste ich dann bestimmt so machen?

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

    PHP
    $_SESSION['success'] = 1;

    oder so zu schreiben?

    PHP
    $_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
    $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
    // angenommen der wert kommt aus einer var $success
    $_SESSION['success'] = (int)$success; // (int) ^= einen integer erzwingen
    // get auch mit float, string, ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!