Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL-Datenbank durchsuchen

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL-Datenbank durchsuchen

    Benötigte Funktionen:
    # mysql_connect() (In diesem Scriptbeispiel wird vorausgesetzt, dass die Verbindung zu MySQL bereits besteht)
    # explode()
    # array()
    # foreach()
    # implode()
    # mysql_query()
    # mysql_error()

    PHP-Code:
    $keywords 'in mysql db suchen'
    Die Suchbegriffe können auch von einem Formular kommen..

    PHP-Code:
    $association 'AND'
    Suchmodus AND oder OR, kann auch z.B. über RADIO-Inputfelder bestimmt werden

    PHP-Code:
    $keywords explode(" ",$keywords); 
    Die Suchbegriffe müssen getrennt werden, damit sie einzeln bearbeitet werden können.

    PHP-Code:
    $query = array();

    foreach(
    $keywords as $keyword) {
        
    $query[] = "(   `name_des_ersten_felds`     LIKE '%".$keyword."%'
                    OR  `name_des_zweiten_felds`    LIKE '%"
    .$keyword."%'
                    OR  `name_des_dritten_felds`    LIKE '%"
    .$keyword."%'
                    OR  `und_so_weiter`             LIKE '%"
    .$keyword."%')
                    "
    ;

    Jeder Suchbegriff muss umgewandelt werden, damit er in einen MySQL-Query eingesetzt werden kann, das %-Zeichen dient als Platzhalter für den möglichen übrigen Text im Datensatz.

    PHP-Code:
    $query implode("\n ".$association." ",$query); 
    Dann müssen die Suchbegriffe wieder zusammengefügt werden mit UND bzw. ODER-Verknüpfung

    PHP-Code:
    $sql "
        SELECT  *
        FROM    `name_der_tabelle`
        WHERE   "
    .$query."
    ;"

    $res mysql_query($sql);

    if (!
    $res) {
        
    /**
         * Diese Zeilen geben das SQL-Statement in recht lesbarer Form aus.
         */
        
    print '<pre>';
        print 
    $sql;
        print 
    '</pre>';
        
    /**
         * E_USER_ERROR führt zum Abbruch des Scripts.
         * E_USER_NOTICE und E_USER_WARNING, lassen das Script weiterlaufen
         */
        
    trigger_error('Datenbankanfrage schlug fehl: '.mysql_error(), E_USER_ERROR);
    } else {
        
    /**
         * Hier die Routinen zum Auslesen der Suchergebnisse einfügen.
         */

    ...und als letztes wird natürlich der MySQL-Query gesendet und die Daten können dann wie üblich ausgegeben werden mit z.B. mysql_fetch_object() oder mysql_fetch_array()...

    Hier nochmal das komplette Script:
    PHP-Code:
    $keywords 'in mysql db suchen';

    $association 'AND';

    $keywords explode(" ",$keywords);

    $query = array();

    foreach(
    $keywords as $keyword) {
        
    $query[] = "(   `name_des_ersten_felds`     LIKE '%".$keyword."%'
                    OR  `name_des_zweiten_felds`    LIKE '%"
    .$keyword."%'
                    OR  `name_des_dritten_felds`    LIKE '%"
    .$keyword."%'
                    OR  `und_so_weiter`             LIKE '%"
    .$keyword."%')
                    "
    ;
    }

    $query implode("\n ".$association." ",$query);

    $sql "
        SELECT  *
        FROM    `name_der_tabelle`
        WHERE   "
    .$query."
    ;"

    $res mysql_query($sql);

    if (!
    $res) {
        
    /**
         * Diese Zeilen geben das SQL-Statement in recht lesbarer Form aus.
         */
        
    print '<pre>';
        print 
    $sql;
        print 
    '</pre>';
        
    /**
         * E_USER_ERROR führt zum Abbruch des Scripts.
         * E_USER_NOTICE und E_USER_WARNING, lassen das Script weiterlaufen
         */
        
    trigger_error('Datenbankanfrage schlug fehl: '.mysql_error(), E_USER_ERROR);
    } else {
        
    /**
         * Hier die Routinen zum Auslesen der Suchergebnisse einfügen.
         */


  • #2
    Schönes Tutorial! Allerdings habe ich das Problem, dass wenn ich das Ergebnis mit mysql_fetch_assoc($res) und dann mit print_r ausgebe immernur EIN Ergebnis im Array steht, der also immer Nur die ERSTE Übereinstimmung nimmt -.-

    Kommentar


    • #3
      einfach ne while schleife...


      PHP-Code:
      while($row=mysql_fetch_assoc($res)){
        
      // do whatever


      mfg

      Kommentar


      • #4
        Mhm, ich habs mal probiert.. .Aber es funktioniert nicht!
        Mein code sieht so aus:

        PHP-Code:
        <?php
        /*
         * Created on 15.10.2006
         *
         * To change the template for this generated file go to
         * Window - Preferences - PHPeclipse - PHP - Code Templates
         */
        include ("includes.php");

        $keywords $_POST['keywords'];

        $association $_POST['association'];

        $keywords explode(" ",$keywords);

        $query = array();

        $kategorie $_POST['kategorie'];
        foreach(
        $keywords as $keyword) {
            
        $query[] = "(   `Titel`     LIKE '%".$keyword."%'
                        OR  `Beschreibung`    LIKE '%"
        .$keyword."%')
                        "
        ;
        }

        $query implode("\n ".$association." ",$query);

        $sql "
            SELECT  Titel
            FROM    tutorials
            WHERE   "
        .$query."  AND Kategorie = '".$kategorie."'
        ;"
        ;
        $res mysql_query($sql); 
        while (
        $row=mysql_fetch_assoc($res)){
        $row .= mysql_query($sql);
        }

        if (!
        $res) {
            
        /**
             * Diese Zeilen geben das SQL-Statement in recht lesbarer Form aus.
             */
            
        print '<pre>';
            print 
        $sql;
            print 
        '</pre>';
            
        /**
             * E_USER_ERROR führt zum Abbruch des Scripts.
             * E_USER_NOTICE und E_USER_WARNING, lassen das Script weiterlaufen
             */
            
        trigger_error('Datenbankanfrage schlug fehl: '.mysql_error(), E_USER_ERROR);
        } else {
            
        /**
             * Hier die Routinen zum Auslesen der Suchergebnisse einfügen.
             */
             
             
        print_r($row);
        }


        ?>
        ...

        Kommentar


        • #5
          PHP-Code:
          while ($row=mysql_fetch_assoc($res)){
          $row .= mysql_query($sql);

          Änder das mal so ab
          PHP-Code:
          while ($row=mysql_fetch_assoc($res)){
          $out .= mysql_query($sql);

          und gib dann mit print_r($out) aus

          Dein fehler ist das du in der while $row immer wieder überschreibst.

          Kommentar


          • #6
            Zitat von shocky
            PHP-Code:
            while ($row=mysql_fetch_assoc($res)){
            $row .= mysql_query($sql);

            Änder das mal so ab
            PHP-Code:
            while ($row=mysql_fetch_assoc($res)){
            $out .= mysql_query($sql);

            und gib dann mit print_r($out) aus

            Dein fehler ist das du in der while $row immer wieder überschreibst.
            geht genausowenig...gibt nur eine leere ausgabe

            Kommentar


            • #7
              Ich habe nirgends die Funktion mysql_real_escape_string gefunden? Diese Funktion sollte schon verwendet werden, um MySQL-Injections vorzubeugen..

              Kommentar


              • #8
                Wenn Göke mal da wäre und grünes Licht gibt miste ich hier gerne mal aus.

                Kommentar


                • #9
                  Das bedeutet?

                  Kommentar


                  • #10

                    was passiert damit:
                    PHP-Code:
                    /*[...]*/

                    $out = array();

                    while (
                    $row=mysql_fetch_assoc($res))
                    {
                      
                    $out[]= mysql_query($sql);
                    }

                    print_r($out); 
                    [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                    — The best things in life aren't things[/FONT]

                    Kommentar


                    • #11
                      Zitat von phpdummi

                      was passiert damit:
                      PHP-Code:
                      /*[...]*/

                      $out = array();

                      while (
                      $row=mysql_fetch_assoc($res))
                      {
                        
                      $out[]= mysql_query($sql);
                      }

                      print_r($out); 
                      Das erzeugt folgende Ausgabe:

                      Code:
                      Array ( [0] => Resource id #11 [1] => Resource id #12 ) Array ( [0] => Resource id #11 [1] => Resource id #12 ) Array
                      Schonmal nicht schlecht, oder? Nur wie krieg ich da jetzt vernünftige Ergebnisse rein?

                      Und kann mir einer sagen was es mit diesem "$ROW=mysql_fetch_assoc..." aufsich hat?

                      mfg[/php]

                      Kommentar


                      • #12
                        Zitat von Stefajo
                        Das bedeutet?
                        Dass ich das Forum sowieso lieber in Script-Archiv/Tutorial umbenennen würde und alte Beiträge, die nicht mehr up2date sind löschen würde.

                        Aber bevor ich das tue wart ich auf das OK vom Admin und das ist Göke.
                        Hab aber kein Plan wo der momentan steckt

                        Kommentar


                        • #13
                          mysql_query($sql);
                          ist ja schonmal komplett falsch (ist mir gar ich aufgefallen ^^)
                          statdessen:
                          PHP-Code:
                          $out = array();

                          while (
                          $row=mysql_fetch_assoc($res))
                          {
                            
                          $out[]= $row["Titel"];
                          }

                          print_r($out); 
                          geht das?
                          [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                          — The best things in life aren't things[/FONT]

                          Kommentar


                          • #14
                            Zitat von phpdummi
                            mysql_query($sql);
                            ist ja schonmal komplett falsch (ist mir gar ich aufgefallen ^^)
                            statdessen:
                            PHP-Code:
                            $out = array();

                            while (
                            $row=mysql_fetch_assoc($res))
                            {
                              
                            $out[]= $row["Titel"];
                            }

                            print_r($out); 
                            geht das?
                            Ja, das klappt! VIelen DAnk!

                            Kommentar


                            • #15
                              kei problem evt einfach mal googeln
                              dann bekommsz du z.b sowas:
                              http://de.php.net/mysql_fetch_assoc
                              [FONT="Book Antiqua"][I]"Nobody is as smart as everybody" - Kevin Kelly[/I]
                              — The best things in life aren't things[/FONT]

                              Kommentar

                              Lädt...
                              X