Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Undefined Index in Session-Formular

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • maeck
    hat ein Thema erstellt [Erledigt] Undefined Index in Session-Formular.

    [Erledigt] Undefined Index in Session-Formular

    Hallo,

    ich habe ein Formular, in dem ich mit Sessions arbeite. Dabei verwende ich folgende Codezeile:
    PHP-Code:
    <input type="text" id="surname" name="surname" value="<?=$_SESSION['part1']['surname']?>" />
    Wird die Seite das erste Mal aufgerufen, steht in $_SESSION['part1']['surname'] noch nichts drin, deswegen bekomme ich eine Notice-Meldung "Undefined Index".

    Wie kann ich diese Notfice-Meldung unterbinden, ohne am error_reporting zu drehen? Müsste ich den Code wirklich so weit aufbohren:
    PHP-Code:
    <input type="text" id="surname" name="surname"  value="<? 
        echo ( isset($_SESSION['part1']['surname']) ) ? $_SESSION['part1']['surname'] : ''; 
    ?>" />
    Gruß Marcel

  • maeck
    antwortet
    Vielen Dank für eure Erklärung, jetzt hab ich das endlich mal verstanden!

    Gruß Marcel

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    Zitat von maeck Beitrag anzeigen
    Welche Zuweisung genau führt zur Notice?
    Wenn du schreibst
    PHP-Code:
    $x hasValue($x$preset 4711); 
    dann führt der Aufruf der Funktion dazu, dass versucht wird, eine Kopie (des Wertes) von $x zu erstellen, mit der in der Funktion gearbeitet werden kann. Wenn es zu diesem Zeitpunkt aber noch kein $x gibt - dann geht auch das Kopieren des Wertes logischerweise schief.

    Wenn du die Funktion jedoch so deklariert hast, dass sie den ersten Parameter per Referenz übergeben bekommt - dann besteht beim Aufruf keine Notwendigkeit, eine Kopie zu erstellen. Dann kann problemlos in die Funktion reingesprungen werden, und dort kann isset dann feststellen, dass die übergebene Referenz auf etwas nicht existierendes zeigt.

    Und was meinst du damit, dass die referenzierte Variable an den aufrufenden Parameter gebunden wird?
    Wenn du den Parameter in der Funktion veränderst, ändert sich auch der Wert der Variablen ausserhalb der Funktion.
    Wenn der Parameter nicht per Referenz übergeben worden ist, dann änderst du nur die Kopie innerhalb der Funktion, die Variable ausserhalb bleibt davon unbeeinflusst.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Jeglicher Zugriff auf eine undefinierte Variable führt zu einer Notice:
    PHP-Code:
    <?php
    echo $var;
    echo 
    $test['key'];
    $x $y;
    Im vorliegenden Beispiel also alle drei.

    Einen Wert an eine Funktion zu übergeben (beim Funktionsaufruf) bedeutet, dass dort der Parameterwert an eine lokale Variable zugewiesen wird:

    PHP-Code:
    function foo($bar) {
      echo 
    $bar;
    }

    foo($baz); 
    „Intern“ wird also bei Aufruf von foo der Inhalt von $baz an die (für foo) lokale Variable $bar zugewiesen. Wenn $baz jetzt gar nicht definiert war, wird in diesem Moment der Zuweisung die Notice „geworfen“.

    Disclaimer: Diese Erklärung ist ein Denkmodell. Die Wahrheit sieht etwas komplizierter aus: http://derickrethans.nl/talks/phparc...es-article.pdf

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Hallo nikosch,

    könntest du das vielleicht noch ein bisschen genauer ausführen, denn das habe ich mich schon immer gefragt.
    Welche Zuweisung genau führt zur Notice?
    Und was meinst du damit, dass die referenzierte Variable an den aufrufenden Parameter gebunden wird?

    Gruß Marcel

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Eine Referenz auf Value. $value wird sozusagen (vereinfacht) an den aufrufenden Parameter gebunden, bildet also keine Kopie von ihm - diese Zuweisung führt nämlich zur Notice. Alle Änderungen an $value in der Funktion würden allerdings auch auf den aufrufenden Parameter wirken, deshalb ist hier Vorsicht angesagt!

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    Zitat von BlackSpirit Beitrag anzeigen
    Was bewirkt den da das & in vor der variable?
    Übergabe per Referenz.
    PHP: Basics - Manual

    Einen Kommentar schreiben:


  • BlackSpirit
    antwortet
    PHP-Code:
    function hasValue(& $value
    Was bewirkt den da das & in vor der variable?

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Zitat von ChrisB Beitrag anzeigen
    Jaja, ich weiß

    Zitat von ChrisB Beitrag anzeigen
    Ja, eben.
    Vielleicht möchte man als Defaultwert eines Parameters, wenn nichts übergeben wurde, aber lieber 4711 oder 'foo' setzen.
    Mit nikoschs zweitem Vorschlag geht das problemlos.
    Achso, jetzt check ich es erst! Mir war nicht bewusst, dass eine Parameterübergabe mehr gewicht hat, als eine Variable, die in der Parameterliste gesetzt wird.
    Ich dachte die ganze Zeit, dass die Variable "preset" ja eh auf '' gesetzt wird, deswegen machte das für mich keinen Sinn.

    Danke für die Geduld und die Erklärung!

    Schönes WE

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    Zitat von maeck Beitrag anzeigen
    Mit dem zweiten Teil der IF-Schleife
    if-schleife.de

    wird doch ein leeres String gesetzt, oder?
    Ja, eben.
    Vielleicht möchte man als Defaultwert eines Parameters, wenn nichts übergeben wurde, aber lieber 4711 oder 'foo' setzen.
    Mit nikoschs zweitem Vorschlag geht das problemlos.

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Sorry, ich verstehs immer noch nicht

    Mit dem zweiten Teil der IF-Schleife
    PHP-Code:
    ''
    wird doch ein leeres String gesetzt, oder?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Es gibt auch Felder mit Initialwert. Mit Deiner Lösung finge man wieder an, für diese Felder mit IF-Bedingungen rumzudoktorn.

    Einen Kommentar schreiben:


  • PhillKill12
    antwortet
    Aber warum wäre deine zweite Lösung sinnvoller, als die erste?
    ganz einfach, weil man dann auch gleich einen Wert automatisch setzten kann, wenns leer ist ...

    Einen Kommentar schreiben:


  • maeck
    antwortet
    Hallo Nikosch,

    vielen Dank, so klappt es!
    Aber warum wäre deine zweite Lösung sinnvoller, als die erste?

    Gruß Marcel

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Das:
    PHP-Code:
    function hasValue(& $value)
    {
        return ( isset(
    $value) ) ? $value ''

    Sinnvoller wäre noch:
    PHP-Code:
    function hasValue(& $value $preset '')
    {
        return ( isset(
    $value) ) ? $value $preset

    Einen Kommentar schreiben:

Lädt...
X