ich habe ein Formular mit 4 Text Feldern
[ul]
[li]Kundennummer[/li][li]Geburtstag[/li][li]Kundenvorname[/li][li]Kundennachname[/li][/ul]Nun möchte ich die Möglichkeit haben nach min. 1 dieser Attribute zu suchen. Die leeren Felder sollen ignoriert werden, die vollen müssen natürlich zutreffend sein (wenn 2 Felder genutzt werden müssen beide korrekt sein und nicht nur eins)
$abfrage=mysql_query("SELECT * FROM protokolle WHERE ((kundennummer = '$kundennummer' AND '$kundennummer' IS NOT NULL)
OR (geburtstag = '$geburtstag' AND '$geburtstag' IS NOT NULL)
OR (kundennachname = '$kundennachname' AND '$kundennachname' IS NOT NULL)
OR (kundenvorname = '$kundenvorname' AND '$kundenvorname' IS NOT NULL))");
Allerdinsg funktioniert das nicht so ganz wie ich will. Er gibt mir nämlich im Ergebniss alle Datensätze zurück was natürlich nicht zutreffend ist.
Wo liegt der Fehler? Lässt sich das überhaupt per SQL Abfrage lösen oder komme ich um eine verschachtelte Schleifenkonstruktion nicht rum ?
EDIT hab das ganze jetzt nochmal genauer durchdacht. Mein SQL Befelh ist falsch. Aber müsste er nicht die Möglichkeit geben, nach einem Feld zu suchen? Sprich wenn ich in 2 Felder was eingebe müsste er alles ausgeben, was für eines der beiden Felder passend ist ? Auch das funktioniert nämlich leider nicht … wiegesagt - er gibt alles aus
Wenn du nun mit deinem Statement nach dem Nachnamen „Musterma“ suchen würdest, würdest du hier kein ergebniss bekommen, da du „Mustermann“ hierbei nehmen müsstest.
Um auch ergebnisse zu bekommen, die mit der Eingabe „gleichen“, musst du die LIKE-Klausel nehmen.
SELECT * FROM tabelle WHERE nachname=‚Musterma‘
Keine ergebnisse, da kein Datensatz mit „Musterma“ existiert.
SELECT * FROM tabelle WHERE nachname LIKE ‚%Musterma%‘
Ein Ergebniss - Es Existiert der Datensatz „Mustermann“, da dieser mit „Musterma“ anfängt bzw dies beinhaltet.
[PHP]
<?php
// Wenn Kundennummer gesezt
if(isset($kundennummer) && $kundennummer != "") {
$query = "kundennummer LIKE '%" . $kundennummer . "%'";
}
// Wenn Geburtstag gesezt
if(isset($geburtstag) && $geburtstag != "") {
// Wenn Kundennummer vorher gesezt, dann "OR"
if(isset($kundennummer) && $kundennummer != "") {
$or = " OR ";
}
$query .= $or . "geburtstag LIKE '%" . $geburtstag . "%'";
}
// Wenn Nachname gesezt
if(isset($kundennachname) && $kundennachname != "") {
// Wenn Kundennummer oder Geburtstag vorher gesezt, dann "OR"
if(isset($kundennummer) && $kundennummer != "" || isset($geburtstag) && $geburtstag != "") {
$or = " OR ";
}
$query .= "OR kundennachname LIKE '%" . $kundennachname . "%'";
}
// Wenn Vorname gesezt
if(isset($kundenvorname) && $kundenvorname != "") {
// Wenn Kundennummer oder Geburtstag oder nachname vorher gesezt, dann "OR"
if(isset($kundennummer) && $kundennummer != "" || isset($geburtstag) && $geburtstag != "" || isset($kundennachname) && $kundennachname != "") {
$or = " OR ";
}
$query .= "OR kundenvorname LIKE '%" . $kundenvorname . "%'";
}
$abfrage = mysql_query("SELECT * FROM protokolle WHERE" . $query);
?>