[PHP/mySQL] Suche in mehreren Feldern

TheBinary

Cadet 1st Year
Registriert
Okt. 2004
Beiträge
10
Hallo!

Ich habe folgendes Problem mit der Suchfunktion meiner Adressdatenbank, welche unter folg. URL erreichbar ist: http://thebinary.dyndns.org/adressdb/

Und zwar will ich jetzt z.B. alle aus der Datenbank raussuchen, welche als Anrede "Frau" haben. Da die anderen Suchfelder jedoch leer bleíben, werden auch Datensätze als Suchresultat zurückgegeben, deren Inhalte auch leer sind.

D.h. ich bekomme fasche Resultate zurück, in dehnen dann bei Anrede "Herr" oder "Firma" steht. Wie kann ich das ändern, das z.B. nicht benutzte Felder von der Suche ausgeschlossen werden?

Hier mal der PHP Code der entspr. Stelle:

Code:
<?php
    $id= $_POST['id'];
    $anrede= $_POST['anrede'];
    $vorname= $_POST['vorname'];
    $nachname= $_POST['nachname'];
    $strasse= $_POST['strasse'];
    $hnr= $_POST['hnr'];
    $plz= $_POST['plz'];
    $wohnort= $_POST['wohnort'];
    $telefon= $_POST['telefon'];
    $telefax= $_POST['telefax'];
    $email= $_POST['email'];
    $icq= $_POST['icq'];

  $sql = "SELECT * FROM main WHERE
      id='$id' OR
      anrede='$anrede' OR
      vorname='$vorname' OR
      nachname='$nachname' OR
      strasse='$strasse' OR
      hausnummer='$hnr' OR
      plz='$plz' OR
      wohnort='$wohnort' OR
      telefon='$telefon' OR
      telefax='$telefax' OR
      email='$email' OR
      icq='$icq'";
  $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
  $anzahl = mysql_num_rows($adressen_query);
?>

Vielen Dank für eure Hilfe!! :)

Gruss,

TheBinary
 
Zuletzt bearbeitet:
Du könntest für jede variable (beoispilsweise bei id) ein
AND id IS NOT NULL
einfügen :

$sql = "SELECT * FROM main WHERE
id='$id' AND id IS NOT NULL OR
anrede='$anrede' AND anrede IS NOT NULL OR
vorname='$vorname' AND vorname IS NOT NULL OR
nachname='$nachname' AND nachname IS NOT NULL OR
strasse='$strasse' AND strasse IS NOT NULL OR
hausnummer='$hnr' AND hausnummer IS NOT NULL OR
plz='$plz' AND plz IS NOT NULL OR
wohnort='$wohnort' AND wohnort IS NOT NULL OR
telefon='$telefon' AND telefon IS NOT NULL OR
telefax='$telefax' AND telefax IS NOT NULL OR
email='$email' AND email IS NOT NULL OR
icq='$icq' AND icq IS NOT NULL ";

kannst zwar nicht nach Datensätzen suchen, die in bestimmten Zellen keinen Inhalt haben, aber ich glaube, dass das nicht allzu wichtig ist.

Wennh das da oben noch nicht klappen sollte, dann setze die einzelnen OR-Anweisungen in klammern

mfg Mainzl0r
 
als erstes einmal Danke für deine schnelle Antwort.

Du könntest für jede variable (beoispilsweise bei id) ein
AND id IS NOT NULL einfügen

Habe das mal gemacht...es hat sich aber an den Suchergebnissen nix geändert. Warscheinlich wegen dem "OR". Sobald da eine Sache aus dem Datensatz zutrifft gibt der das als Ergebniss zurück. :freak:

Was auch ein Problem ist, wenn ich statt "OR" ein "AND" dahin setze, muss ich alle Felder ausfüllen, damit ich ein Ergebniss zurück bekomme.

Wenn das da oben noch nicht klappen sollte, dann setze die einzelnen OR-Anweisungen in klammern

In Klammern setzten? In eckige? Kannst du mal kurz ein Syntax Beispiel geben!? :)
 
$sql = "SELECT * FROM main WHERE
(id='$id' AND id IS NOT NULL) OR
(anrede='$anrede' AND anrede IS NOT NULL) OR
(vorname='$vorname' AND vorname IS NOT NULL) OR
(nachname='$nachname' AND nachname IS NOT NULL) OR
(strasse='$strasse' AND strasse IS NOT NULL) OR
(hausnummer='$hnr' AND hausnummer IS NOT NULL) OR
(plz='$plz' AND plz IS NOT NULL) OR
(wohnort='$wohnort' AND wohnort IS NOT NULL) OR
(telefon='$telefon' AND telefon IS NOT NULL) OR
(telefax='$telefax' AND telefax IS NOT NULL) OR
(email='$email' AND email IS NOT NULL) OR
(icq='$icq' AND icq IS NOT NULL) ";
 
Da mit den Klammern hat leider auch nicht geholfen. Die Ergebnisse der Suche sind immernoch gleich. :freak:

Nochmal nur zur Verdeutlichung: Unten ist eine typische Abfrage, wie ich sie oben beschreiben habe. Ich möchte z.B. das unter den Ergebnissen der Suche im Attribut "Anrede" keine Ergebnisse mit Herr oder Firma auftauchen, wenn in dem Attribut nach "Frau" gesucht worden ist. (siehe unten)

Ihre Sucheingaben:

ID Anrede Vorname Nachname Strasse Hausnummer PLZ Wohnort Telefon Telefax Email
--------------------------------------------------------------------------------------------------------------------
Frau

Ergebnisse:

ID Anrede Vorname Nachname Strasse Hausnummer PLZ Wohnort Telefon Telefax Email
--------------------------------------------------------------------------------------------------------------------
16 Frau Vera Baum Baumweg 1 27446 Leverkusen 022246573 022267564 vera.baum@lev.de 65444432
18 Firma Hans Werner Becher Industrie Str. 22 57338 Köln 0221687959 0221475647 becher@firma.de
19 Herr Michael Mustermeier Musterstr. 122 40332 Hamburg 0221443322 test@web.de
 
Wird immer nur ein Feld weit angefragt ?? Dann reicht doch das hier:

PHP:
$sql = "SELECT * FROM main WHERE anrede='$anrede'";

Der Rest interressiert doch dann nicht wenn wie beschrieben nur in der Anrede nach "Frau" gesucht werden soll.
 
Nein, es sollen alle Felder in die Abfrage eingebracht werden,
welche einen Suchbegriff enthalten.

Das müsste also irgendwie dynamisch geregelt werden schätze ich. :freaky:
 
Stell dir die Abfrage doch zusammen.

$abfrage = "SELECT * FROM main WHERE 1 ";

if (!empty($id)) $abfrage .= "AND id like '$id' ";
if (!empty($anrede)) $abfrage .= "AND anrede like '$anrede' ";

und so weiter. Und danach eben mysql_query($abfrage);

Bei Textfeldern würde ich generell immer like als Vergleich nehmen, damit man bei der Suche nicht unbedingt auf Groß und Kleinschreibung achten muss.
 
Zuletzt bearbeitet:
Hallo,

wahrscheinlich liegt das Problem im Feld "icq" begründet, welches mal leer ist und mal nicht. Probiere mal folgendes:

Code:
$sql = "SELECT * FROM main WHERE
(id='$id' AND id!='' AND id IS NOT NULL) OR
(anrede='$anrede' AND anrede!='' AND anrede IS NOT NULL) OR
(vorname='$vorname' AND vorname!='' AND vorname IS NOT NULL) OR
(nachname='$nachname' AND nachname!='' AND nachname IS NOT NULL) OR
(strasse='$strasse' AND strasse!='' AND strasse IS NOT NULL) OR
(hausnummer='$hnr' AND hausnummer!='' AND hausnummer IS NOT NULL) OR
(plz='$plz' AND plz!='' AND plz IS NOT NULL) OR
(wohnort='$wohnort' AND wohnort!='' AND wohnort IS NOT NULL) OR
(telefon='$telefon' AND telefon!='' AND telefon IS NOT NULL) OR
(telefax='$telefax' AND telefax!='' AND telefax IS NOT NULL) OR
(email='$email' AND email!='' AND email IS NOT NULL) OR
(icq='$icq' AND icq!='' AND icq IS NOT NULL)";

Die Methode von Crazywolf sollte auch funktionieren, da dort schon von PHP geprüft wird, ob nach $icq gesucht werden soll oder nicht. Am besten Du kombinierst diese und seine Methode, dann solltest Du mit der Suche immer auf der sicheren Seite sein.

MfG
Alex
 
Ich habe eben mal beide Methoden (doppelt hält ja bekanntlich besser, wie GaNyMeD schon meinte) eingebunden. ;)

Jetzt scheint die Suchfunktion so zu klappen wie ich mir das Vorgestellt habe. :)

Vielen Dank an euch alle.
 
Zurück
Oben