PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Abfrage mit PHP Variablen die leer sind WHERE plz = ?


Loki555
28.04.2009, 12:51:14
Hallo zusammen,

in meinem HTML Formular gibt es ein Feld PLZ, in dieses gibt der Benutzer eine Postleitzahl ein, mit method = post und action = datei.php werden die Inhalte der Felder in ein Array geschrieben, in der PHP Datei benutze ich diese Variablen in einer SQL Abfrage. Nun kann es vorkommen, daß der Benutzer keine Postleitzahl eingibt.

Was mache ich nun in der SQL Abfrage der php Datei?

Meine SQL Abfrage:
$query = "SELECT * FROM kunden WHERE plz = '$plz' AND kundenart = '$kundenart' AND status = '1'";

$plz ist ein Textfeld.
Wenn dieses Textfeld nicht ausgefüllt ist, kann ich dann einen Platzhalter benutzen, mit dem alle Postleitzahlen angezeigt werden?

Ich kann ja z.B.:
if($plz == '')
{
$plz = ; // aber was schreib ich hier als Platzhalter rein, damit alle Postleitzahlen genommen werden?
}

* hab ich schon versucht, ist aber bei WHERE nicht zulassig oder?

Das Formular hat später ca. 30 Felder aus denen die Abfrage generiert wird.
Gibt es einen Platzhalter der funktioniert?
Gibt es vielleicht eine Möglichkeit die SQL Abfrage dynamisch zu generieren?

Gruß
Peter

DokuLeseHemmung
28.04.2009, 13:03:45
$query = "SELECT ....... WHERE plz <> '' ...........";
$query = "SELECT ....... WHERE plz IS NOT NULL ...........";
Je nach dem ....

Loki555
28.04.2009, 13:08:49
Vielen Dank für Deine Antwort.

Mit dem je nach dem hab ich so meine Problem,
da ich später sehr viele Felder in meinem Formular habe, muss ich für jedes Feld
ein if einbauene und abfragen ob es Text Feld leer ist, dann eine andere SQL Abfrage
benutzen?

Gibt es da nicht einen anderen Weg?
Vielleicht ist mein Ansatz ja schon falsch?

Gruß
Peter

DokuLeseHemmung
28.04.2009, 13:15:24
Was willst du denn erreichen?

Damir
28.04.2009, 13:19:33
Also vom Prinzip geht das so z.B. - habe es jetzt für Dich einfach gehalten damit Du siehst wie es funktioniet

<?PHP

$where = '';
if(!empty($plz))
$where .= "plz = '" . $plz . "' AND ";
if(!empty($alter))
$where .= "alter = '" . $alter . "' AND ";
if(!empty($strasse))
$where .= "strasse = '" . $strasse . "' AND ";

$query = "SELECT * FROM kunden WHERE " . $where . "kundenart = '$kundenart' AND status = '1'";

?>

Damir

DokuLeseHemmung
28.04.2009, 13:33:19
$filter = array();
$where = ' ';

if(isset($_POST['plz']) && ctype_digit($_POST['plz']))
$filter[] = "plz LIKE '$_POST[plz]%'";

if(!empty($_POST['kundenart']))
$filter[] = " kundenart = '".mysql_real_escape_string($_POST['kundenart'])."'";

$filter[] = "status = '1'";


if(!empty($filter))
$where = ' WHERE '.implode(' AND ',$filter);

$query = "SELECT ....... ".$where." ...........";

EDIT:
Huch viel zu spät...

Loki555
28.04.2009, 13:39:29
Ich will bestimmte Daten auf einer Landkarte anzeigen lassen (Google Maps), in der Datenbank sind ca. 50.000 Datensätze, diese will ich mit dem HTML Formular erst einmal etwas einschränken lassen, damit nicht 50.000 Marker erscheinen.

Bei ja/nein Feldern habe ich ja kein Problem, da es ja nur diese zwei Möglichkeiten gibt, bei der Postleitzahl und anderen Feldern, in die der Benutzer etwas ins Formular eintippen kann oder wo nicht nur 0 oder 1 sondern beides angezeigt werden soll, benötige ich einen "Platzhalter" für alles.

Die SQL Abfrage variiert sehr.

@DokuLeseHemmung
über das Formular will ich dem Benutzer die Möglichkeit geben die Datenmenge die zurück gegeben wird etwas ein zu schränken.
Bei Felder wie z.B. der Postleitzahl kann es aber vorkommen, daß nichts in das Feld eingegeben wird, also alle Postleitzahlen angezeigt werden sollen.

@Damir
Danke für deine Hilfe, werde mal auspobieren ob ich damit weiter komme aber auf den ersten Blick sieht es schon mal sehr gut aus.

Werde mich wieder melden, sobald ich etwas weiter bin.

Nochmal vielen Dank für eure Hilfe.

Gruß
Peter

Loki555
28.04.2009, 14:08:26
Tausend Dank. Hat super geklappt und was noch wichtiger ist, ich denke es hat bei mir klick gemacht :-)

Gruß
Peter

Damir
28.04.2009, 14:18:33
Das war ja auch Sinn und Zweck das es Klick macht - wie gesagt kannst Du Dir jetzt Gedanken machen wie Du die Abfragen optimierst - wenn Du es ganz schlau machst ist es ein 3-Zeiler;-)

Damir