Suchfunktion html-Seiten

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Suchfunktion html-Seiten

    Habe eine Funktion hier um Forum gefunden (Beitrag von hand)

    Da ich bis heute noch nicht mit funktionen gearbeitet habe suche ich
    hier eine möglichkeit wie ich diese Funktion ansprechen kann.

    Wie kann ich dem Suchformular sagen das es die folgende Funktion ansprechen soll?

    PHP Code:
    <?
    function such($dir,$needle) {
        $subdirs=array();
        $matches=0;

        $dirh=opendir($dir);

        while($filename=readdir($dirh)) {
            if($filename!=".." && $filename!=".") {
                
                if(is_file($dir."/".$filename)) {
                    $cont = "";
                    
                    $fp = @fopen($dir."/".$filename,"rb");

                    while(!feof($fp)) {
                       $cont.= fread($fp,1024);
                    }

                    fclose($fp);

                    if (strpos($cont,$needle)) {
                       $matches++;
                       print "Match found in file: $dir/$filename<br>\n";
                    }

                } elseif(is_dir($dir."/".$filename)) {
                    $subdirs[]=$dir."/".$filename;
                }
            }
        }
        closedir($dirh);

        for($i=0;$i<count($subdirs);$i++) {
            $size+=such($subdirs[$i]);
        }

        return $matches;
    }

    print "<hr>".such(".","for")." Matches found<br>\n";

  • #2
    http://www.php.net/manual/de/functions.php
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Comment


    • #3
      Auf der Seite habe ich viele Funktionen gefunden und erklärungen dazu, aber nicht wie ich diese Funktion anspreche und die suchvariable an die funktion übergebe.

      Comment


      • #4
        Original geschrieben von webINspirit
        Auf der Seite habe ich viele Funktionen gefunden und erklärungen dazu, aber nicht wie ich diese Funktion anspreche und die suchvariable an die funktion übergebe.
        na, steht doch unten.
        PHP Code:
        print "<hr>".such(".","for")." Matches found<br>\n"
        Die Zeit hat ihre Kinder längst gefressen

        Comment


        • #5
          Wenn ich keinen Denkfehler habe ist das doch die ausgabe der Funktion ob oder wieviele Ergebnisse gefunden worden sind.


          PHP Code:
          <form action="funktion" method="post">
          <
          input type=text name=suche>
          <
          input name="sent" type="submit" value="Suchen">
          </
          form
          So sieht zb. mein Suchformular aus, was muss ich in die action schreiben das er die funktion anspricht die in der selben php-seite steckt??

          Comment


          • #6
            was muss ich in die action schreiben das er die funktion anspricht die in der selben php-seite steckt??
            na PHP_SELF, was sonst?

            - dann fragst du ab, ob und was gesendet wurde .... und
            PHP Code:
            such ('.'$_POST['suche']) 
            Wenn ich keinen Denkfehler habe ist das doch die ausgabe der Funktion ob oder wieviele Ergebnisse gefunden worden sind.
            ja, na sicher wird dort was ausgegeben, print eben ... u.a. der rückgabe-wert der function ... dabei wird sie übrigens aufgerufen.
            Die Zeit hat ihre Kinder längst gefressen

            Comment


            • #7
              Haben den Code jetzt zusammen gebastelt:

              PHP Code:
              <?php

              function such($dir,$needle) {
                  
              $subdirs=array();
                  
              $matches=0;
                                                                       <- 
              Zeile 6
                  $dirh
              =opendir($dir);

                  while(
              $filename=readdir($dirh)) {
                      if(
              $filename!=".." && $filename!=".") {

                          if(
              is_file($dir."/".$filename)) {
                              
              $cont "";

                              
              $fp = @fopen($dir."/".$filename,"rb");

                              while(!
              feof($fp)) {
                                 
              $cont.= fread($fp,1024);
                              }

                              
              fclose($fp);

                              if (
              strpos($cont,$needle)) {
                                 
              $matches++;
                                 print 
              "Match found in file: $dir/$filename<br>\n";
                              }

                          } elseif(
              is_dir($dir."/".$filename)) {
                              
              $subdirs[]=$dir."/".$filename;
                          }
                      }
                  }
                  
              closedir($dirh);

                  for(
              $i=0;$i<count($subdirs);$i++) {
                      
              $size+=such($subdirs[$i]);
                  }

                  return 
              $matches;
              }

              print 
              "<hr>".such ('.'$_POST['suche'])." Matches found<br>\n";


              if(
              $sent!='Suchen')
              {
              echo
              "
              <form action='' method='post'>
              <input type=text name=suche>
              <input name='sent' type='submit' value='Suchen'>
              </form>"
              ; }

              ?>
              Bekomme jetzt leider folgende Fehlermeldung:

              Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 6

              Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 6

              Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 6
              Match found in file: ./faq/email/img/outlook1.gif
              Match found in file: ./faq/email/img/outlook2.gif
              Match found in file: ./faq/email/img/outlook3.gif
              Match found in file: ./faq/email/img/outlook4.gif
              Match found in file: ./faq/email/img/outlook5.gif
              Match found in file: ./faq/email/img/outlook6.gif
              Match found in file: ./faq/email/img/outlook7.gif

              Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 6

              Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 6
              Match found in file: ./faq/ftp/img/ws-ftp1.gif
              Match found in file: ./faq/ftp/img/ws-ftp2.gif
              Match found in file: ./faq/ftp/img/ws-ftp3.gif
              Match found in file: ./faq/ftp/img/ws-ftp4.gif
              Match found in file: ./faq/ftp/img/ws-ftp5.gif

              Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 6

              ..........
              Last edited by webINspirit; 25-05-2004, 21:25.

              Comment


              • #8
                Bekomme jetzt leider folgende Fehlermeldung:
                hmm,

                ich weiß garnicht, was du jetzt erwartest, es steht doch da ...
                mach doch mal testausgaben etc. das action fehlt, setzt ", wo welche hingehören, ...
                Die Zeit hat ihre Kinder längst gefressen

                Comment


                • #9
                  In dem action-Attribut des Forumlar muss schon eine Adresse drin stehen! Und du solltest auch die Werte von HTML-Attributen in HTML-Tags in Anführungsstrichel setzen -> siehe dein Formular.

                  Und außerdem: wenn du die Suchfunktion einfach in den Skriptablauf mit einbaust, ohne überhaupt zu prüfen ob etwas zu suchen eingegeben wurde ist es klar, dass die Fehlermeldung kommt. Der Index "suche" in den Array $_POST existiert dann nämlich noch gar nicht, weil beim bloßen Skriptaufruf ja kein Forumlar versandt wurde.

                  Lösung: eine if-Schleife um die Suchanweisung bauen, die per empty() prüft, ob eine Eingabe in $_POST["suche"] erfolgt ist und etwas ergiebiger mit PHP auseinandersetzen.

                  Comment


                  • #10
                    Das habe ich alles noch eingebaut, jetzt kommt nicht die Fehlermeldung wenn ich die Seite aufrufe jetzt bekomme ich sie nur wenn ich das Suchformular abgeschickt habe.

                    Comment


                    • #11
                      Hi,

                      du musst ihm die Variblen der Funktion auch übergeben

                      function such($dir,$needle)

                      er erwartet beim Start der Funktion, dass die beiden Variablen $dir und $needle einen Wert haben. Wenn du diesen im Formular festlegst musst du die Variablen erst abholen z. B.

                      function such($_POST['dir'], $_POST['needle'])

                      Wobei diese Varibablen auch so in der Funktion angesprochen werden könnten - aber dazu müsste die ganze funktion umgeschrieben werden und würde an flexibilität verliehren...

                      Ich hoffe, ich habe das Problem richtig verstanden.

                      Gruß

                      Comment


                      • #12
                        Ja ganau!!!!

                        Ich wollte gerne das er das hauptverzeichniss und die unterverzeichnisse durchsucht, kann ich dann einfach

                        $dir ='.'; angeben??

                        Ich kann es leider nicht testen weil ich noch nicht dahiter gekommen bin womit ich das $needle füllen muss damit die Suche funktioniert.

                        Comment


                        • #13
                          Mann mann mann Jungens, macht es doch bloß nicht so kompliziert.
                          Der Funktion wird als erstes das Verzeichnis übergeben, in dem es suchen soll. Hier steht der Punkt ganz legal für das Verzeichnis, in dem das Suchskript liegt.
                          Als zweites Argument kommt der Suchbegriff.

                          @nordpol: Was erzählst du da? Die Argumente müssen gültige Werte haben, die Variablen $dir und $needle gelten nur innerhalb des Funktionskörpers, haben aber keine Bedeutung im restlichen Skript.
                          Und mit function wird erst recht keine Funktion aufgerufen.

                          @webinspirit

                          Dein Skript muss so aussehen:

                          PHP Code:

                          <?php

                          function such($dir,$needle) {
                              
                          $subdirs=array();
                              
                          $matches=0;
                                                                                   <- 
                          Zeile 6
                              $dirh
                          =opendir($dir);

                              while(
                          $filename=readdir($dirh)) {
                                  if(
                          $filename!=".." && $filename!=".") {

                                      if(
                          is_file($dir."/".$filename)) {
                                          
                          $cont "";

                                          
                          $fp = @fopen($dir."/".$filename,"rb");

                                          while(!
                          feof($fp)) {
                                             
                          $cont.= fread($fp,1024);
                                          }

                                          
                          fclose($fp);

                                          if (
                          strpos($cont,$needle)) {
                                             
                          $matches++;
                                             print 
                          "Match found in file: $dir/$filename<br>\n";
                                          }

                                      } elseif(
                          is_dir($dir."/".$filename)) {
                                          
                          $subdirs[]=$dir."/".$filename;
                                      }
                                  }
                              }
                              
                          closedir($dirh);

                              for(
                          $i=0;$i<count($subdirs);$i++) {
                                  
                          $size+=such($subdirs[$i]);
                              }

                              return 
                          $matches;
                          }


                          if(!empty(
                          $_POST["suche"])
                          {
                          echo 
                          "<hr>".such ('.'$_POST["suche"])." Matches found<br>\n";
                          }
                          else
                          {
                          echo
                          "
                          <form action=\""
                          .$_SERVER["PHP_SELF"]."\" method=\"post\">
                          <input type=\"text\" name=\"suche\">
                          <input type=\"submit\" value=\"Suchen\">
                          </form>"

                          }

                          ?>
                          Es sieht aus wie deins, nur dass das HTML-Formular mit gültigen HTML erstellt ist und die Suche nur dann ausgeführt wird, wenn im Forumlar etwas eingegeben wurde.

                          Comment


                          • #14
                            @MaxPayne
                            Danke für deine Hilfe.

                            Kann ich es vielleicht noch irgendwie unterbinden das er versucht gif Bilder auszulesen.
                            Da kommen immer noch die Fehlermeldungen:

                            Warning: Missing argument 2 for such() in c:\www\wis\suche.php on line 2
                            Match found in file: beschreibungen/img/teamspeak.gif
                            Match found in file: beschreibungen/img/ventrilo.gif

                            PS: Mir ist aufgefallen das er nur im Hauptorder die php Seiten durchsucht, aber in keinem unterverzeichnis.
                            Er druchsucht in den Unterverzeichnissen nur die gif-Bilder
                            Last edited by webINspirit; 26-05-2004, 16:46.

                            Comment


                            • #15
                              Der Fehler liegt in der Funktion selbst. Wer hat denn die geschrieben?

                              In dieser Schleife:

                              PHP Code:
                                  for($i=0;$i<count($subdirs);$i++) {
                                      
                              $size+=such($subdirs[$i]);
                                  } 
                              wird wie du siehst die Funktion such() ohne das zweite Argumente aufgerufen. Der Aufruf müsste richtigerweise lauten:

                              $size+=such($subdirs[$i],$needle);

                              Und wenn du verhindern willst, dass gif-Bilder geprüft werden, dann muss in dieser if-Anweisung:

                              PHP Code:
                              if(is_file($dir."/".$filename)) 
                              noch die Überprüfung auf die Dateiendung hinzugefügt werden:

                              PHP Code:
                               if(is_file($dir."/".$filename) && (substr($filename,-4) != ".gif")) 

                              Comment

                              Working...
                              X