Phil: Probleme mit $_GET['var']

Hi!
Ich habe mal versucht, meine Seite auf eben diese Art umzuschreiben, anstatt $var zu nutzen...
Aber ich scheitere schon am Anfang:
Früher hatte ich immer ne Abfrage:

if(empty($var)) {do this}

aber wie mach das nun mit den $_GET['var']?
weil einfach stur ersetzen hilft nix :(

Zudem: Wie übergebe ich mit normalen Links Parameter, die in der URL nicht stehen, also nur mit $_POST ausgelesen werden können?!
Wer dies beantworten kann, der kann in der ersten Frage einfach $_GET mit $_POST ersetzen ;)
CU
http://www.yubb.de

  1. Hi!
    Ich habe mal versucht, meine Seite auf eben diese Art umzuschreiben, anstatt $var zu nutzen...
    Aber ich scheitere schon am Anfang:
    Früher hatte ich immer ne Abfrage:

    if(empty($var)) {do this}

    aber wie mach das nun mit den $_GET['var']?
    weil einfach stur ersetzen hilft nix :(

    Lass dir mit phpinfo(INFO_VARIABLES); mal die PHP-Variablen ausgeben.

    Dort steht, welche Variablen PHP kennt (die musst du dann verwenden). Alte PHP-Versionen (IIRC vor 4.1 oder 4.2) kennen nur $HTTP_GET_VARS, nicht $_GET (bei POST, COOKIES, SERVER und ENV das gleiche). Neuere Versionen kennen beides (wobei anzumerken ist, dass die $_*-Variablen superglobal sind, d.h. sie stehen auch in Funktionen zur Verfügung, ohne dass man sie mit "global" bekannt machen muss. Ab PHP 4.3 gibt es nur noch die $_*-Variablen.

    Zudem: Wie übergebe ich mit normalen Links Parameter, die in der URL nicht stehen, also nur mit $_POST ausgelesen werden können?!

    Ääähh, bitte was? Parameter in der URL sind mit $_GET zu lesen, und POST-Formulare mit $_POST.

    PS: Es ist keine Schande, bestimmte erwartete Parameter zu kopieren. Du kannst am Start des Skriptes gerne:
    $var = $_GET['var'];
    machen. Wenn du ganz schlau bist, dann machst du auch sowas:
    if (isset($_GET))
    {
      $var = $_GET['var'];
      //Weitere Zuweisungen
    }
    else
    {
      $var = $HTTP_GET_VARS['var'];
      //Weitere Zuweisungen
    }

    Du verlierst dabei aber den superglobalen Charakter von $_GET (und den anderen Variablen).

    Absolut nicht empfehlenswert ist es, die im Hash $_GET (oder $_POST etc.) enthaltenen Werte "auszupacken", also ungeprüft alle Schlüssel als Variablennamen zu verwenden, diese zu erzeugen und ihnen den übergebenen Wert zuzuweisen. Genau _deswegen_ hat PHP gerne mal Sicherheitsprobleme, weil man ja nicht nur die vom Programmierer vorgesehenen Variablen übergeben kann, sondern auch eigene. Wenn ein Angreifer den Quelltext der Seite kennt, kann er leicht sehen, ob er ungeprüfte Variablenwerte einschleusen kann - und das ist böse[tm].

    - Sven Rautenberg