Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme bei Datenbankabfrage mit where

Einklappen

Neue Werbung 2019

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

  • Probleme bei Datenbankabfrage mit where

    Hallo,
    ich bin neu hier im Forum und beschäftige mich erst seit kurzen mit php und mySQL.

    Ich habe ein Abfrageformular für eine Datenbank erstellt mit folgenden Felder:
    1x Selectlist (Land)
    2x Texteingabe (PLZ & Ort)

    die Werte der drei Felder werden über die URL an ein weiteres Formular mit einer Abfrageliste übertragen.

    Derzeit benutze ich für die Abfrage folgenden Code:
    PHP-Code:
    global $database;

    $land $_GET['ff_param_apo_land'];
    $plz $_GET['ff_param_apo_plz'];
    $ort $_GET['ff_param_apo_ort'];
    $alle $_GET['ff_param_apo_alle'];

    $database->setQuery(
    "select * from #_meinetabelle ".
    "where (land='$land' AND ((stadt='$ort') OR (plz LIKE '".$plz."%')))  OR (0='$alle') ".
    "order by land, plz, name"
    );

    $rows $database->loadObjectList(); 
    Das Problem ist, das wenn der User nur einen Ort angibt trotzdem alle PLZ's mit ausgeben werden, obwohl kein Parameter für die PLZ übertragen wird.

    Kann ich das irgendwie über die "where"- Klausel der Abfrage regeln?
    Oder kennt jemand eine andere Lösung?

    Mirko

  • #2
    Du solltest dein QUERY anhand der Benutzereingaben "zusammenbauen", d.h. wenn keine PLZ eingegeben wurde, diesen Teil der Abfrage erst gar nicht in den QUERY-String mit hineinnehmen.

    Kommentar


    • #3
      Zudem solltest du dich mit SQL-Injection beschäftigen. Denn so würden alle angegebenen Daten ungefiltert in die Datenbankabfrage geschickt.
      Außerdem solltest du, wann immer es geht, POST als Methode verwenden, weil das z.B. Phishing ausschließt. Je nachdem welche Daten du abfragst (Passwörter, andere "geheime" Daten) solltest auf jeden Fall POSt verwenden und die übergebenen Daten zusätzlich auf die erwarteten Typen überprüfen. Eine Zahl sollte keine Buchstaben enthalten und ein String sollte am Anfang keine Leerzeichen haben.

      Die php-Funktionen dafür wären intval() und trim().

      Kommentar


      • #4
        Das hier ist sicher auch hilfreich:
        http://php.net/manual/de/function.http-build-query.php

        Kommentar

        Lädt...
        X