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

  • [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


  • #2
    Ja muesstest du.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Ich habe es befürchtet

      Oder kann man die Notice-Meldungen vernachlässigen, da ich - sobald das Script online geht - das error_reporting auf 0 setze?

      Kommentar


      • #4
        Kannst du solltest du aber nicht, Notices sollten alle behoben sein, wenn eine Seite online geht.
        Signatur:
        PHP-Code:
        $s '0048656c6c6f20576f726c64';
        while(
        $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

        Kommentar


        • #5
          pack es einfach in ne Funktion
          DevBlog|3D Online-Shopping|Xatrium

          Kommentar


          • #6
            Nützt nur was, wenn man dort dann mit Referenzen arbeitet.

            Dies ist ein klassicher Fall, der für eine Templateengine spricht.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Warum, auch da musst du einen Initialwert setzen oder eine Logik implementieren, die das z.B. mit einem Leerstring für dich tut. Ich finde das hat weniger etwas mit einer Templateengine zu tun, als eben mit einer entsprechenden, grundsätzlichen Vorgehensweise bei Formularen.
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                Eine gute Templateengine wird mir vermutlich die Prüfung, ob eine verwendete Variable gesetzt ist, abnehmen. Und selbst wenn nicht, wird die Logik entkoppelt, so dass ich im Template nicht eine ewig lange Codewurst habe, die länger als das eigentlich HTML ist. Also mich stört sowas immer tierisch. Allerdings benutze ich in letzter Zeit nur noch OOP Formulare und binde nur noch das Rendering des Elements ein.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Allerdings benutze ich in letzter Zeit nur noch OOP Formulare und binde nur noch das Rendering des Elements ein.
                  Ich auch, ein Grauß weniger Auch wenn Zend_Form einem ab und an ein paar Hindernisse in den Weg legt. Was benutzt du denn für eine Klasse?
                  "Mein Name ist Lohse, ich kaufe hier ein."

                  Kommentar


                  • #10
                    Was selbst geschriebenes. Zend_form gefällt mir nicht wirklich. Ich habe versucht etwas zu schreiben, was ein besseres Interface hat und die Gemeinsamkeiten von Eingabeelementen berücksichtigt. Der Plan ist eigentlich, irgendwann Datenstrukturen und Vaidierungen anbinden zu können. Mit Interface-Klassen und Label-Erweiterung (eine Art Decoratoren) ist das Modul allerdings auch schon stolze 30 Dateien groß.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Zitat von nikosch Beitrag anzeigen
                      ...so dass ich im Template nicht eine ewig lange Codewurst habe, die länger als das eigentlich HTML ist. Also mich stört sowas immer tierisch...
                      Genauso geht es mir auch, ewig langer PHP-Code für ein einfaches HTML-Element.


                      Zitat von Tiberius
                      pack es einfach in ne Funktion
                      Das würde sich dann ja auf so etwas beschränken
                      PHP-Code:
                      function hasValue($value)
                      {
                          return ( isset(
                      $value) ) ? $value ''

                      Der HTML-Code würde dann so lauten:
                      PHP-Code:
                      <input type="text" id="surname" name="surname" value="<? echo hasValue($_SESSION['part1']['surname'])?>" />
                      Macht den Code leider nicht maßgeblich kürzer.
                      //NACHTRAG: Leider bekomme ich damit nochimmer die Fehlermeldung "Undefined index". Warum?

                      Zitat von nikosch
                      Nützt nur was, wenn man dort dann mit Referenzen arbeitet.
                      Was meinst du damit genau?

                      Gruß Marcel

                      Kommentar


                      • #12
                        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

                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Hallo Nikosch,

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

                          Gruß Marcel

                          Kommentar


                          • #14
                            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 ...
                            PHP-Code:
                            if ( $humans >= ) {
                               
                            war ();

                            Kommentar


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

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X