MySQL Suchfunktion mittels PHP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Suchfunktion mittels PHP

    Ich habe folgendes Forumlar :

    PHP-Code:
    <html>
    <
    head>
    <
    title>Suchabfrage</title>
    </
    head>
    <
    body>
    <
    form action="db3.php" method="post">
    Suchkriterium waehlen :
    <
    br>
    <
    input type="radio" name="radiob" value="Nachname">Nachname
    <br>
    <
    input type="radio" name="radiob" value="Vorname">Vorname
    <br>
    <
    input type="radio" name="radiob" value="eMail">eMail
    <br>
    <
    br>
    Suchbegriff eingeben :
    <
    br>
    <
    input name="suche" size="60" maxlength="60">
    <
    br>
    <
    br>
    <
    input type="submit" value="OK">
    </
    form>
    <
    html
    ... welches dann auf das folgende PHP Script zugreift :

    PHP-Code:
    <?php

    include 'connect.php';

    // Die SQL Query
    $sql "SELECT * FROM `kundendaten` WHERE 1 AND `$radiob` LIKE '%$suche%' LIMIT 0 , 30 ";

    $result mysql_query($sql);

    // Anzeigen der Query

    printf    (
        
    "<table>
        <tr>
        <td bgcolor='#C0C0C0'>
        <b>Kundennummer</b>
        </td>
        <td bgcolor='#C0C0C0'>
        <b>Vorname</b>
        </td>
        <td bgcolor='#C0C0C0'>
        <b>Nachname</b>
        </td>
        <td bgcolor='#C0C0C0'>
        <b>eMail</b>
        </td>
        </tr>"
    );


    while (
    $row mysql_fetch_array($resultMYSQL_NUM))
        {
    printf     (
        
    "<tr>
        <td>
        %s
        </td>
        <td>
        %s
        </td>
        <td>
        %s
        </td>
        <td>
        %s
        </td>    
        </tr>
        "

        
    $row[0], $row[1], $row[2], $row[3]
        );  
        }

    printf    ("</table>");

    // Verbindung zur DB schliessen
    mysql_close($link);

    ?>
    Das funzt auch alles einwandfrei. Jetz wollte ich noch eine Funktion in das Suchformular einbauen, welches alle Datensaetze anzeigt, also folgenden Befehl ausfuehrt :

    SELECT * FROM `kundendaten`;

    ... und diese dann auch in dem Format ausgibt wie es bei den anderen Suchen auch angegeben wird.
    Ich dachte an einen einfachen Link, ala "Alle Daten zeigen" doch irgendwie finde ich da nicht den richtigen Ansatz fuer.

    Kann mir da einer einen Tipp geben ?
    Grüße
    Andreas

  • #2
    Die Loesung die ich momentan gefunden habe, ruft mittels einer Verlinkung einfach folgendes PHP Script auf :

    PHP-Code:
    <?php

    include 'connect.php';

    // Die SQL Query
    $sql "SELECT * FROM `kundendaten`";
    $result mysql_query($sql);

    // Anzeigen der Query

    printf    (
        
    "<table>
        <tr>
        <td bgcolor='#C0C0C0'>
        <b>Kundennummer</b>
        </td>
        <td bgcolor='#C0C0C0'>
        <b>Vorname</b>
        </td>
        <td bgcolor='#C0C0C0'>
        <b>Nachname</b>
        </td>
        <td bgcolor='#C0C0C0'>
        <b>eMail</b>
        </td>
        </tr>"
    );


    while (
    $row mysql_fetch_array($resultMYSQL_NUM))
        {
    printf     (
        
    "<tr>
        <td>
        %s
        </td>
        <td>
        %s
        </td>
        <td>
        %s
        </td>
        <td>
        %s
        </td>    
        </tr>
        "

        
    $row[0], $row[1], $row[2], $row[3]
        );  
        }

    printf    ("</table>");

    // Verbindung zur DB schliessen
    mysql_close($link);

    ?>
    Es funzt natuerlich, doch ich frage mich ob man das ganze nicht irgendwie eleganter loesen kann ?!
    Grüße
    Andreas

    Kommentar


    • #3
      hmm, ist ja schön seltsam. selektierte Datensätze kannst du ausgeben, und für alle ( = ohne bedingung) musst du nachfragen

      Hier noch ein paar Tipps:

      1.) Hoffe du hast dafür keine extra-datei angelegt
      2.) kennst du "Register globals"?
      3.) warum benutzt du printf()???
      4.) wozu mysql_close() am ende der Datei?
      5.) was passiert, wenn es keinen datensatz gibt?
      6.) wie siehts aus bei mehr als 30 suchergebnissen?
      7.) guck dir mal assoziative arrays und mysql_fetch_assoc() an.

      Ja, hab heute meinen guten Tag;D

      Kommentar


      • #4
        Original geschrieben von TobiaZ
        hmm, ist ja schön seltsam. selektierte Datensätze kannst du ausgeben, und für alle ( = ohne bedingung) musst du nachfragen
        Ja.... wie du im letzten Post gesehen hast, habe ich das Problem ja inzwischen geloest.

        1.) Hoffe du hast dafür keine extra-datei angelegt
        Doch.... ich habe keinen anderen Weg gefunden.

        2.) kennst du "Register globals"?
        Ja

        3.) warum benutzt du printf()???
        Macht es einen Unterschied ob ich print, echo oder printf benutze. Scheint alles zu funzen.

        4.) wozu mysql_close() am ende der Datei?
        Damit die pending connection wieder geschlossen wird.

        5.) was passiert, wenn es keinen datensatz gibt?
        Dann wird einfach garnix angezeigt !

        6.) wie siehts aus bei mehr als 30 suchergebnissen?
        Das Limit habe ich wieder entfernt. Das hat wirklich keinen Sinn gemacht.

        7.) guck dir mal assoziative arrays und mysql_fetch_assoc() an.
        OK... werd ich machen !

        Ja, hab heute meinen guten Tag;D
        Das ist OK... ich auch !
        Grüße
        Andreas

        Kommentar


        • #5
          1) hättest du nicht gebraucht. n paar if()s und ne denkstrucktur wären in ordnung.

          2) gut, dann solltest du auch so programmieren, dass deine Scripte bei ausgeschalteten Globals funktioniert.

          3) ja, macht es. guck mal im manual. finde printf ist a) umständlich und b) total missbraucht.

          4) das wird sie automatisch, wenn das script beendet wird.

          5) das ist schlecht für den User.

          6) und 150 Suchergebnisse auf einer Seite machen mehr sinn?

          7) gut, damit lässt sich einfacher arbeiten.

          Siehs bitte nicht als Anmache an (wies leider oft hier interpretiert wird). Sind lediglich Kritik und Tipps.

          Kommentar


          • #6
            Original geschrieben von TobiaZ
            1) hättest du nicht gebraucht. n paar if()s und ne denkstrucktur wären in ordnung.
            Ich kam beim ersten mal nicht drauf, wahrscheinlich irgendwie ein Brett vorm Kopf. Einfach mal so auf die schnelle, war ein zweites File einfacher, programmiertechnisch war es sicherlich net so doll. Das nächste mal werde ich es besser machen.

            2) gut, dann solltest du auch so programmieren, dass deine Scripte bei ausgeschalteten Globals funktioniert.
            Ganz erhlich.
            Keine Ahnung wie..... wenn du mir einen Anhaltspunkt gibst, wie ich es besser machen kann, wäre ich sehr froh drum.

            3) ja, macht es. guck mal im manual. finde printf ist a) umständlich und b) total missbraucht.
            Habe ich gemacht. So wie ich es verstanden habe, ist es speziell dafür da eine Wiedergabe von Funktionen zu gewährleisten, oder ?
            Hat es denn sonst einen Nachteil, den ich übersehen habe ? Mal abgesehen davon, dass es ja schlecher Programmierstil zu sein scheint.

            4) das wird sie automatisch, wenn das script beendet wird.
            Das ist wohl wahr. Ich habe es jetzt aber auch schon öfters beobachtet, das der User mit dem ich die DB Abfrage starte dann noch länger in der Prozessliste drin bleibt, ich hatte gehofft das ich es durch das mysql_close statement beenden kann.

            5) das ist schlecht für den User.
            Stimmt. Momentan denke ich darüber nach es evtl. seitenweise zu gliedern, bin da aber noch zu keiner Lösung gekommen wie ich es am besten realisiere... !

            6) und 150 Suchergebnisse auf einer Seite machen mehr sinn?
            s.o.


            Siehs bitte nicht als Anmache an (wies leider oft hier interpretiert wird). Sind lediglich Kritik und Tipps.
            Tue ich nicht, keine Sorge.
            Im Ernst.. ich bin dankbar für konstruktive Krititk.
            Grüße
            Andreas

            Kommentar


            • #7
              Im Ernst.. ich bin dankbar für konstruktive Krititk.
              Genau das solls sein. Und wenns dann noch als solche erkannt wird, freut es mich umso mehr!

              1) sicher ist (fast) jeder code noch verbesserungswürdig.

              2) Nenne hier nur kurz das Stichwort "predefined variables". mehr dazu steht im Manual. Wurde auch schon hier im Forum durchgekaut, weswegen ich das ungern nochmal erkläre.

              3) in erster linie ist es für die formatierung eines strings zuständig. da du nichts formatieren musst, sondern nur ein paar variablen in den string einbauen willst (wenn überhaupt), reicht echo hier vollkommen.

              5) *lol* wenn es keine datensätze gibt, willst du seitenweise gliedern (bin sicher du hast dich nur vertan). in dem fall hilft schon eine Abfrage
              PHP-Code:
              if(mysql_num_rows() < 1
              6) hier kommen wir zum punkt blättern . Auch dafür haben wir schon gute Hilfestellungen hier im Forum geleistet. vielleicht hilfts weiter.

              Kommentar


              • #8
                3) Wenn das so ist... Danke für den Hinweis... werde dann in Zukunft für sowas echo benutzen.

                5) In der Tat habe ich mich da vertan.
                Die Idee mit : if(mysql_num_rows() < 1) ist in der Tat klasse. Werde ich beherzigen.

                6) "Blättern" ist genau das was ich gesucht habe, werde dann mal im Forum stöbern gehen.

                Wie es aussieht haben wir ja jetzt alle Klarheiten beseitigt... !!
                Grüße
                Andreas

                Kommentar


                • #9
                  wunderbar!

                  Kommentar

                  Lädt...
                  X