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 "ä" 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 <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($content, 0, strlen($Site_Title)) == $Site_Title) $content = substr($content, strlen($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("ä","ä",$content);
$content=str_replace("ö","ö",$content);
$content=str_replace("ü","ü",$content);
$content=str_replace("Ä","Ä",$content);
$content=str_replace("Ö","Ö",$content);
$content=str_replace("Ü","Ü",$content);
$content=str_replace("ß","ß",$content);
}
$content=str_replace("€","€",$content);
$content=str_replace(" "," ",$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>