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

  • SteiniKeule
    hat ein Thema erstellt wie wichtig ist Notice: Undefined variable:?.

    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?

  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • SteiniKeule
    antwortet
    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

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • PhillKill12
    antwortet
    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

    Einen Kommentar schreiben:


  • robo47
    antwortet
    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 ?

    Einen Kommentar schreiben:


  • SteiniKeule
    antwortet
    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

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • PhillKill12
    antwortet
    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

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    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!

    Einen Kommentar schreiben:

Lädt...
X