Suchfunktion mit PHP und SQL

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

  • Suchfunktion mit PHP und SQL

    Hallo erstmal :-)

    ich möchte für meine Website eine Suchfunktion einbauen, das ganze soll ein eingabe
    feld haben und einen suchbutton,
    dann soll sich das ganze auf einer neuen Site aufbauen um dann die ergebnisse
    sortiert auspucken.

    Ich habe zunächst im Internet etwas reserchiert und habe folgendes Scrypt
    gefunden:

    PHP-Code:
    Hallo,
    das Ziel dieses Tutorial ist, dass es jedem möglich sein sollte eine Suchfunktion
     für seine Datenbank zu programmieren.

    Wichtig: Dieses Skript für die Suchfunktion beinhaltet nur das aller nötigste! 
    Sprich es soll nur zeigen wie eine Suchfunkion aufgebaut sein kann. Natürlich 
    kann man soclhe "Extras" noch ergänzen.


    Zum Skript: Ich poste einfach mal das ganze Skript. Folgend werden dann die 
    verschiedenen Punkte genauer erklärt.
    php:


    <? 

    //Formularfeld 
    echo " <form name=form1 method=post  action='" .$_SERVER['PHP_SELF'] ."'>\n"; 
    echo "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"; 
    echo "<input class= formular type=submit name=Submit value='Senden'>\n"; 
    echo "<input class= formular type=reset name=Submit value=Reset>\n</form>"; 

    //Verbindung herstellen
    include 'db_connect.inc';
    $sqldatabase = mysql_pconnect("$host","$user","$pwd") or die('<b>#'.mysql_errno().':</b> '.mysql_error());
                    mysql_select_db($dbname, $sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error());

    //Suche starten, Ergebnise ausgeben
    $daten = mysql_query('SELECT * FROM `'.$tblname.'` WHERE `Artist`=\''.$_POST['suche'].'\'', $sqldatabase); 
    while($row=mysql_fetch_array($daten)){
    echo $row['Artist'];


    ?>



    Gut, also zur genaueren Erklärung des Skripts:

    1.Eingaben per Formularfeld
    php:


    <?php //Formularfeld 
    echo " <form name=form1 method=post  action='" .$_SERVER['PHP_SELF'] ."'>\n"
    echo 
    "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"
    echo 
    "<input class= formular type=submit name=Submit value='Senden'>\n"
    echo 
    "<input class= formular type=reset name=Submit value=Reset>\n</form>"?>



    Dieser Code beinhaltet das Formularfeld. Die Angaben aus dem Formular wird 
    danach an sich selber geschickt. (action='" .$_SERVER['PHP_SELF'] ."') Das 
    Textfeld bekommt den Wert: $_POST (value='".$_POST['suche']."')




    2. Verbindung herstellen
    php:


    <?php include 'db_connect.inc';
    $sqldatabase mysql_pconnect("$host","$user","$pwd") or die('<b>#'.mysql_errno().':</b> '.mysql_error());
                    
    mysql_select_db($dbname$sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); ?>


    In diesem Abschnitt wird Verbindung mit der Datenbank aufgenommen. 
    Ich benütze dafür eine externe Datei! Man muss einfach $host, $user, $pwd, $tblname, $dbname 
    durch seine Daten ersetzen.



    3. Suche starten und Ergebnisse anzeigen:
    php:


    <?php $daten mysql_query('SELECT * FROM `'.$tblname.'` WHERE `Artist`=\''.$_POST['suche'].'\''$sqldatabase); 
    while(
    $row=mysql_fetch_array($daten)){
    echo 
    $row['Artist'];
    ?>


    so nun zum wichtigsten Punkt. Hier wird wie es der Titel schon sagt, die Eingaben verwertet. 
    Er checkt ab, ob der Suchbegriff mit einem Wert der Spalte identisch ist. (WHERE `Artist`=\''.$_POST['suche'].) Also muss man
     "Artist" durch einen vorhandenen Spaltennamen ersetzen. Danach wird mit der while schleife der Suchbegriff weiterverarbeitet 
    bis zum echo $row['Artist'];!
    Hier werden die Ergebniss per echo ausgegen!
    Den Scrypt bin ich dann schritt für schritt durchgegangen nur leider klappt es nicht.

    Meine Daten:

    $hostname_verbindung = "localhost";
    $database_verbindung = "phost136983";
    $username_verbindung = "phost136983";
    $password_verbindung = "******";

    Meine Tabelle heißt: tblspieledatenbank und meine Spalte str_spiel_name

    Es soll mit hilfe von Stichwörten nach Spielen gesucht werden.

    Ich habe dann 2 Datein erstellt, erstmal das Eingabe Formular:

    PHP-Code:
    <?php //Formularfeld 
    echo " <form name=form1 method=post  action='" .$_SERVER['PHP_SELF'] ."'>\n"
    echo 
    "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"
    echo 
    "<input class= formular type=submit name=Submit value='Senden'>\n"
    echo 
    "<input class= formular type=reset name=Submit value=Reset>\n</form>"?>

    <?php require_once('../test/connect.html'); ?>
    <?php



    <?php $daten mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\''$sqldatabase); 
    while(
    $row=mysql_fetch_array($daten)){
    echo 
    $row['Artist'];
    ?>
    und connect.php :
    PHP-Code:
    <?php include 'db_connect.inc';
    $sqldatabase mysql_pconnect("localhost","phost136983","*****") or die('<b>#'.mysql_errno().':</b> '.mysql_error());
                    
    mysql_select_db(phost136983tblspieledatenbank) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); ?>
    Ich bekomme folgenden Fehler:

    Parse error: parse error in C:\xampp\htdocs\gameboxx\test\formular.php on line 24


    Und ich verstehe auch nicht, was $sqldatabase zu bedeuten hat, ich bin jetzt mal davon
    ausgegangen, dass es meine Taballe tblspieledatenbank ist O.o, glaube aber das es falsch ist.

    für Hilfe bin ich sehr dankbar :-)

  • #2
    In Zeile 24 oder davor, hast du einen Tippfehler drin.

    Der Fehler hat nix mit der DB zu tun.
    Wir werden alle sterben

    Kommentar


    • #3
      Hallo Ernie,

      Zitat von erniedd Beitrag anzeigen
      Ich bekomme folgenden Fehler:

      Parse error: parse error in C:\xampp\htdocs\gameboxx\test\formular.php on line 24
      Hättest du nicht vielleicht Lust, diese Datei (formular.php) mal zu posten und darin die Zeile 24 kenntlich zu machen, z. B. durch Einfügen von "// Line 24" (ohne ") am Ende der Zeile?

      Zitat von erniedd Beitrag anzeigen
      Und ich verstehe auch nicht, was $sqldatabase zu bedeuten hat, ich bin jetzt mal davon
      ausgegangen, dass es meine Taballe tblspieledatenbank ist O.o, glaube aber das es falsch ist.

      für Hilfe bin ich sehr dankbar :-)
      Die Dinger, die mit $ beginnen, nennt man in PHP Variablen, die Assoziation zu Variablen aus Mathe ist durchaus angebracht. In dieser speziellen Variablen befindet sich ein Wert, der die Verbindung zu deiner Datenbank repräsentiert. Deine Annahme, dass sich dahinter deine Taballe tblspieledatenbank verbirgt, ist also falsch.

      Beispielcode und Funktionen zum Arbeiten mit MySQL-Datenbanken findest du unter PHP: PDO - Manual (objektorientierter, allgemeiner Ansatz), unter PHP: Mysqli - Manual (verbesserter, objektorientierter MySQL-Zugriff) und schließlich unter PHP: MySQL - Manual (traditioneller, funktionsbasierter MySQL-Zugriff)

      Gruß,

      Anja
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Achso, ich seh grad, in deinem ersten Code-Block geht in Zeile 7 ein PHP-Block auf, der nicht wieder geschlossen wird, dann kommen Leerzeilen und dann geht wieder ein Block auf. Das darf nicht sein, PHP-Blöcke lassen sich nicht verschachteln, also: Zeile 7 löschen, wenn dort sowieso nichts mehr kommt.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          so ersteinmal die zeile

          24
          PHP-Code:
          <?php $daten mysql_query('SELECT * FROM `'.tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\''tblspieledatenbank);
          Zuletzt geändert von erniedd; 27.07.2009, 00:55.

          Kommentar


          • #6
            Hinten bei tblspieledatenbnak fehlt der Dollar davor.

            Edit: achso und vorne ja auch
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Wenn ich nochmal genauer auf deine bisher geposteten Beispiele sehe, fällt mir auf, dass da noch mehr gravierende Fehler drin sind, die mich zu der Vermutung führen, dass du noch nie mit PHP zu tun hattest.

              In diesem Falle solltest du auf PHP: Hypertext Preprocessor mit der Einführung beginnen (wenn du genug Zeit hast) oder in diesem Forum dein Glück versuchen: Jobs und Projekte - PHP script resource

              Denn ohne zumindest Grundlagen von PHP zu haben, glaube ich nicht ganz daran, dass du in den nächsten 3 Tagen eine Suchfunktion in deiner Homepage anbieten kannst.

              Gruß,

              Anja
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Mit der Suchfunktion wirst du auch keine große Freude haben, da nur Treffer gemeldet werden, wenn der Suchbegriff exakt einem Feldinhalt gleicht.

                Beschäftige dich mal mit der Mysql Volltextsuche.

                Wie man das macht steht hier:

                MySQL :: MySQL 5.1 Referenzhandbuch :: 12.7 MySQL-Volltextsuche

                Kommentar


                • #9
                  Der Code ist anfällig für SQL-Injections. Jeder Anfänger könnte die Seite hacken.

                  Kommentar


                  • #10
                    Hey, erstma sorry das ich mich nicht solange gemeldet habe, und danke für die vielen antworten :-), ich hab es überarbeitet:

                    PHP-Code:

                    <?php ;

                    $sqldatabase mysql_pconnect("localhost","phost136983","******") or die('<b>#'.mysql_errno().':</b> '.mysql_error());
                                    
                    mysql_select_db(phost136983$sqldatabase) or die('<b>#'.mysql_errno().':</b> '.mysql_error()); ?>



                    <?php //Formularfeld 
                    echo " <form name=form1 method=post  action='" .$_SERVER['PHP_SELF'] ."'>\n"
                    echo 
                    "<input class= formular name=suche type=text maxlenght=255 size=20 value='".$_POST['suche']."'>\n"
                    echo 
                    "<input class= formular type=submit name=Submit value='Senden'>\n"
                    echo 
                    "<input class= formular type=reset name=Submit value=Reset>\n</form>"?>






                    <?php $daten mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\''$sqldatabase); 
                    while(
                    $row=mysql_fetch_array($daten)){
                    echo 
                    $row['str_spiel_name'];
                    ?>

                    Ich bekomme folgenden Fehler:

                    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\gameboxx\test\formular.php on line 19

                    Die Reihe 19 ist diese hier(die dritt letzte) :
                    PHP-Code:
                    while($row=mysql_fetch_array($daten)){ 
                    wäre sehr dankbar wenn ihr mir au da weiterhelfen könntet
                    Zuletzt geändert von erniedd; 29.07.2009, 20:07.

                    Kommentar


                    • #11
                      Zitat von erniedd Beitrag anzeigen
                      ........ich hab es überarbeitet:
                      ................
                      wäre sehr dankbar wenn ihr mir au da weiterhelfen könntet
                      Wieso sehe ich kein mysql_error() an der richtigen Stelle ? Du kennst es doch schon...
                      Weiterhin anfällig gegen:
                      1. SQL Injection
                      2. XSS

                      P Connect ist bedenklich.
                      Solange du nicht weißt, was du tust: Lass das P weg.
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        da is doch nen mysql error ganz oben, sql injection hab ich mich noch nit so richtig drum gekümmert, weis zwar ja jetzt was es damit auf sich jetzt hat, aber muss mir das nochma in ruhe vertiefen

                        oder meintest du das so ?

                        PHP-Code:
                        <?php $daten mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\''$sqldatabase); 
                        while(
                        $row=mysql_fetch_array($daten)){
                        echo 
                        mysql_errno() . ": " mysql_error() . "\n";
                        echo 
                        $row['str_spiel_name'];
                        ?>
                        Zuletzt geändert von erniedd; 29.07.2009, 19:39.

                        Kommentar


                        • #13
                          Zitat von erniedd Beitrag anzeigen
                          da is doch nen mysql error ganz oben, sql injection hab ich mich noch nit so richtig drum gekümmert, weis zwar ja jetzt was es damit auf sich jetzt hat, aber muss mir das nochma in ruhe vertiefen

                          oder meintest du das so ?

                          PHP-Code:
                          <?php $daten mysql_query('SELECT * FROM `'.$tblspieledatenbank.'` WHERE `str_spiel_name`=\''.$_POST['suche'].'\''$sqldatabase); 
                          while(
                          $row=mysql_fetch_array($daten)){
                          echo 
                          mysql_errno() . ": " mysql_error() . "\n";
                          echo 
                          $row['str_spiel_name'];
                          ?>

                          nein so
                          PHP-Code:
                          $daten mysql_query('SELECT * FROM `'.$tblspieledatenbank.'`
                          WHERE `str_spiel_name`=\''
                          .$_POST['suche'].'\''$sqldatabase) or die(mysql_error()); 

                          Kommentar


                          • #14
                            Wo tritt der Fehler auf?
                            Hier: while($row=mysql_fetch_array($daten))

                            Warum?
                            Weil in $daten nicht das erwartete drin steht.

                            Warum steht in $daten nicht das erwartete din?
                            Weil die vorhergehende Abfrage fehlschlägt.

                            Warum schlägt die vorhergehende Abfrage fehl?
                            KA!
                            Du hast da kein mysql_error() eingebaut
                            Wir werden alle sterben

                            Kommentar


                            • #15
                              ahhh ok

                              er hat mir angezeigt das der table name nit korrekt ist, nun hab ich das $ von tblspieledatenbnk weggemacht und dann gings, allerdings ist die suche irgendwie dumm

                              möchte ich beispiels weiße nach duke nukem 3d suchen, muss ich den kompletten namen eingeben, statt einfach nur duke oder nukem oder 3d

                              Kommentar

                              Lädt...
                              X