heinetz: Variablen initialisiern

Hallo Forum,

ich muss mal sauber machen ;)

Ich habe mir mal das Logfile meines aktuellen PHP-Projekts
angesehen. Darin stehen (zu Hauf!) unnknown Errortypes alá

"Undefined index:"

Sprich ich frage in meinen Scripten Variablen ab, die nie
initialisiert wurden.

Beispiel:

if (!$uid) $uid = $_GET['site_id'];

Den Fehler beseitigen konnte ich mit:

if (!isset($uid)) $uid = $_GET['site_id'];

So kann ich natürlich sämtliche Fehler aus dem Weg räumen,
allerdings wird dadurch mein Code unübersichtlicher für mich
und ich frage mich, ob ich das nicht global machen kann. In
Javascript gibt es ja soetwas, wie "var variable;". Wie sieht
das in PHP aus bzw. wie macht man's am besten ?

danke für Tipps und

beste gruesse,
heinetz

  1. Hallo!

    Beispiel:

    if (!$uid) $uid = $_GET['site_id'];

    Den Fehler beseitigen konnte ich mit:

    if (!isset($uid)) $uid = $_GET['site_id'];

    So kann ich natürlich sämtliche Fehler aus dem Weg räumen,
    allerdings wird dadurch mein Code unübersichtlicher für mich
    und ich frage mich, ob ich das nicht global machen kann.

    Du hast diese Variablen doch bereits (super)global zur Verfügung - warum kopierst Du diese? Nutze doch die Elemente der superglobalen Arrays($_GET, $_POST etc.) direkt.

    Ciao

    GG

    --
    "If I do not seek to understand what is happening here
    - then I've got peanuts in my head!"
    (I. Hosein)
    1. Hello,

      Du hast diese Variablen doch bereits (super)global zur Verfügung - warum kopierst Du diese? Nutze doch die Elemente der superglobalen Arrays($_GET, $_POST etc.) direkt.

      Es geht hier um die Überprüfung und ggf. Reparatur der Aufrufparameter.

      Da nützt es auch nichts, die Variablen _ungeprüft_ direkt zu benutzen. Man müsste sie zumindest vorher auf Einhaltung des vorgesehenen Wertebereiches prüfen und reparieren, soweit das möglic ist. Wenn es nicht möglich ist, müsste eine Fehlerbehandlung z.B. in Form einer Ausnahmebehandlung (Exception Handler) stattfinden. Zumindest dürfte das Script nicht den normalen Gang weiterlaufen.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo!

        Es geht hier um die Überprüfung und ggf. Reparatur der Aufrufparameter.

        Dazu muß man sie nicht umkopieren!

        Da nützt es auch nichts, die Variablen _ungeprüft_ direkt zu benutzen.

        Davon schrieb ich nichts.

        Ciao

        GG

        --
        "If I do not seek to understand what is happening here
        - then I've got peanuts in my head!"
        (I. Hosein)
        1. Hello,

          Es geht hier um die Überprüfung und ggf. Reparatur der Aufrufparameter.

          Dazu muß man sie nicht umkopieren!

          Da nützt es auch nichts, die Variablen _ungeprüft_ direkt zu benutzen.

          Davon schrieb ich nichts.

          Eben! Darum habe ich es ja nachgeholt. :-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
  2. Hello,

    ich muss mal sauber machen ;)

    Das glaube ich auch -->

    Ich habe mir mal das Logfile meines aktuellen PHP-Projekts
    angesehen. Darin stehen (zu Hauf!) unnknown Errortypes alá

    "Undefined index:"

    Sprich ich frage in meinen Scripten Variablen ab, die nie
    initialisiert wurden.

    Beispiel:

    if (!$uid) $uid = $_GET['site_id'];

    --> nämlich, weil Du hier ungeprüfte Daten (von außen kommend) in dein Script einfließen lässt.
        In $_GET['site_id'] könnte alles drinstehen.

    Den Fehler beseitigen konnte ich mit:

    if (!isset($uid)) $uid = $_GET['site_id'];

    Das machtr die Sache noch nicht besser.

    In PHP gibt es dafür die Filterfunktionen
    http://de.php.net/manual/en/book.filter.php

    Hier würde ggf. ein Sanitize-Filter passen:  FILTER_SANITIZE_NUMBER_INT

    oder aber die klassische Variante:

    $id = 0;
        if (isset($_GET['site_id']))
        {
            $id = intval($_GET['site_id']);
        }

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi!

      Er wollte es doch übersichtlich haben ...

      $id = 0;
          if (isset($_GET['site_id']))
          {
              $id = intval($_GET['site_id']);
          }

      $id = isset($_GET['site_id']) ? $_GET['site_id'] : 0;

      Lo!

      1. Hello,

        Er wollte es doch übersichtlich haben ...

        Und schon ist der Fehler wieder drin!
        Schlanker Code ist nicht übersichtlicher, als expliziter, was hiermit bewiesen ist!
        Selbst Profis wie Du fallen da gerne auf ihre "achbinichtollichkriegallesineineZeileohneeinenAbsatz"-Manie herein ;-))

        $id = 0;
            if (isset($_GET['site_id']))
            {
                $id = intval($_GET['site_id']);
            }

        $id = isset($_GET['site_id']) ? $_GET['site_id'] : 0;

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi!

          Und schon ist der Fehler wieder drin!

          $id = isset($_GET['site_id']) ? $_GET['site_id'] : 0;

          Was für ein Fehler soll da sein?

          Lo!

          1. Tach.

            Und schon ist der Fehler wieder drin!

            $id = isset($_GET['site_id']) ? $_GET['site_id'] : 0;

            Was für ein Fehler soll da sein?

            Ich nehme an, Tom meinte sein intval(), das bei Deiner Verkürzung unter den Tisch gefallen ist.

            --
            Wenn es schwingt, ist es ein Filter – Oszillatoren würden so etwas nie tun.
            1. Hi!

              Ich nehme an, Tom meinte sein intval(), das bei Deiner Verkürzung unter den Tisch gefallen ist.

              Stimmt (wenn man davon ausgeht, dass die ID nummerisch sein soll). Es ist aber nicht der Schreibweise geschuldet, dass ich es übersah.

              $id = isset($_GET['site_id']) ? intval($_GET['site_id']) : 0;

              Lo!

            2. [latex]Mae  govannen![/latex]

              Und schon ist der Fehler wieder drin!

              $id = isset($_GET['site_id']) ? $_GET['site_id'] : 0;

              Was für ein Fehler soll da sein?

              Ich nehme an, Tom meinte sein intval(), das bei Deiner Verkürzung unter den Tisch gefallen ist.

              Das habe ich auch vermutet, was dieser lapsus wiederum mit der Art der Schreibweise zu tun haben soll, wäre dann von Tom noch auszuführen.

              Wer bei der ternären Schreibweise das intval vergißt, kann es genauso bei der "klassischen" Schreibweise vergessen.

              Cü,

              Kai

              --
              A workaround for an avoidable problem often adds clutter and overhead to the program which
              could have been avoided by not creating the problem in the first place.(Garrett Smith/clj)
              Foren-Stylesheet Site Selfzeug JS-Lookup
              SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
    2. Hi Tom.

      if (!$uid) $uid = $_GET['site_id'];

      --> nämlich, weil Du hier ungeprüfte Daten (von außen kommend) in dein Script einfließen lässt.

      Ins Skript einfliessen? Was heisst das? Sind die Daten dann tiefer im Skript drin als vorher, wenn sie nur im Array $_GET stehen?

      In $_GET['site_id'] könnte alles drinstehen.

      "Alles" heisst: ein beliebiger String. Und?

      In PHP gibt es dafür die Filterfunktionen
      http://de.php.net/manual/en/book.filter.php

      "Dafuer"? Wofuer?

      Hier würde ggf. ein Sanitize-Filter passen:  FILTER_SANITIZE_NUMBER_INT

      Um User-Daten zu veraendern und dann so zu tun, als seien diese veraenderten Daten vom User eingegeben worden. Das ist fast immer schlecht. Ich wuerde sogar fast das "fast" streichen wollen.

      Viele Gruesse,
      der Bademeister

  3. Hello,

    "Undefined index:"

    Sprich ich frage in meinen Scripten Variablen ab, die nie
    initialisiert wurden.

    Beispiel:

    if (!$uid) $uid = $_GET['site_id'];

    Den Fehler beseitigen konnte ich mit:

    if (!isset($uid)) $uid = $_GET['site_id'];

    Das sieht beim zweiten Mal Hingucken sowieso sehr merkwürdig aus...
    Das "undefined Index" bekommst Du ja dann, wenn $_GET['site_id'] nicht vorhanden ist.

    Also müsstest Du sowieso prüfen, ob $_GET['site_id']gesetzt ist und nicht, ob $uid vorhanden ist.
    Das sind zwei verschiedene Schuhe.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de