Christoph Jeschke: PHP MySQL Datenbank durchsuhen

Beitrag lesen

Guten Tag,

$abfrage = "SELECT * FROM table WHERE data1 LIKE '%".$_POST[search]."%' or data2 LIKE '%".$_POST[search]."%'"; $ergebnis = mysql_query($abfrage);

wenn ich nun die seite aufrufe ohne irgendeine eingabe gamacht zuhaben, wo
dieser code ist, werden alle datensätze angezeigt. warum? wie kann ich es
unterbinden, das die datensätze "erstmal" nicht angezeigt werden???

Wenn search nicht per POST übergeben wird, wird beide Male nach LIKE %% gesucht - %% ist jeder beliebiger String (ein % ist hier eigentlich überflüssig). Die Bedingung lautet also: Wenn ein beliebiger String in data1 oder ein beliebiger String in data2 gefunden wird, liefere den Record zurück.

Noch drei Anmerkungen:

  1. Sollten data1 und data2 verbatim aus dem Schema übernommen sein, möchte ich dir nahelegen, deine Datenbank ordentlich zu normalisieren.
  2. Der Code-Schnippsel oben ist anfällig für SQL Injections. Du solltest jede Benutzereingabe, egal woher sie kommt, sorgfältig überprüfen.
  3. Array-Identifier müssen gequotet werden, wenn es keine Konstanten sind (und noch in ein paar Spezialfällen nicht). Da du offenbar keinen Fehler gemeldet bekamst, solltest du in der php.ini (oder im Skript) error_reporting auf E_STRICT und display_errors auf On konfigurieren.

Gruß
Christoph Jeschke

--
Zend Certified Engineer
Certified Urchin Admin