MySQL mit Suche bringt falsche Ausgabe

  • Hallo Forum,


    ich versuche gerade Einträge in meinen Tabellen nach Schlagworten zu durchsuchen mit der Zeile

    Code
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%".$_GET['search']."%'";

    Nun wird aber die ganze Tabelle mir entleert und mein Bildschirm geflutet. Daher dachte ich, setzte mal ein Limit...

    Code
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%".$_GET['search']."%' LIMIT ".$_GET['idstart'].",".$_GET['idende']."";

    hier werden mir die ersten x zeilen entsprechend Ausgeben und danach kommen weitere Zeilen die ich nicht möchte und was dann nicht mit dem Schlagwort übereinstimmt.


    Was mache ich nun falsch.


    danke Lars

    • Official Post

    Bin da zwar schon ewig raus, aber mir scheint als vermischst Du hier PHP-syntax mit SQL.

    PHP
    $Suchwort = $_GET['search'];
    $Startposition = $_GET['idstart'];
    $Ausgabenmenge = $_GET['idende'];
    
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%$Suchwort%' LIMIT '$Startposition,$Ausgabenmenge'";

    Natürlich ungetestet.

    • Official Post

    Was willst Du genau erreichen? Wenn Du nur Treffer mit genauem Suchwort willst, dann lass die %-Zeichen weg. Wenn Du Treffer willst, die mit dem Suchwort beginnen, dann setz das % dahinter. Wenn Du Treffer willst, die mit dem Suchwort enden, dann setz das %davor.



    //Edit MagicBird

    Btw. Die Bezeichnungen "idstart" und "idende" sind eigentlich nicht richtig, denn das erste ist die Nummer eines Treffers, ab dem die Ausgabe erfolgen soll und "idende" ist eigentlich die gewünschte Anzahl der Ausgaben. Das hat mit "id" nichts zu tun.

  • Ich habe bei mir ein POCASG PI nun laße ich die Meldungen aus dem HAMNET in die Tabelle schreiben, so das wenn ich auf arbeit bin kann ich meine Meldungen lesen, nun dachte ich mir kann diese Filtern nach Rufzeichen damit ich eben nicht Wetter oder Allgemeine Meldungen angezeigt bekomme also Gebe ich mein Rufzeichen ein und bekomme alles andere.


    Nehme ich das Limit heraus bekomme ich heraus bekomme ich alles zu meinem Rufzeichen das kann natürlich bei Wetter abfragen schon eine ganze Menge an zeilen sein.


    daher dachte ich eben die letzten Zeilen von x menge anzuzeigen.


    Lars

  • Hallo Magic Bird,


    probiere mal den Ansatz von Hyle aus #2 und setze einen festen Wert für die Anzahl Zeilen ein. Die Startposition sollte zunächst einmal keine Rolle spielen.

    Ich bin mir auch nicht sicher, was MYSQL mit den Hochkomma um die Einschränkung herum anstellt.

    Code
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%$Suchwort%' LIMIT 10";


    Viel Erfolg

    Gruß Greenhouse

  • Nehme ich das Limit heraus wird mir meine Suchanfrage perfekt angezeigt aber leider dann zieg hunderte Zeilen.


    Setzte ich nun aber ein LIMIT von 10 kommen 10 Zeilen meiner Anfrage und 10 letzte ID's

  • Dann bau testweise mal ein "order by xyz desc" mit ein..... da ich nicht weiß, wie deine Felder in deiner Tabelle lauten, hab ich mal "id" angenommen.

    Falls die Sortierreihenfolge falsch ist, ersetzte das "desc" durch "asc".

    Code
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%$Suchwort%' order by id desc LIMIT 10";

    Doc.

  • So ok also fehler irgendwo im script gefunden. habe alles bis auf die search abfrage gelöscht und dann kam genau wie hyle es geschrieben hat.


    vielen dank.


    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%$search%' LIMIT $idstart, $idende";

  • Code
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%$Suchwort%' WHERE id BETWEEN $id_start AND $id_ende";

    oder


    Code
    $sqlpocc = "SELECT * FROM ham_poc WHERE msg LIKE '%$Suchwort%' AND id > $id_start LIMIT '$Ausgabenmenge' ORDER BY id";

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Guten Morgen,


    so wie Hyle Beitrag (#2) hat es wunderbar funktioniert, warum mir weitere Zeilen der Tabellen angezeigt werden muß ich mal untersuchen.

    Da werde ich mich in meinen IF Abfragen etwas vertan haben.


    vielen dank an euch...achja und dann muß ich das noch in MySQL Injection umbauen.