Klaus: GET auf einen bestimmten Wert prüfen

Guten Abend,

ich möchte gerne prüfen ob in GET einen bestimmten Wert steht. Derzeit sieht es so aus

if (isset($_GET["show"])) {
    echo "OK";  
}

ich möchte aber ein Schritt weiter gehen, der ganze Bereich sollte nur angezeigt werden wenn in $_GET["show"] eine 1 steht. Wie könnte ich dieses umsetzten?

Meine Idee war:

if (isset($_GET["show"] == 1)) {
    echo "OK";  
}

da erhalte ich leider einen Server Fehler 500

  1. Hallo

    ich möchte … ein Schritt weiter gehen, der ganze Bereich sollte nur angezeigt werden wenn in $_GET["show"] eine 1 steht. Wie könnte ich dieses umsetzten?

    Meine Idee war:

    if (isset($_GET["show"] == 1)) {
        echo "OK";  
    }
    

    da erhalte ich leider einen Server Fehler 500

    Mit isset() prüfst du die Existenz einer Variable, nichts weiter. Wenn du ihre Existenz und den Wert prüfen willst, musst du auch beides tun.

    if (isset($_GET["show"]) and $_GET["show"] == '1') { // GET-Werte sind immer Strings!
        echo "OK";
    }
    

    Wenn du nicht gegen einen Wert, sondern eine Gruppe von Werten prüfen willst, kannst du die Prüfung gegen ein Array vornehmen.

    $pruefArray = array('1', '3', '7', '15'); // erlaubte Werte
    
    if (isset($_GET["show"]) and in_array($_GET["show"], $pruefArray)) {
        echo "OK";
    }
    

    Tschö, Auge

    --
    Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
    Terry Pratchett, „Gevatter Tod“
    1. Guten Abend Auge,

      vielen Dank für deine Ausführliche Erklärung. Ich hatte dieses if ( empty ($_GET['vorname']) == 1 ) auf http://www.php-kurs.com/formularauswertung-mit-php.htm wohl falsch verstanden.

      1. Hallo Klaus,

        vielen Dank für deine Ausführliche Erklärung. Ich hatte dieses if ( empty ($_GET['vorname']) == 1 ) auf http://www.php-kurs.com/formularauswertung-mit-php.htm wohl falsch verstanden.

        if ( empty ($_GET['vorname']) == 1 ) prüft keinesfalls, ob in Vorname eine 1 steht, es prüft, ob da überhaupt was drin steht. Und das unnötig kompliziert.

        Außerdem werden auf der Seite wichtige Sicherheitsfragen ausgeblendet.

        <?php
        echo "eingetragener Vorname: ". $_GET['vorname'];
        ?>
        

        erlaubt das Ausführen bösartigen JavaScript-Codes, im harmlosesten Fall ist lediglich deine Seite kaputt, etwa, wenn der Vorname ‚</body>‘ heißt.

        Merke: Nutzereingaben NIEMALS ungeprüft ausgeben, ein htmlspecialchars($_GET['vorname']) ist in diesem Fall unabdingbar.

        Bis demnächst
        Matthias

        --
        Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
        1. Hallo,

          if ( empty ($_GET['vorname']) == 1 ) prüft keinesfalls, ob in Vorname eine 1 steht, es prüft, ob da überhaupt was drin steht. Und das unnötig kompliziert.

          genauer gesagt, und wie der Funktionsname ahnen lässt, prüft das Konstrukt, ob da eben nix drin ist.

          Gruß
          Kalk

  2. Hi,

    ich möchte gerne prüfen ob in GET einen bestimmten Wert steht. Derzeit sieht es so aus

    if (isset($_GET["show"])) {
        echo "OK";  
    }
    

    das ist als Einstieg gut: Mit isset() prüfst du erstmal, ob eine bestimmte Variable oder ein Array-Element - in diesem Fall $_GET["show"] - überhaupt existiert.

    ich möchte aber ein Schritt weiter gehen, der ganze Bereich sollte nur angezeigt werden wenn in $_GET["show"] eine 1 steht. Wie könnte ich dieses umsetzten?

    Denke Schritt für Schritt: Du hast zwei Bedingungen! Zunächst muss $_GET["show"] existieren - siehe oben. Und dann muss $_GET["show"] einen bestimmten Wert haben. Zwei Bedingungen, die beide zutreffen müssen. Dazu kann man entweder zwei if-Statements ineinander verschachteln, oder die beiden Bedingungen mit einem logischen UND verknüpft in ein if-Statement schreiben. Letzteres ist eigentlich der übliche Weg.

    if (isset($_GET["show"] == 1)) {
        echo "OK";  
    }
    

    Das geht schief, weil isset() immer einen Variablenbezug will, und keinen berechneten Ausdruck. Versuch's nochmal mit schrittweiser Logik.

    Das Problem, das viele Einsteiger beim Programmieren haben: Es macht ihnen Mühe, so primitiv zu denken, wie es eigentlich nötig ist.

    So long,
     Martin

  3. Lieber Klaus,

    if (isset($_GET["show"])) {
        echo "OK";  
    }
    

    die Verwendung von isset ist sinnvoll. Manchmal ist auch array_key_exists sinnvoll:

    if (array_key_exists('show', $_GET) && $_GET['show'] == 1) {
        echo 'OK';
    }
    

    Manchmal ist isset aber einfach kürzer und damit "besser".

    Liebe Grüße,

    Felix Riesterer.