Judith: MYSQL Select Abfrage

Hallo!

Seit gestern, versuche ich ein Suchformular zu bauen, wo ich einen Wert eingebe und dann ein Feld im meiner Mysql Datenbank durchsucht werden soll. Ich habe eine Listenfeld = Spalte in der Datenbank und ein Textfeld = Wert der in der Spalte, der teilweise vorhanden ist. Das Formular habe ich. Bei form action wird auf die seite wo der SQL string eingebaut ist verlinkt. Mein SQL String in der Ergebnisseite:

$Suchf = $HTTP_POST_VARS["Suchfeld"];
$Suchw = $HTTP_POST_VARS["Suchwort"];

$query = "SELECT * FROM TYPSCH WHERE $Suchf LIKE '%$Suchw%'";

$result = mysql_query($query);

Das funktioniert aber nicht. Er sucht ewige Zeiten min. 3 Minuten um dann kein Ergebniss zu haben. Ich weiss aber, dass es diesen Wert in der DB gibt. Ich muss dazu sagen das ca. 80000 Datensätze in der DB vorhanden sind. Und es 200 Spalten gibt. Sollte aber kein Problem sein, oder?

Hier die Verarbeitung vom Ergebniss:

<H1>Suchergebnis</H1>
<? $num = mysql_Num_Rows($result);

if ( $num != 0 ):
?>
<TABLE BORDER>
<TR>
           <TH>ZFA</TH>
           <TH>TYPSCHNR</TH>
           <TH>VERSION</TH>
           <TH>BEZEICHNUNG</TH>
           <TH>RECHNUNGSDATUM</TH>
</TR>
<? $i=0;
       while ($i<$num):

echo "<TR><TD>"  . mysql_result($result,$i,"Feld19")      . "</TD>";
          echo "<TD>"      . mysql_result($result,$i,"Feld18")       . "</TD>";
          echo "<TD>"      . mysql_result($result,$i,"Feld20")       . "</TD>";
          echo "<TD>"      . mysql_result($result,$i,"Feld9")   . "</TD>";
          echo "<TD>"      . mysql_result($result,$i,"Feld166")   . "</TD></TR>";

$i++;
    endwhile;
?>
</TABLE><P>
<? else: ?> Es wurden keine auf die Abfrage passenden Datens&auml;tze gefunden.

<? endif; ?>

Wo mache ich einen Fehler? Mit echo habe ich mir angesehen ob die Werte auch vom Suchformular übertragen werden. Das funktioniert!

Danke für jeden Hinweis.

LG

Judith

  1. Hallo Judith,

    obwohl das jetzt in keiner Weise deine Frage beantwortet, reicht es vielleicht wenigstens, um dir ein Lächeln zu entlocken. ;)

    Denn eigentlich bin ich nur durch den Namen auf dein Posting aufmerksam geworden. Der Vorname ist relativ selten, und "Judith" war auch der Vorname meiner ersten Freundin in der Teenagerzeit.
    Auch wenn du bestimmt nichts mit ihr zu tun hast (sie lebt irgendwo hier im Schwäbischen, und du vermutlich in Österreich, wenn ich die gmx.at-Adresse so sehe), so hast du mich allein durch das Auftauchen deines Namens doch an sie erinnert. Und das sind ganz bestimmt keine unangenehmen Erinnerungen... *seufz*

    Ein glückliches neues Jahr noch,

    Martin

  2. Hallo Judith,

    $Suchf = $HTTP_POST_VARS["Suchfeld"];
    $Suchw = $HTTP_POST_VARS["Suchwort"];

    warum verwendest du nicht das Array »$_POST«? $HTTP_*_VARS ist veraltet.

    $query = "SELECT * FROM TYPSCH WHERE $Suchf LIKE '%$Suchw%'";

    du darfst *nie* und unter keinen Umständen Daten die vom User kommen einfach so in deinen Query einbauen - du musst _immer_ vorher prüfen ob die Daten sinnvoll sind (in $Suchf sollte ein Spaltenname drinstehen) und evtl. vorhandene Sonderzeichen mit mysql_escape_string() maskieren.

    $result = mysql_query($query);

    was sagt mysql_error()? Hast du dir mal deinen Query ausgeben lassen ob das drinsteht, was du vermutest?

    Und es 200 Spalten gibt.

    und du brauchst wirklich alles Spalten im Falle eines Suchtreffers? Lies mal http://www.php-faq.de/q/q-sql-select.html

    <?

    von dieser Schreibweise würde ich eher abraten. Falls dein Code mal unter einem System laufen musse, bei dem short_open_tags auf off steht, funktioniert nichts mehr - deswegen sollte man imho <?php verwenden.

    echo "<TR><TD>"  . mysql_result($result,$i,"Feld19")      . "</TD>";

    wenn du mehrere Spalten abfragen willst, solltest du die mysql_fetch_*-Funktionen verwenden.

    echo "<TD>"      . mysql_result($result,$i,"Feld18")       . "</TD>";
              echo "<TD>"      . mysql_result($result,$i,"Feld20")       . "</TD>";

    hälst du Feldxyz für eine besonders sinnvolle Spaltenbezeichnung? Die Daten sehen nicht besonders gut normalisiert aus ...

    Grüße aus Nürnberg
    Tobias