Frage von gollerxd, 28

Hi ich schreibe gerade ein programm mit php das eine select abfrage mit mehreren sucheingaben abruft doch was ist der fehler?

Das Programm hat 6 Suchfelder das eine Datenbank mit 18 spalten durchsucht und halt die komplette zeile oder Zeilen ausgibt die zu den suchbegriffen passen dabei muss halt die id zur id passen und die cont_nr zur cont_nr hier ist die Abfrage erstmal:

    <table id="eingabeTabelle">
    <tr>
    <th>ID:</th>
    <th>Blatt:</th>
    <th>Container-Nummer:</th>
    <th>Container-Typ:</th>
    <th>Container-Groe&szlig;e:</th>        
    <th>Reederei:</th>
    </tr>
    <tr>
    <form action="programm.php" method="post">
    <td class="success"><input type="text" class="form-control" name="ID"></td>
    <td><input type="text" class="form-control" name="Blatt"></td>
    <td class="success"><input type="text" class="form-control" name="Container-Nummer"></td>
    <td><input type="text" class="form-control" name="Container-Typ"></td>
    <td class="success"><input type="number" class="form-control" name="Container-Groesse"></td>
    <td><input type="text" class="form-control" name="Reederei"></td>
    <input type="submit" name="mein_button" value="suchen" />
    </form>
    </tr>
    <?php
        $mysql_host = 'localhost';
        $mysql_name = 'root';
        $mysql_pw = '';
        $connection_error = 'Konnte keine Verbindung zur Datenbank herstellen';
        mysql_connect($mysql_host, $mysql_name, $mysql_pw) or die($connection_error);
        mysql_select_db('container') or die($connection_error);
    
    if(isset($_POST['mein_button'])):
    
        $suche_id = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['ID']))));
        $suche_Blatt = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['Blatt']))));
        $suche_cont_nr = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['Container-Nummer']))));
        $suche_cont_typ = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['Container-Typ']))));
        $suche_cont_groesse = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['Container-Groesse']))));
        $suche_reederei = trim(htmlentities(stripslashes(mysql_real_escape_string($_POST['Reederei']))));
    
        $sql = "SELECT * FROM container2
        WHERE
        id like '%".$suche_id."%'
        OR
        blatt like '%".$suche_Blatt."%'
        OR
        cont_nr like '%".$suche_cont_nr."%'
        OR
        ct_groesse like '%".$suche_cont_groesse."%'
        OR
        ct_typ like '%".$suche_cont_typ."%'
        OR
        reederei like '%".$suche_reederei."%'";
    
        $query = mysql_query($sql);

Jedoch geschieht nichts die zeilen werden genau so ausgegeben als würde in den suchfeldern nichts stehen jedoch wenn ich nach jedem like '%".$suche_id."%' eingebe geht das ganze aber halt nur mit ein suchfeld. Ich hoffe meine message ist einigermaßen rübergekommen und ich hoffe dass ihr mir helfen könnt. Danke im vorraus.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Kiboman, 14

jetzt werden immer alle ausgegeben?

das wäre logisch.

da du bei dem where immer ein OR verwendest.

d.h. Alle leeren felder werden nach LIKE '%%' durchsucht.

das trifft auf alles zu.

setzte den query dynamisch mit php zusammen und benutze nur die where klauseln die du auch benötigst.

evt könnte auch ein AND helfen.

ich weiss aber nicht wie es aussehen soll wenn in mehre felder eingetippt wird.

das musst du entscheiden.

Antwort
von Muadeep, 18

Als erstes würde ich die "-" aus den Variablennamen des forms entfernen. Schreib die variablen entweder mit "_" oder per camelCase.

Kommentar von Muadeep ,

Dann nur die "or" Abfrage ausgeben, die wirklich Inhalt hat. Das sql kann du dann mit if konkatenieren. Ansonsten würde ich mit PHP_info() überprüfen, was wirklich beim Server  ankommt.

Antwort
von acdxx, 10

Versuchs mal mit AND statt OR.  

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten