Nicolas Muehlen: Menü optional ignorieren?

Hallo zusammen,
ich bin gerade dabei, meine Freespace-Liste mithilfe von PHP3 auf mySQL umzustellen. Bis jetzt lief alles auch ganz gut, nun habe ich allerdings ein Problem:
auf http://www.muehlen.net/freespace/suche.shtml  gab es bisher ja auch immer die Möglichkeit, in den Menüs auch die Option "Alle", bzw. "Egal" auszuwählen. Wenn dies der Fall war, wurde dieses Menü bei der Auswertung einfach übergangen. Wenn z.B. bei Sprache "Alle" ausgwählt war, wurden auch Anbieter aller Sprachen herausgesucht.
Aber wie löse ich das jetzt mit PHP3, daß, wenn die Option "Alle" ausgwählt ist, dieses Menü einfach übergangen wird?
Das gleiche Problem besteht auch bei der Checkbox "Frontpage 98-Erweiterungen". Denn ist diese nicht aktiviert, werden nur Anbieter ohne Frontpage-Erweiterungen herausgesucht, allerdings müssen in diesem Fall natürlich auch die mit angezeigt werden. Wenn hingegen diese Option akiviert ist, dürfen natürlich keine Anbieter ohne FP-Erweiterungen angezeigt werden..
Hat jemand von euch eine Idee, wo ich einen Lösungsansatz dafür finden könnte?
Viele Grüsse und danke,

Nicolas Muehlen

  1. Hallo Nicolas,

    Ich nehme jetzt mal an, das du via die Suchabfrage via ein SQL-"select" steatment machst, mit if() abfragen, wenn aktiviert, WHERE Frontpage="ja" oder so ähnlich!

    Wenns nicht aktiviert ist, wird das nicht hinzugefügt, und es wird nicht beachtet!

    Bei meheren Optionen sieht dann das ca. so aus:

    SELECT * FROM webspace WHERE frontpage="ja" AND sprache="deutsch" ORDER BY firmenname

    so ein beispiel.... für entweder oder, kannst anstatt AND auch OR nehmen!

    Ich hoffe es ist nicht allzu kompliziert ausgedrückt!

    Anonymous

    1. Hi Anonymous,

      Wenns nicht aktiviert ist, wird das nicht hinzugefügt, und es wird nicht beachtet!<<

      Stimmt. Da hatte ich vorhin wohl den falschen Denkansatz genommen... Ich verweise mich hiermit selbst an die FAQ <g>

      SELECT * FROM webspace WHERE frontpage="ja" AND sprache="deutsch" ORDER BY firmenname<<

      Und hier liegt jetzt das andere Problem: wenn der Besucher bei Sprache nun "Alle" ausgewählt hat, wie schaffe ich es dann, daß dann auch Anbieter aller Sprachen herausgesucht werden? Schließlich ist "Alle" in diesem Fall ja kein Eintrag, der in der mySQL-Tabelle vorkommt...
      OR anstatt AND geht leider nicht, da dann auch Anbieter herausgesucht werden, die eigentlich nicht dazugehören.
      Viele Grüsse und danke,

      Nicolas Muehlen

      1. Stimmt. Da hatte ich vorhin wohl den falschen Denkansatz genommen... Ich verweise mich hiermit selbst an die FAQ <g>

        kann apssieren... ;) Steht darüber was in der FAQ ? *lol*

        SELECT * FROM webspace WHERE frontpage="ja" AND sprache="deutsch" ORDER BY firmenname<<

        Und hier liegt jetzt das andere Problem: wenn der Besucher bei Sprache nun "Alle" ausgewählt hat, wie schaffe ich es dann, daß dann auch Anbieter aller Sprachen herausgesucht werden? Schließlich ist "Alle" in diesem Fall ja kein Eintrag, der in der mySQL-Tabelle vorkommt...
        OR anstatt AND geht leider nicht, da dann auch Anbieter herausgesucht werden, die eigentlich nicht dazugehören.

        Hmm...  wie ist das alle zu verstehen ? muss dann der Proveider alle Sprachen unterstützen, oder wie ?

        Wenn ja, wäre es am einfachsten, wenn du im datensatz wo einner alle spprachen unterstützt, alle eintippst! ;)

        Anonymous

        1. Hi Anonymous,

          kann apssieren... ;) Steht darüber was in der FAQ ? *lol*<<

          Sicher, ich hab sie mir ehrlichgesagt noch nie so richtig durchgelesen <g>

          Hmm...  wie ist das alle zu verstehen ? muss dann der Proveider alle Sprachen unterstützen,

          oder wie ?<<

          Ne, "Alle" heißt soviel wie "Egal", daß es also nicht darauf ankommt, welche Sprache der Anbieter hat. Nur wie mache ich das dem PHP-Script klar? Wenn jemand schließlich "Alle" im Menü auswählt sucht das Script in der Datenbank auch nach einem, der als Sprache "Alle" hat, und da wird es natürlich nicht viel finden ;-)
          Viele Grüsse und danke,

          Nicolas Muehlen

          1. Oke, ich würde es folgender massen machen!

            function Sprache() {

            if ($sprache == "alle") { $sprache_SQL=""; }
            else { $sprache_SQL=="Sprache=$sprache AND"; }

            }

            function Frontpage() {

            if ($fp == "ja") { $fp_SQL="FP=1 AND"; }
            else { $fp_SQL==""; }

            }

            // usw. für jede option!

            function SQL_STRING() {

            $SQL_SELECT_BEFEHL= mysql_db_query("provider","select * from proveider WHERE $fp_SQL $sprache_SQL ORDER BY name");

            }

            nacher einfach einem Hauptscript die funktionen nacheinander aufrufen..

            Sprache();
            Frontpage();
            SQL_STRING();

            und dann den ganzen erzeugten String auswerten!

            Anonymous

            PS: Ich bin zwar nicht 100% sicher das das auch funktioniert, doch aus meiner erfahrung würde ich sagen, es muss! ;)

            1. Hi Anonymous,
              vielen Dank, ich hab das gleich ausprobiert :-) Ein Problem gibt es allerdings noch, und zwar gibt das mySQL immer die Fehlermeldung aus, daß die Funktion "gruppe" (ich hab für mein Testscript "Sprache" in "gruppe" umbenannt) nicht definiert sei, obwohl dies ja ohne Zweifel der Fall ist. Ich habe bei mir zwar die eigentliche Abfrage nicht wie bei dir als Funktion, sondern als mehrere Variablen gemacht, aber eigentlich sollte das ja kein Problem sein.
              Auch wenn ich aus der Funktion gruppe() in eine Variable mache und unten bei "$result = [...]" einfüge, klappt es nicht...
              Hier mal der Code (natürlich etwas gekürtzt, also nicht wundern, daß die Ausgabe fehlt):

              <?
                      $link = mysql_pconnect("localhost","bla","bla");
                      mysql_select_db("frsp1",$link);

              function gruppe() {
                        if ($gruppe == "Egal") { $gruppe_SQL=""; }
                        else { $gruppe_SQL=="gruppe=$gruppe AND"; }
                      }
                      grupppe();
                
                      $query = "select * from test where name='$name' and url='$url' and                                                         gruppe='$gruppe_SQL'";
                      $result = mysql_query($query,$link);
                      $num = mysql_numrows($result);
                   ?>

              Ich könnte die Abfrage natürlich wie in deinem Beispiel auch in eine Funktion umwandeln, allerdings sagte man mir, dann würde es bei gleichzeitigen Abfragen möglicherweise Probleme geben, da es die Variable $link nicht gibt. Ist da was dran? Wenn nicht, wäre das Problem ja gelöst...
              Viele Grüsse,

              Nicolas Muehlen

              1. Hallo,

                vielen Dank, ich hab das gleich ausprobiert :-) Ein Problem gibt es allerdings noch, und zwar gibt das mySQL immer die Fehlermeldung aus, daß die Funktion "gruppe" (ich hab für mein Testscript "Sprache" in "gruppe" umbenannt) nicht definiert sei, obwohl dies ja ohne Zweifel der Fall ist.

                <?
                        $link = mysql_pconnect("localhost","bla","bla");
                        mysql_select_db("frsp1",$link);

                function gruppe() {

                Hier hast du zwei "pp" !?

                if ($gruppe == "Egal") { $gruppe_SQL=""; }
                          else { $gruppe_SQL=="gruppe=$gruppe AND"; }
                        }
                        grupppe();

                Hier hast du drei "ppp" !?
                Ist das nur hier, oder auch in deinem Script ?
                Zu Beachten ist asserdem: Die definierung einer Funktion, muss vor dem ausführen dieser stehen!

                Ich könnte die Abfrage natürlich wie in deinem Beispiel auch in eine Funktion umwandeln, allerdings sagte man mir, dann würde es bei gleichzeitigen Abfragen möglicherweise Probleme geben, da es die Variable $link nicht gibt. Ist da was dran? Wenn nicht, wäre das Problem ja gelöst...

                keine Ahnung! ehrlich gesagt! ich würde sagen nein!

                Hmm.. der select befehl müsste glaub so heissen:
                $query = "select * from test where name='$name' and url='$url' and $gruppe_SQL";

                Viele Grüsse,

                Anonymous

                1. Hi Anonymous,
                  so, ich habe es jetzt zum Laufen gebracht. Ich hab die ganze Funtkion jetzt einfach weggelassen, also nur noch:

                  $link = mysql_pconnect("localhost","www95","g2rw4x");
                          mysql_select_db("frsp1",$link);

                  if ($gruppe == "Egal") { $gruppe_SQL="";}
                            else { $sprache_SQL=="Sprache=$sprache AND"; }

                  $query = "select * from test where name='$name' [...........]

                  Naja, und so weiter. Allerdings habe ich jetzt das Gefühl, daß, wenn in einer Tabelle nach "" (also garnichts) suche, mySQL garnichts anstatt alles ausgibt, kann das sein?
                  Viele Grüsse und danke,

                  Nicolas Muehlen

                  1. else { $sprache_SQL=="Sprache=$sprache AND"; } <<

                    Hier muss natürlich "gruppe" statt "sprache stehen... Ist aber nur hier falsch :-)

                  2. Naja, und so weiter. Allerdings habe ich jetzt das Gefühl, daß, wenn in einer Tabelle nach "" (also garnichts) suche, mySQL garnichts anstatt alles ausgibt, kann das sein?

                    Hmm...  eigentlich sollte, da dann keine einschrenkung durch WHERE ist, alles ausgeben!

                    Grüessli

                    Anonymous

                    PS: Plz. autoriesiere mich im ICQ ;)