Wie geht ein Suchergebnisfilter ?

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

  • Wie geht ein Suchergebnisfilter ?

    Hallo,

    weiss jemand wie man nach einer Abfrage das Suchergebnis nachträglich mit weiteren Kriterien eingrenzt ? Die Kriterien werden dabei als Link ausgegeben.

    Ich suche da schon seit Stunden bei Google und finde dazu gar nichts.

  • #2
    Hallo,

    ohne weitere Infos dazu, was du genau meinst und wie dein (relevanter) Code bisher aussieht, fürchte ich, dass man dir nicht helfen kann.

    Gruß,

    Amica
    [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


    • #3
      Ich pflichte Amica natürlich bei.

      Generell aber ist es so, dass man den Suchfiilter definiert, bevor man die Suche (in der DB) durchführt. Dadurch bist du wesentlich performanter und ersparst dir überflüssige Datenmengen.

      Kommentar


      • #4
        Das nennt sich faceted search.

        Faceted Search with Solr | Enterprise Search support for Apache Lucene and Solr by Lucid Imagination

        Kommentar


        • #5
          PHP-Code:
          <?php

          // verbindung zur DB
          include('../Connections/Test.php');
          mysql_select_db($database_Test$Test);
          /* -------------------------- */
          $suche $_GET['suche'];
          $plz $_GET['post'];
          $umkreis $_GET['umkreis'];

          if (
          $_GET['post'] == "" and $_GET['umkreis'] == "")
          $plz '01067' and $umkreis 9000;} 
          if (
          $_GET['post'] == "" and $_GET['umkreis'] != "")
          {echo 
          "Wählen Sie einen Ort";}
          if (
          $_GET['umkreis'] == "" and $_GET['post'] != "")
          {echo 
          "Wählen Sie einen Umkreis";}
          else {

          /* -------------------------- */
          if (isset($_GET['submit'])) {
          $sql_rad mysql_query("SELECT geo_l, geo_b, ort FROM `cix_plz` WHERE `plz` = '$plz' OR `ort` = '$plz'");
          $erg_rad mysql_fetch_object($sql_rad);

          // Umrechnung von GRAD IN RAD

          $rad_l $erg_rad->geo_l 180 M_PI;
          $rad_b $erg_rad->geo_b 180 M_PI;

          // jetzt erfolgt die eigentliche Abfrage

          $query "SELECT  ort, plz, (
              6367.41 * SQRT(2*(1-cos(RADIANS(geo_b)) * 
              cos("
          .$rad_b.") * (sin(RADIANS(geo_l)) *
              sin("
          .$rad_l.") + cos(RADIANS(geo_l)) * 
              cos("
          .$rad_l.")) - sin(RADIANS(geo_b)) * sin(".$rad_b.")))) AS Distance 
              FROM cix_plz WHERE 
              6367.41 * SQRT(2*(1-cos(RADIANS(geo_b)) * 
              cos("
          .$rad_b.") * (sin(RADIANS(geo_l)) * 
              sin("
          .$rad_l.") + cos(RADIANS(geo_l)) * 
              cos("
          .$rad_l.")) - sin(RADIANS(geo_b)) * sin(".$rad_b."))) <= ".$umkreis."
              
              AND `frei` LIKE ('
          $suche')";

          // die Ausgabe (vereinfacht)
          $sql mysql_query($query);
          while( 
          $erg mysql_fetch_object($sql) ) {

              echo 
          '<pre>'print_r($ergtrue), '</pre>';

          $num_rows mysql_num_rows($sql);

          }}}
          echo 
          $num_rows;

          ?>
          Dies ist eine Umkreissuche, zusätzlich wird noch ein anderes Kriterium abgefragt. "$suche"
          Jetzt soll man nach Ausgabe des Ergebnisses filtern können, sodass sich das Ergebnis auf das reduziert.
          Ein Beispiel: Ausgabe aller Orte in Deutschland, dann Filter: Nur Orte in NRW, dann Filter: nur Orte im Regierungsbezirk Münster.

          In der Tabelle stehen dann dafür die entsprechenden Spalten.

          An sich funktioniert die Abfrage mit zusätzlichen Kriterien , ich frage mich nur wo ich die Abfrage speichere, damit man noch nachträglich filtern kann.

          Speichert man den query vielleicht in einem "hidden field" ?

          Kommentar


          • #6
            ich würde nicht die ganze Query speichern, sondern nur die Filteroptionen.

            Wo du sie "zwischenspeicherst" ist dabei eigentlich egal. Du kannst sie mittels hidden filed übergeben, über die URL oder auch in einer Session oder einem Cookie. Hast also die volle Bandbreite: POST/GET/SESSION/COOKIE.

            Session ist am unauffälligsten, setzt aber eine aktive session voraus. Am einfachsten zu implementieren ist vermutlich die POST-Variante. Wenn du das Suchergebnis auf mehrere Seiten aufteilst, kommst du mit Post nicht ohne weiteres klar, weil die normalen Links dann nicht mehr funktionieren. Hier wäre dann GET ne schöne alternative, aber nur wenns nicht zu viele Parameter sind. Und Cookies haben natürlich immer das Problem, dass sie vom User akzeptiert/geduldet werden müssen.

            Halt alles seine Vor und Nachteile, such dir das aus, was für deine Situation am besten passt.

            Kommentar


            • #7
              Danke Tobiaz,

              mein Grundgedanke war da wohl nicht so falsch.
              Aber mich irritiert jetzt deine Aussage zum Query.

              Die Abfrage die ausgeführt wird muss doch irgendwo gespeichert werden.
              Also die komplette Abfrage, nicht nur der Filterwert.

              Sonnst gibt es ja nichts zum abfragen.
              Der Filter-Link muss doch auch die vorher ausgeführte Abfrage kennen, und dann die Abfrage erneut ausführen und dabei dann den Filterwert anhängen.

              Oder ?

              Kommentar


              • #8
                Hallo,

                das Grundprinzip ist ja, dass dein Script genau so viele Informationen bekommt, wie es zum Erzeugen der Abfrage benötigt. Wenn die grundlegende Abfrage immer dieselbe ist, brauchst du nur die Filterbedingungen zu übergeben. Wenn es ganz verschiedene Abfragen sein können, kannst du die auch irgendwie durchnummerieren und die Nummer übergeben. Eben so viel, wie du PHP-seitig brauchst, um damit was anfangen zu können.

                Gruß,

                Amica
                [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


                • #9
                  Ja die Abfragen wärn immer unterschiedlich, da man ja immer unterschiedliche Postleitzahlen oder Orte eingeben kann. Wäre es unsicher die ganze Query in einem hidden field zu speichern ?

                  Kommentar


                  • #10
                    Zitat von veil Beitrag anzeigen
                    Wäre es unsicher die ganze Query in einem hidden field zu speichern ?
                    Das wäre sogar tödlich. Hidden-Felder sind manipulierbar. Anhand der Originalabfrage erkennt ein Angreifer Details über deine DB-Struktur und kann dann noch gezieltere Angriffe durchführen, wenn er z. B. aus "select * from foo" einfach "drop table foo" macht.
                    [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


                    • #11
                      Aber das kann der Angreifer doch auch aus der Adresszeile des Browsers herauslesen, die ist ja öffentlich sichtbar.

                      Ich wollte die zeile die im Browser steht dann als LInk benutzen, und dann mit einer variable ein filterwert hinzufügen.

                      Dann wird nicht der ganze Query im hidden field gespeichert sondern nur, eine variable.
                      Ist besser so oder ?

                      Kommentar


                      • #12
                        vielleicht so ?!?

                        eine variable im hiddenfeld is ok. denke ich.

                        vielleicht alles geschriebene überdenken, das eigene überarbeiten und ab die post.

                        ich würde das vielleicht so machen:

                        SELECT ort FROM table WHERE ort LIKE '$anfang%' // alle orte die mit $anfang beginnen, wobei das ein buchstabe oder auch eine buchstabenfolge sein kann.

                        dann zusatz filter anbieten z.b. per select feld die 16 bundesländer oder was du so brauchst.
                        an zusätzlichen filtern.

                        dann übergibst du $anfang , $dundesland und meinetwegen $landkreis

                        und du mußt dann deine neue query zusammenbauen, abhängig von den zusatzparametern.

                        z.b.

                        SELECT ort FROM table WHERE ort LIKE '$anfang%' AND bundesland=$bundesland
                        fotos :

                        http://www.flickr.com/photos/rassloff/collections/

                        Kommentar


                        • #13
                          Zitat von veil Beitrag anzeigen
                          Ja die Abfragen wärn immer unterschiedlich, da man ja immer unterschiedliche Postleitzahlen oder Orte eingeben kann.
                          Der Kern der Abfrage bleibt ja identisch. Es unterscheiden sich doch nur die Filter-Kriterien (WHERE) also reicht es auch, wenn du nur diese übergibst.

                          Kommentar


                          • #14
                            Danke,

                            ich werde das dann weiter so umsetzten.
                            Wenn ich den nächsten Tagen Schwierigkeiten habe, dann melde ich mich wieder hier im Forum.

                            Kommentar

                            Lädt...
                            X