Ankündigung

Einklappen
Keine Ankündigung bisher.

wie wichtig ist Notice: Undefined variable:?

Einklappen

Neue Werbung 2019

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

  • wie wichtig ist Notice: Undefined variable:?

    Hallo

    ich habe z.b. 5 daten (name, alter, geschlecht, hobby und browser) diese werden jetzt übergeben und sollen in ein formular als value. Jedoch sind nur 5 von 10 möglichen daten vorhanden.
    jetzt hab ich aber in meinem Formular
    value="$abfrage[0] //Name
    value="$abfrage[1] //hosengröße
    value="$abfrage[2] //geschlecht

    da ich ja die hosengröße nicht habe, erhalte ich ein "Notice: Undefined variable:" oder genau in diesem Fall wär es ein "Notice: Undefined offset:"
    Wenn man jetzt ein formular mit "nur" 10 Felder hat, würde es ja noch gehen, jede ab zu fragen ob auch gesetzt wurde. Aber wenn es mehr als 15 oder 20 wären, würde das ja in perverser Arbeit ausarten jedes mal eine Abfrage ob inhalt da ist.

    Soll man von daher solche ausgaben einfach ausgaben sein lassen oder eine funktion schreiben die $ausgabe[X] setzt falls nichts drin ist?
    Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

  • #2
    Grundsätzlich sollte dein Code wenn er ins Lifesystem geht frei von Notices und Warnings sein.
    Denn diese sind in weiteren Sinne Fehler die trotzdem noch weiter verarbeitet werden können.
    Im Lifesystem sollten Notices und Warnigs IMHO aber nicht angezeigt werden.

    Zitat von SteiniKeule Beitrag anzeigen
    Wenn man jetzt ein formular mit "nur" 10 Felder hat, würde es ja noch gehen, jede ab zu fragen ob auch gesetzt wurde. Aber wenn es mehr als 15 oder 20 wären, würde das ja in perverser Arbeit ausarten jedes mal eine Abfrage ob inhalt da ist.
    Für sowas kannst du Werte auch als Array übergeben und dann mit einer Schleife drüber iterieren.

    Nachtrag:
    Lol ich glaube ich habe eben von Birnen geredet und du nach Äpfeln gefragt.
    Validieren musst du immer wenn du sauberen Code haben willst. Und wenns es 30Felder sind, dann musst du eben 30Felder validieren!
    "My software never has bugs, it just develops random features."
    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

    Kommentar


    • #3
      also notice sind immer fehlermeldungen, die dir helfen dein Script, erstens mal richtig zu stellen, also dass du wohl immer alle Vars überprüft hast und andereseits sind sie ein sicherheitsrisiko, da man daraus inforationen gewinnen kann ... man sollte POST Variablen immer mit folgendem oder ähnlichem Syntax überprüfen :
      PHP-Code:
      if (isset($_POST["variable"]) && !empty($_POST["variable"])) { ... } 
      das !empty ist nur zusätzlich, und hängt davon ab, wie genau deine absichten sind ..

      EDIT :
      Im Lifesystem sollten Notices und Warnigs IMHO aber nicht angezeigt werden.
      genau, am besten per error_reporting(0); ausschalten
      PHP-Code:
      if ( $humans >= ) {
         
      war ();

      Kommentar


      • #4
        würde das ja in perverser Arbeit ausarten jedes mal eine Abfrage ob inhalt da ist.
        Ja so ist das in der Programmierung nunmal. Wenn Du nicht clever genug bist, solche Dinge so zu strukturieren, dass Du sie automatisiert abarbeiten kannst (Schleife) wirst Du das zig mal machen müssen. Da führt kein Weg dran virbei.

        Obwohl man Notices ausschalten kann, stellen diese in solchen Fällen undefinierte Programmzustände dar. Das kann im weiteren Programmfluss zu einem Logikfehler, einem fatalen Fehler (Division durch Null, Zugriff auf eine leere Dateiangabe) führen, aber auch gravierende Sicherheitsmängel erzeugen.

        if (isset($_POST["variable"]) && !empty($_POST["variable"])) { ... }
        Merke: isset und empty sind eine unnütze Kombination. In diesem Fall hätte z.B. empty ausgereicht, das erzeugt nämlich auch keine Notice.
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Ja so ist das in der Programmierung nunmal. Wenn Du nicht clever genug bist, solche Dinge so zu strukturieren, dass Du sie automatisiert abarbeiten kannst (Schleife) wirst Du das zig mal machen müssen. Da führt kein Weg dran virbei.
          Na da hast du ja nur glück, dass du Können, Logik, Ausdrucksweise und Intelligenz schon als Kind schaufelweise in dich hinein gestopft hast
          Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

          Kommentar


          • #6
            Schau dir vielleicht mal Formular-Klassen und ähnliches an, da schlägst du oftmals viele fliegen mit einer Klappe, weil die automatisiert überprüfen ob alle Felder gesetzt sind und geben dir dann ein array zurück das du weiter-verarbeiten kannst, idealerweise direkt weitergeben an das passende Model oder die DB-Klasse um update/insert zu machen.

            Zitat von PhillKill12 Beitrag anzeigen
            EDIT : genau, am besten per error_reporting(0); ausschalten
            NOPE!
            error-reporting sollte immer an bleiben!
            Nur sollte man display_errors deaktivieren und dafür das logging (error_log) in eine datei aktivieren, weil nur so sieht man wie gut oder schelcht sich das system in der praxis schlägt und sieht Fehler oder eventuelle Sicherheitslücken.

            Zur Performance all dieser notices/warnings etc:
            How do NOTICES influence php-scripts performance ?
            [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
            | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

            Kommentar


            • #7
              In diesem Fall hätte z.B. empty ausgereicht, das erzeugt nämlich auch keine Notice.
              danke, des hab i garnet gwusst ... man lern nie aus
              PHP-Code:
              if ( $humans >= ) {
                 
              war ();

              Kommentar


              • #8
                Na da hast du ja nur glück, dass du Können, Logik, Ausdrucksweise und Intelligenz schon als Kind schaufelweise in dich hinein gestopft hast
                Schön, dass Du das wieder persönlich genommen hast.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Merke: isset und empty sind eine unnütze Kombination. In diesem Fall hätte z.B. empty ausgereicht, das erzeugt nämlich auch keine Notice.
                  Super. das ist gut zu wissen. danke

                  Zitat von robo47 Beitrag anzeigen
                  Schau dir vielleicht mal Formular-Klassen und ähnliches an, da schlägst du oftmals viele fliegen mit einer Klappe, weil die automatisiert überprüfen ob alle Felder gesetzt sind und geben dir dann ein array zurück das du weiter-verarbeiten kannst, idealerweise direkt weitergeben an das passende Model oder die DB-Klasse um update/insert zu machen.



                  NOPE!
                  error-reporting sollte immer an bleiben!
                  Nur sollte man display_errors deaktivieren und dafür das logging (error_log) in eine datei aktivieren, weil nur so sieht man wie gut oder schelcht sich das system in der praxis schlägt und sieht Fehler oder eventuelle Sicherheitslücken.

                  Zur Performance all dieser notices/warnings etc:
                  How do NOTICES influence php-scripts performance ?
                  Da spricht die Erfahrung
                  Super Idee. werd das auf jeden Fall im Lifesystem umsetzen

                  @nikosch: Ich habe deine Aussage persönlich genommen, da ich der Meinung bin, dass Wissen wichtiger ist als "clever sein".
                  Ich kann noch so clever sein, wenn man das Wissen um PHP nicht hat bringt mir das alles nichts. Von daher habe ich deine Aussage persönlich genommen.

                  PS: hier im Forum gibt es so viele Leute, die einfach mehr wissen, bessere techniken und viel viel mehr Erfahrung haben als ich. Aus diesem Grund wende ich mich auch mit solchen Fragen wie diese an dieses Forum um etwas zu lernen. Zudem habe ich nicht nach einer Lösung gefragt (kann mir mal einer machen) sondern habe erst gesagt was ich habe, dann was ich damit machen würde und habe dann gefragt was ihr davon haltet. Und robo gab mir die perfecte Antwort
                  Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

                  Kommentar


                  • #10
                    Meine läuft aufs selbe heraus, war vielleicht schlecht formuliert: Wenn man sich ertappt, dieselben Prüfungen immer und immer wieder zu coden, wird es Zeit, sein Übergabeprinzip zu überdenken, inwieweit man diesen Prozess dynamisch gestalten kann. Anlegen der Felder als Arrays und benutzen von Schleifen ist zumeist der übliche Ansatz.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar

                    Lädt...
                    X