• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL String zusammenbauen in Abhängigkeit von ausgefüllten Feldern

_R_A_L_F_

Mitglied
Hallo,

ich hab folgendes Problem und zwar sieht mein Aufbau wie folgt aus:

- 2 Textfelder mit Text Eingabe
-2 Auswahl Boxen
- 2 Textfelder mit Datums und Uhrzeit Angabe

Für jedes Eingabefeld gibt es auch eine Spalte in einer Datenbank.

Jetzt weiß ich aber keine Möglichkeit wie ich es programmieren muss, damit je nach Eingabe der SQL String so zusammengebaut wird, dass auch eine gültige Abfrage zustande kommt. Den es werden eventuell nicht alle Textfelder oder Auswahlboxen gesetzt.

Als Beispiel:
Im ersten Textfeld geb ich einen Text ein, im zweiten nicht und in der ersten Auswahlbox schon.

Dann sollte/muss der gültige SQL String so aussehen:
Select * from Tabelle WHERE textfeld1 = hallo AND auswahlbox1 = hiernicht AND datum BETWEEN 01-01-2015 00:00:01 AND 2015-07-01 00:19:22 ODER BY DESC

Ich bekomm es aber nicht hin, zum Teil habe ich bei dem WHERE zwei AND AND drin usw.

Wie ist da der richtige Ansatz dies zu lösen?

Danke schon mal

Gruß
 
hi, also eigentlich ist es ganz einfach, du musst nur eine String verknüpfung machen. Das geht mit dem Zeichenketten Operator

Um dir nun aber genauer helfen zu können würde ich vorschlagen das du uns deinen Ansatz mal zeigst. Da du ja geschrieben hast dass du in der WHERE zwei mal AND drin hast, musst du ja schonen Ansatz haben.
 
Ja klar, die Idee hatte ich auch aber dann hatte ich eben auch das Problem mit den doppelten Texten.

Also mein Ansatz war der:
Mit einer If Anfrage will ich heraus bekommen, ob jemand bei einem z.B. Textfeld einen Wert eingegeben hat.
PHP:
    //Textfeld1 filtern
    if (empty($textfeld1))
     {
    $fi_textfeld1 = '';
     }
    else
     {
    $fi_textfeld1 = 'spalte1 = '.$textfeld1.' ';
    }

Den SQL String baue in dann mit den gefilterten Variablen zusammen:
PHP:
Select * from '.$table.' WHERE '.$fi_textfeld1.$fi_textfeld2.$fi_combo1.$fi_combo2.' AND datum BETWEEN '.$fi_von.' AND '.$fi_bis.' ODER BY '.$sortierung.'

Hab jetzt speziell in den If Abfragen mit den AND Anhängsel verzichtet weil es ja so eh nicht funktioniert.
 
So, ich schreibe nun mit tablet, also Schreibfehler sind im Text inbegriffen. Ich würde das so machen
$where .= 'spalte1 =' . $value1 .' AND ';
Dann nächste überprüfung und schreibst den zweiten wert
$where .= 'spalte2 ='.........

Dann kannst du dir $where mal mit echo ausgeben ob alles stimmt. Da wird die auffallen, dass zum Schluss noch ein AND kommt. Dieses kannst du mit der Funktion rtrim abschneiden und dann müsstest du deine where Bedingung haben. Wenn es unverständlich ist kann ich dir erst morgen ein genaueres Beispiel zeigen
 
Ja genau den Ansatz habe ich gebraucht :)

Habs jetzt so gelöst:
Die Abfrage
PHP:
    if (empty($textfeld1))
     {
    $textfeld1 = '';
     }
    else
    {
    $where.= 'spalte1 = '.$textfeld1.' AND ';
    }

Den SQL String baue ich dann wie folgt zusammen:
PHP:
$sql = 'Select * from '.$table.' WHERE '.$where.' datum BETWEEN '.$fi_von.' AND '.$fi_bis.' ODER BY '.$sortierung.'';

Somit hat man nicht mal ein doppeltes AND und der SQL String passt.

Danke nochmal B3nnoX

Eine Frage hätte ich aber noch:
die Comboboxen sind jedes mal auf den Grundwert nachdem ich absenden gedrückt habe.
Wie kann ich es schaffen, dass der Wert übernommen bleibt?

Combo Box Code:
PHP:
 <label for="status">Auswahlbox</label>
    <label class="text">
    <select name="option1" class="select">
    <option value=""  <?php if ($option1 == 'alles')  echo "selected='selected'"; ?>>alles</option>
    <option value="1" <?php if ($option1 == '1') echo "selected='selected'"; ?>>1</option>
    <option value="2"  <?php if ($option1 == '2')  echo "selected='selected'"; ?>>2</option>
    </select></label>
 
Wenn in $option1 das richtige drinsteht, sollte der Quellcode so funktionieren.
 
Also das Absenden funktioniert schon, das da der richtige Wert übertragen wird nur steht das Auswahlfeld wieder auf den default Wert wenn ich die <Form> absende wenn z.B. eine Fehlerabfrage vorgenommen wird.
 
Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Zurück
Oben