1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Datenauswahl über Suchformular (php/mysql)

Dieses Thema im Forum "PHP & Co." wurde erstellt von Aaron_Horowitz, 04.02.08.

  1. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Hallo Leute!

    Ich versuche gerade Daten mit Hilfe eines Formulars aus einer DB auszulesen. Leider klappt das Ganze nicht so recht, da immer die Meldung 'keine passenden Datensätze gefunden' erscheint!
    Mein höchst einfaches Beispiel bezieht sich auf eine DB (namen) mit einer Tabelle (gruppe) und zwei Spalten (vor, nach).
    Hier der Sourcecode für das Formular:
    Code:
    <html>
    <body>
    Suche nach Namen in der Datenbank
    <form action ="Ausgabe2.php" method "post">
    	<input name ="nn"> Nachname<p>
    	<input type ="submit">
    	<input type ="reset">
    </form>
    </body>
    </html>
    Und hier der PHP bzw Mysql Code:
    Code:
    <html>
    <body>
    <?php
    mysql_connect("localhost","root","root");
    mysql_select_db("namen");
    
    $sqlab="select vor, nach from gruppe where nach like '".$_POST["nn"]."' order by nach";
    $res=mysql_query($sqlab);
    $num=mysql_num_rows($res);
    if ($num==0) echo "keine passenden Daten gefunden";
    while ($dsatz=mysql_fetch_assoc($res))
    {
    	echo $dsatz["vor"] . ", "
    		.$dsatz["nach"] . "<br>";
    }
    ?>
    </body>
    </html>
    
    Die Anzeige aller Datensätze mit Select * hat übrigens funktioniert! Wo liegt nur mein Fehler? Stimmt etwas mit meiner Select-Anweisung nicht?
     
  2. Slashwalker

    Slashwalker Winterbanana

    Dabei seit:
    15.05.06
    Beiträge:
    2.190
    Also ich kenne mich mit PHP nicht so gut aus, aber ich glaube, das muss so heissen:
    $sqlab="select vor, nach from gruppe where nach like '%".$_POST["nn"]."%' order by nach";
    Zudem würde ich SQL Befehle generell groß schreiben.
     
  3. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Habe ich gerade ausprobiert. Dieses Statement führt dazu, dass alle Datensätze angezeigt werden - Unabhängig vom Wert im Formular!
    Code:
    $sqlab="select vor, nach from gruppe where nach like '%".$_POST["nn"]."%' order by nach";
     
  4. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Was gibt denn

    Code:
    $sqlab="SELECT vor, nach FROM gruppe WHERE nach LIKE '".$_POST["nn"]."%' ORDER BY nach";
    aus ?

    Jetzt müsste er alle ausgeben die mit dem Inhalt aus "nn" anfangen.
    Davor hat er alle ausgegeben in denen der Inhalt aus der Variable "nn" enthalten war.

    Wenn Du wissen möchtest ob ein bestimmter Nachnahme vorhanden ist, dann müsstest du fragen:

    Code:
     $sqlab="SELECT vor, nach FROM gruppe WHERE nach='wert'";
    Die ist eigentlich in Ordnung, hast du auch immer nach dem gleichen Namen gesucht ?
    Kann sein dass es vllt einmal geklappt hat, weil die Suche auch erfolgreich war.



    Mal davon abgesehen: Ich hoffe Dir ist bewusst, dass das Script aus sicherheitstechnischer Sicht ein Disaster ist ;)
     
    #4 drok, 04.02.08
    Zuletzt bearbeitet: 04.02.08
  5. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Code:
    $sqlab="SELECT vor, nach FROM gruppe WHERE nach like '" . $_POST["nn"] . "%'";
    Führt dazu, dass alle Namen der DB ausgegeben werden - also auch jene, die gar nicht mit der eingegeben Zeichenkette beginnen!
    Code:
    $sqlab="SELECT vor, nach FROM gruppe WHERE nach = '" . $_POST["nn"] . "'";
    Bei dieser Anfrage, also der Suche nach einem bestimmten Namen kommt die Meldung : keine Datensätze gefunden! Zufällige Fehler sind ausgeschlossen, da ich es schon so oft versucht habe.
    War mir ehrlich gesagt nicht bewusst! Ist mir als Anfänger, der nicht einmal die einfachsten SELECT-Anweisungen hinbekommt, aber momentan auch ziemlich egal. Da muss ich schon noch andere Prioritäten setzen!
     
  6. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Vielleicht auch den SQL-String auf doppelte Leerzeichen überprüfen. SQL ist da sehr empfindlich.
     
  7. fealXX

    fealXX Granny Smith

    Dabei seit:
    05.02.08
    Beiträge:
    15
    fang jetzt schon damit an!
    sichs später anzugewöhnen ist schwierig, glaub mir!

    in deinem script könnte ich ganz einfach es so generieren das der nachname immer gefunden wird
    beim nachnamen vllt nicht so kritisch, aber stell dir mal vor man macht das mit nem adminpasswort ;)

    deswegen:
    Code:
    ".addslashes($_POST['nn'])."
     
  8. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    Habe die SELECT-Abfragen bei einer anderen DB durchprobiert - alles hat auf Anhieb geklappt!
     
  9. TaTonka

    TaTonka Neuer Berner Rosenapfel

    Dabei seit:
    19.03.06
    Beiträge:
    1.961
    ist das thema jetzt erledigt? sonst würd ich noch sagen, lass die doppelten anführungszeichen und die verbindungspunkte bei der variable weg.
     
  10. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Falls du diesen Code meinst:

    Code:
     $sqlab="SELECT vor, nach FROM gruppe WHERE nach like '" . $_POST["nn"] . "%'";
    Dann würde doch die DB nach einem String "$_POST["nn"]" suchen, und nicht nach dem Variableninhalt.
     

Diese Seite empfehlen