Tom: PHP MySQL Datenbank durchsuhen

Beitrag lesen

Hello,

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

Au Backe! Da kann man ja in $_POST['search'] alles reinschreiben... Auch böse Zeichenketten!

Außerdem solltest Du eben nicht $_POST[search], sondern $_POST['search'] nehmen, wenn search keine Konstante von PHP ist, die Du entsprechend festgelegt hast.

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???

Bevor Du suchst, solltest Du abfragen, ob dein $_POST['swarch'] etwas enthält.

Außerdem baut man solche Prüfungen besser so auf, dass man ein Eingabefeld und vier oder fünf Postbuttons oder Radio-Alternatives bereitstellt:

|Eingabefeld|  [stimmt genau überein] [beginnt mit] [enthält] [endet mit] [ist leer]

Das kann man auch noch negieren.

Dann kann man im Script genauer bestimmen, wie das Statement aufgebaut sein soll.
Diese Alternativen kann man natürlich auch verschlüsseln mit '+' '-' ..., so wie Google und Co das machen. Das ist aber eigentlich nicht komfortabel.

Das '%' und das '_' muss man ggf. maskieren, wenn man nicht will, dass der user das vons sich aus benutzt bei einer Abfrage mit LIKE.

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

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