php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.10.2009, 16:24  
Neuer Benutzer
 
Registriert seit: 13.03.2009
Beiträge: 11
54ch4 befindet sich auf einem aufstrebenden Ast
Standard Suchfunktion - nur bestimmte Seiten durchsuchen

Hallo zusammen.
Ich baue mir zur zeit eine website mit php.
diese website enthält eine suchfunktion, die auch ohne probleme funktioniert.

OHNE PROBLEME???? nein nicht ganz!
leider liest die suche wirklich jedes ding was es gibt, was eigentlich ja ok ist aber nicht in meinem fall.

zum aufbau der seite:
ich habe ein 3spalten layout. header, die 3 spalten und einen footer.
der header (mit metadaten usw) wird mit include_once in die index.php gezogen, genauso wie die footer.php

meine suchfunktion befindet sich direkt in der index.php und wenn ich nun ein wort suche, liest die suchfunktion auch den footer und den header aus.

der user bekommt nun die meldung das z.B. 3 mal das wort "neu" gefunden wurde. Der user kann nun entscheiden, auf welchen link er klicken will.
und da ist das problem. Die Suchfunktion liest auch den footer und header aus das heisst der user kann auf header.php zugreifen oder auch auch footer.php weil beide dateien das wort "neu" enthalten.
aber genau das will ich verhindern!
kann mir jemand helfen?


HIER IST MEIN CODE
PHP-Code:
<?php

// *********************
// *** Einstellungen ***
// *********************

// Domain-Name für die Anzeige in den Resultaten
$DomainName "http://".GetParam("SERVER_NAME""S");

// Root-Verzeichnis für den Zugriff auf die Dateien am Server
// Beispiel: $RootDir=dirname("/htdocs");
$RootDir dirname(GetParam("SCRIPT_FILENAME""S"));

// Dateiname für die Protokollierung der Suchbegriffe
// (kein Dateiname zum deaktivieren der Protokollierung)
// z.B. "../../files/logs/search_words.log"
$SearchWordLog "";

// Länge der Textfragmente um die Fundstellen (in Zeichen)
$Found_Piece_Len 50;

// Erlaubtes Verzeichnis
// Z.B.: $AllowedDirs = $RootDir."/content";
$AllowedDir $RootDir;

// Erlaubte Erweiterungen als Array, getrennt mit einem Beistrich
// Z.B.: $AllowedExts=array(".php",".php3",".php4",".htm",".html",".ihtml",".shtm",".shtml",".txt");
$AllowedExts = array(".php",".html",".shtml");

// Deutsche Umlaute dekodieren (dadurch wird beispielsweise "&auml;" zu "ä")
$ActivateUmlaut true;

// Links zu den gefundenen Seiten in einem neuen Tab/Fenster öffnen
$LinkTargetBlank true;

// *****************************************************************************

?>

<?php

  $SearchTerm 
FormatSearchString(stripslashes(GetParam("q""P")));
  if (!
$SearchTerm$SearchTerm FormatSearchString(stripslashes(GetParam("q""G")));
?>



<br>
<?php

if($SearchTerm){
  
// Protokollierung der Suchbegriffe
  
if(file_exists($SearchWordLog)) {
    
$fp=@fopen($SearchWordLog,"a");
    if(
$fp) {
      
flock($fp,2);
      
fputs($fp,$SearchTerm,256);
      
flock($fp,3);
      
fclose($fp);
    }
  }

  
$files=ReadDirs($AllowedDir,$AllowedExts);

  
$ResultCount=0;
  if(
$files && $SearchTerm){
    foreach(
$files as $f){
      if(
SearchFile($f,$SearchTerm)){
        
$fn=$f;
        if(
substr($f,0,strlen($RootDir))==$RootDir$fn=$DomainName.substr($f,strlen($RootDir));
        
$ResultCount++;
        echo 
$ResultCount.". ";
        echo 
'<a href="'.$fn.'"';
        if (
$LinkTargetBlank) echo ' target="_self"';
        echo 
"><b>".$Site_Title."</b></a><br>\n";
        
/*if($Meta_Description) echo $Meta_Description."<br>\n";*/
        
echo "".$Site_Content."<br>\n";
        echo 
"Datei: <span class=green>".$fn."</span>";
        echo 
" - ";
        echo 
"Größe: <span class=green>".round(filesize($f)/1024,2)." KB</span>";
        echo 
"<br>";
        echo 
"<hr />";
      }
    }
    
clearstatcache();
  }
  echo 
"Es wurden <b>".$ResultCount."</b> Seiten mit dem Begriff &nbsp;<b>\"$SearchTerm\"</b> gefunden.<br>\n";
}

function 
SearchFile($url,$search){
  global 
$Found_Piece_Len;
  global 
$ActivateUmlaut;
  global 
$RootDir;
  global 
$DomainName;

  global 
$Site_Title;
  global 
$Meta_Title;
  global 
$Site_Content;
  global 
$Meta_Description;
  global 
$Meta_Robots;

  
$Site_Title="";
  
$Meta_Title="";
  
$Meta_Keywords="";
  
$Site_Content="";
  
$Meta_Description="";
  
$Meta_Robots="";

  
// *** Meta-Angaben ermitteln ***
  
$gmtarray=get_meta_tags($url);
  while(list(
$key,$val)=each($gmtarray)){
    switch(
strtolower($key)){
      case 
"title"$Meta_Title=$val; break;
      case 
"keywords"$Meta_Keywords=$val; break;
      case 
"description"$Meta_Description=$val; break;
      case 
"robots"$Meta_Robots=strtolower($val); break;
      case 
"revisit"$Meta_Revisit=strtolower($val); break;
      case 
"revisit-after"$Meta_RevisitAfter=strtolower($val); break;
    }
  }
  
$Meta_Description="";

  
// *** Dateiinhalt einlesen (bzw. Ausgabe bei PHP) ***
  
$fp=@fopen($url,"r");
  if(!
$fp) return false;
  
$content="";
  while(!
feof($fp)){
    
$content.=fgets($fp,10240);
  }
  
fclose($fp);
  
  
$content preg_replace("/<\?.*?\?>/s"""$content);

  
$content $Meta_Title." ".$Meta_Keywords." ".$Meta_Description." ".trim($content);

  
// *** Seitentitel ermitteln ***
  
$Site_Title GetSiteTitle($content);
  if(!
$Site_Title$Site_Title $Meta_Title;
  if(!
$Site_Title$Site_Title basename($url);

  if (
substr($content0strlen($Site_Title)) == $Site_Title$content substr($contentstrlen($Site_Title));

  
$content strip_tags($content);
  
$content str_replace("\n"" "$content);
  
$content str_replace("\r"""$content);
  
$sc " ".trim($content);

  while(
strpos($sc,"  ")){
    
$sc=str_replace("  "," ",$sc);
  }
  
$content=$sc;

  
// Deutsche Umlaute konvertieren
  
if($ActivateUmlaut){
    
$content=str_replace("&auml;","ä",$content);
    
$content=str_replace("&ouml;","ö",$content);
    
$content=str_replace("&uuml;","ü",$content);
    
$content=str_replace("&Auml;","Ä",$content);
    
$content=str_replace("&Ouml;","Ö",$content);
    
$content=str_replace("&Uuml;","Ü",$content);
    
$content=str_replace("&szlig;","ß",$content);
  }
  
$content=str_replace("&euro;","€",$content);
  
$content=str_replace("&nbsp;"," ",$content);

  
// *** Suchen ***
  
$found=false;
  
$a=explode(" ",strtolower($search));
  
$lowcontent=strtolower($content);
  
$result_text="";
  foreach(
$a as $arg){
    
$p0=strpos($lowcontent,$arg);
    if(
$p0>0){
      
$p1=$Found_Piece_Len;
      
$p2=$Found_Piece_Len;
      if ((
$p0-$p1) < 0$p1=$p0;
      
$result_text.="...".substr($content,$p0-$p1,$p1)."<span class=magenta>";
      
$result_text.=substr($content,$p0,strlen($arg))."</span>".substr($content,$p0+strlen($arg),$p2);
      
$found=true;
    }else{
      
$found=false;
      break;
    }
  }

  if(!
$found) return false;
  if(
$result_text$result_text.="...";

  
$Site_Content=$result_text;

  return 
true;
}

function 
FormatSearchString($search){
  
$chars=".:-_,;!§$%&/()=#+*~'?\[|]{^°}²³µ@€ äöüß1234567890abcdefghijklmnopqrstuvwxyz";
  
$s="";
  for(
$i=0;$i<strlen($search);$i++){
    
$a=substr($search,$i,1);
    if(
stristr($chars,$a)) $s.=$a;
  }
  while(
strpos($s,"  ")){
    
$s=str_replace("  "," ",$s);
  }
  return 
trim($s);
}

function 
ReadDirs($d,$ExtArray){
  
$fileArray=array();
  if(
$hDir opendir($d)){
    while(
$file=readdir($hDir)){
      if(!
is_dir($d."/".$file)){
        
// *** .*-Dateien (zB .htaccess) ignorieren ***
        
if(substr($file,0,1)!="."){
              foreach(
$ExtArray as $ext){
                if(
substr(strtolower($file),strlen($file)-strlen($ext),strlen($ext))==strtolower($ext)){
                    
array_push($fileArray,$d."/".$file);
                    continue;
                }
              }
          }
      }
    }
    
closedir($hDir);
  }
  return 
$fileArray;
}

function 
GetSiteTitle($content)
{
  
$p1=strpos(strtolower($content),"<title>");
  if(!
$p1) return false;
  
$p2=strpos(strtolower($content),"</title>",$p1);
  if(!
$p2) return false;
  return 
trim(substr($content,$p1+7,$p2-$p1-7));
}

function 
GetParam($ParamName$Method "P"$DefaultValue "") {
  if (
$Method == "P") {
    if (isset(
$_POST[$ParamName])) return $_POST[$ParamName]; else return $DefaultValue;
  } else if (
$Method == "G") {
    if (isset(
$_GET[$ParamName])) return $_GET[$ParamName]; else return $DefaultValue;
  } else if (
$Method == "S") {
    if (isset(
$_SERVER[$ParamName])) return $_SERVER[$ParamName]; else return $DefaultValue;
  }
}

?>

<form class=formbox action="<?php echo GetParam("PHP_SELF""S"); ?>" method="post">

<input type="text" name="q" id="searchForm" value="Suche">
<input type="image" src="img/submit.jpg" name="submit">

</form>
54ch4 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.10.2009, 17:26  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Lege eine Blacklist (Dateien, die nicht durchsucht werden sollen) bzw. eine Whitelist (Dateien, die durchsucht werden sollen) an - je nachdem, was weniger Arbeit ist...
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 02.10.2009, 17:51  
Neuer Benutzer
 
Registriert seit: 13.03.2009
Beiträge: 11
54ch4 befindet sich auf einem aufstrebenden Ast
Standard

danke.
aber... wie mache ich sowas?
54ch4 ist offline  
Alt 02.10.2009, 17:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.253
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Wichtig ist, dass Du Deine Inhalte irgendwie im Klartextformat speicherst oder einfach dahingehend extrahieren kannst. Zudem ist eine Volltextsuche, die Verzeichnisweise Dateien öffnet keine gute Idee, Du solltest die Daten in einer Datenbank vorhalten, die auf die ressourcenschonende Speicherung und Durchsuchung von Textdaten optimiert ist.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 02.10.2009, 19:38  
Neuer Benutzer
 
Registriert seit: 13.03.2009
Beiträge: 11
54ch4 befindet sich auf einem aufstrebenden Ast
Standard

gibt es denn nicht irgendeinen kleinen codeschnipsel, der verhindert, dass die suche im header und im footer erfolgt?
54ch4 ist offline  
Alt 02.10.2009, 19:49  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wenn du das Skript selbst geschrieben hast, weißt du doch, an welcher Stelle die Prüfung auf footer und header einzubinden wäre?! Für die Reparatur oder Erweiterung deiner Skripte auf Null-Kenntnis-Basis deinerseits sind wir hier nicht zuständig.

Abgesehen davon ist die Suche in allem was sie tut Mist.
- eine Suche, die über das Dateisystem des Webservers geht ist Murgs, relevant ist nicht die Datei, sondern die Ausgabe über http, siehst du ja gerade.
- eine Suche, die live Dateien und Ordner durchsucht ist der Performance-Killer schlechthin, denn 90% der Arbeit, die sie tut ist überflüßig und muss bei jeder Suche neu durchgeführt werden
- wenn du wissen willst, wie eine Suchmaschine gebaut wird, schau hier mal vorbei: The Anatomy of a Search Engine

Im Ernst, arbeite dich ein wenig in PHP ein oder benutz ein Skript, das up2date ist.
Chriz ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Einfache Suchfunktion, bestimmte Seite nicht mit anzeigen. pixelprinzessin PHP Tipps 2009 6 31.07.2009 07:46
Suchfunktion via DropdownMenü & Javascript RostigerNagel PHP Tipps 2009 2 03.07.2009 12:09
[Erledigt] Login script: Jeder User sieht andere Seiten Cr3at3 PHP Tipps 2008 61 29.08.2008 08:23
PHP suchfunktion (DB Durchsuchen) Problem kazuya PHP Tipps 2008 4 04.11.2007 16:39
Frage zum durchsuchen von PHP Seiten &lt;Daniel&gt; PHP Tipps 2006 4 15.05.2006 10:46
Ordner durchsuchen und HTML Seiten als Links ausgeben niffi PHP Tipps 2006 4 23.01.2006 11:20
Seiten sichern!? c01001 PHP Tipps 2006 7 20.01.2006 09:13
[Erledigt] Zuviele Seiten werden angezeigt PHP Tipps 2007 5 24.12.2005 12:49
Suchfunktion für die Homepage? Was muss der Anfänger wissen? PHP Tipps 2005-2 1 11.10.2005 18:39
Suchfunktion nur für EINE Seite ! HTML, Usability und Barrierefreiheit 2 24.03.2005 18:42
Textdatei durchsuchen CSS PHP Tipps 2005 3 26.02.2005 15:31
Seiten auf Links durchsuchen PHP Tipps 2005 4 05.01.2005 09:41
div auf mehreren Seiten HTML, Usability und Barrierefreiheit 0 25.11.2004 19:10
Durch Passwort eingabe zugriff auf bestimmte Seiten PHP Tipps 2004 3 16.06.2004 14:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php website durchsuchen, website durchsuchen php, bestimmte websites durchsuchen, seite dursuchen, bestimmte seite durchsuchen, bestimmte seiten durchsuchen, webseite durchsuchen php, php suchfunktion bestimmte ordner nicht durchsuchen, php seiten durchsuchen, ein suchbegriff auf mehreren seiten gleichzeitig suchen, nur ausgewählte webseiten durchsuchen, nur seite durchsuchen, nur auf bestimmter seite suchen, suchfuntion die html duchsucht, bestimmte website durchsuchen, bestimmte site durchsuchen, bestimmte internetseiten absuchen, spezielle seite durchsuchen, seiten suchfunktion html code, nur bestimmte seiten durchsuchen suchmaschine php

Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum