PHP Suchfunktion: Suchformular anders positionieren
Thomas Schaefer
- php
Hallo zusammen,
ich habe mir (da ich leider (noch) blutiger PHP-Anfäger bin) Mithilfe eines Tutorials eine PHP-Suchfunktion erstellt, die auch super funktioniert.
Nun hätte ich es gerne so, dass das Suchformular (wo man den Suchbegriff eingibt) nicht im selben Frame ist, wie die Suchergebnisse, d.h.
dass man im Suchformular (das sich nicht im iFrame befindet) etwas eingibt -> Auf 'suchen' klickt -> und die gefundenen Ergebnisse in einem iFrame angezeigt werden.
Ich habe testweise mal ein Beispiel hochgeladen http://mitglied.lycos.de/dapperdanman/suchen2.php
Das Suchfeld im iFrame funktioniert - kein Problem. Aber das Suchfeld was sich nicht im iFrame befindet funktioniert nicht :( :(
Könnt ihr mir weiterhelfen?
Vielen Dank im Voraus!
Gruß, Thomas Schaefer
Anbei der Quellcode des PHP-Dokuments:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html> <head> <title>PHP-Suchmaschine</title> <style> body,td,input { font-family:Verdana;font-size:8pt } .t_nummer { font-family:Verdana;font-size:8pt } .markierung {color:#ff0000} </style> </head>
<body bgcolor="E2EAE5">
<? $max_suchwoerter=3; # Maximale Anzahl der Suchwörter, die wahrgenommen werden
$treffer_pro_seite=10; # Wie viele Treffer werden pro Ergebnisseite angezeigt?
$endungen=array("html","htm","php","phtml"); # Dateien mit welchen Endungen werden durchsucht?
$pfade_gesamt="./"; # Adressen (relativ zum Suchmaschinennskript) der zu durchsuchenden Ordner (durch Kommata trennen!)
$max_stelle=200; # Maximale (ungefähre) Länge (in Zeichen) der ersten gefundenen Textstelle
$mehr_laenge=200; # Maximale (ungefähre) Länge (in Zeichen) des Strings für weitere Vorkommnisse
########### Ab hier folgt die Suche ####### if (!isset($grossschreibung)) { $grossschreibung=0; } if (!isset($ganzewoerter)) { $ganzewoerter=0; } if (!isset($index)) { $index=0; }
$suchtext=trim(stripslashes($suchtext)); if ($grossschreibung==0) { $suchtext=strtolower($suchtext); } $suchtext=ereg_replace(","," ",$suchtext); $suchtext2=array(); $suchwoerter=array(); $suchtext2=explode(" ",$suchtext); foreach ($suchtext2 as $einwort) { if (($einwort!="") && (count($suchwoerter)<=($max_suchwoerter-1)) && (!in_array($einwort,$suchwoerter))) { array_push($suchwoerter,$einwort); } } $suchtext=implode(" ",$suchwoerter); ?>
<form action="<? echo "$PHP_SELF"; ?>" method="post"> <table width="600" border="0" cellspacing="5" cellpadding="0" bgcolor="#E2EAE5" align="center"> <tr> <td align="left"><? echo "<input type="text" name="suchtext" size=""; $browser=$HTTP_USER_AGENT; if (1*strpos(strtolower($browser),"msie")>0) { echo "25"; } else { echo "14"; } echo "" value="".$suchtext.""><br><br>"; ?> <input name="submit" type="submit" value=" suchen "> <div align="left"></div> <div align="left"></div> <div align="left"></div><div align="left"> </div></td> </tr> </table> </form>
<? if ($suchtext!="") { start(); ausgabe(); }
function start() { global $suchwoerter,$grossschreibung,$ganzewoerter,$dateinummer,$treffer,$max_stelle,$mehr_laenge; global $endungen,$pfade_gesamt; $dateinummer=0; $treffer=array(); $pfade=array(); $pfade=explode(",",$pfade_gesamt); foreach ($pfade as $pfad) { $ordner=opendir($pfad); while ($eintrag=readdir($ordner)) { $name=$pfad.$eintrag; $dateiname=explode(".",$eintrag); if (in_array($dateiname[1],$endungen)) { $anzahl=0; $schluss=0; $gefundene_woerter=array(); $datei=fopen($name,"r"); while (!feof($datei)) { $zeile=fgetss($datei,10000,""); if ($grossschreibung==0) { $zeile=strtolower($zeile); }
$woerter=explode(" ",$zeile); foreach ($woerter as $wort) { foreach ($suchwoerter as $suchwort) { ### ganze Wörter ### if ($ganzewoerter==0) { if (strstr($wort,$suchwort)) { if (!in_array($suchwort,$gefundene_woerter)) { array_push($gefundene_woerter,$suchwort); } $anzahl++; $treffer["vorkommnisse"][$dateinummer]++; if ($anzahl==1) { $treffer["datei_url"][$dateinummer]=$name;
$position=strpos($zeile,$wort); $wortlaenge=strlen($wort); $zeilenlaenge=strlen($zeile); if ($zeilenlaenge>$max_stelle) { $lside=$position-(($max_stelle-$wortlaenge)/2); $rside=$lside+$max_stelle; if ($lside<0) { $rside=$rside-$lside; $lside=0; } if ($rside>$zeilenlaenge) { $rside=$zeilenlaenge; } } else { $lside=0; $rside=$zeilenlaenge; } $stelle=substr($zeile,$lside,$rside-$lside); $stelle=ereg_replace($wort,"<span class="markierung">".$wort."</span>",$stelle); $stelle="...".$stelle."..."; $treffer["textstelle"][$dateinummer]=$stelle; } else if ($anzahl==2) { $teil=ereg_replace(",","",$teil); $mehr=$teil; } else if ($anzahl>2) { if (strlen($mehr)<$mehr_laenge) { if ($mehr=="") { $komma=""; } else { $komma=", "; } $wort=ereg_replace(", ","",$wort); $mehr.=$komma.$wort; } else { if ($schluss!=1) {$mehr=$mehr." ..."; $schluss=1;} } } } } ### ganze Wörter ENDE ### ### Wortteile ### else { if ($wort==$suchwort) { if (!in_array($suchwort,$gefundene_woerter)) { array_push($gefundene_woerter,$suchwort); } $anzahl++; $treffer["vorkommnisse"][$dateinummer]++; if ($anzahl==1) { $treffer["datei_url"][$dateinummer]=$name;
$position=strpos($zeile,$wort); $wortlaenge=strlen($wort); $zeilenlaenge=strlen($zeile); if ($zeilenlaenge>$max_stelle) { $lside=$position-(($max_stelle-$wortlaenge)/2); $rside=$lside+$max_stelle; if ($lside<0) { $rside=$rside-$lside; $lside=0; } if ($rside>$zeilenlaenge) { $rside=$zeilenlaenge; } } else { $lside=0; $rside=$zeilenlaenge; } $stelle=substr($zeile,$lside,$rside-$lside); $stelle=" ".$stelle." "; $stelle=ereg_replace(" ".$wort." "," <span class="markierung">".$wort."</span> ",$stelle); $stelle="...".$stelle."..."; $treffer["textstelle"][$dateinummer]=$stelle; } else if ($anzahl==2) { $teil=ereg_replace(",","",$teil); $mehr=$teil; } else if ($anzahl>2) { if (strlen($mehr)<$mehr_laenge) { if ($mehr=="") { $komma=""; } else { $komma=", "; } $wort=ereg_replace(", ","",$wort); $mehr.=$komma.$wort; } else { if ($schluss!=1) {$mehr=$mehr." ..."; $schluss=1;} } } } } ### Wortteile ENDE ### } } } fclose($datei); $treffer["woerter"][$dateinummer]=count($gefundene_woerter); $treffer["mehr"][$dateinummer]=$mehr; if (count($gefundene_woerter)>0) { $dateinummer++; } } } closedir($ordner); }
}
function ausgabe() { global $treffer,$dateinummer,$PHP_SELF,$index,$SERVER_NAME,$treffer_pro_seite,$suchwoerter,$suchtext,$grossschreibung,$ganzewoerter;
echo "<table width="600" border="0" align="center"><tr><td>\n"; echo "<span style="font-size:10pt"><b>Ergebnisse der Suche:</b></span><br><br>\n"; $treffer_anzahl=count($treffer["datei_url"]); if ($treffer_anzahl==0) { echo "<span style="font-size:13pt"><b><center><br><br>Leider nichts gefunden<br><br></center></b></span></td></tr></table>\n"; } else { @array_multisort($treffer["woerter"],SORT_DESC,$treffer["vorkommnisse"],SORT_DESC,$treffer["datei_url"],$treffer["textstelle"],$treffer["mehr"]); $suchtext=ereg_replace(" ",", ",$suchtext); if (count($suchwoerter)>1) { echo "Gesuchte Wörter: "; } else { echo "Gesuchtes Wort: "; } echo "$suchtext<br><br>\n"; $anfang=$index*$treffer_pro_seite+1; $ende=$anfang+$treffer_pro_seite-1; if ($ende>$treffer_anzahl) { $ende=$treffer_anzahl; } echo "<b>Treffer $anfang-$ende von insgesamt $treffer_anzahl Treffern, beste Treffer zuerst:<br><br>\n"; echo "</td></tr></table>\n";
for ($k=0;$k<$treffer_pro_seite;$k++) { $i=$index*$treffer_pro_seite+$k; $platz=$i+1; if ($platz<=$ende) { echo "<table width="600" border="0" cellpadding="0" cellspacing="0" align="center">\n"; $t=1; $treffer["datei_url"][$i]=ereg_replace("./","",$treffer["datei_url"][$i]); $datei=fopen($treffer["datei_url"][$i],"r"); while ($t<7) { $zeile=fgetss($datei,1000,""); $zeile=trim($zeile); if ($zeile!="") { echo "<tr><td height="16" colspan="2">"; echo "<span class="t_nummer">".$platz.".</span> <a href="".$treffer["datei_url"][$i]."" target="_self"><b>".$zeile."</b></a>"; break; } $t++; } fclose($datei); if ($treffer["woerter"][$i]==1) { $woerter="Wort"; } else { $woerter="Wörter"; } if ($treffer["vorkommnisse"][$i]==1) { $vorkommnisse="Vorkommnis"; } else { $vorkommnisse="Vorkommnisse"; } echo "<p style="margin-top:0pt; margin-bottom:0pt" align="justify">\n"; echo $treffer["textstelle"][$i]."<br>\n"; echo "<small><b>Weitere Vorkommnisse: </b>".$treffer["mehr"][$i]."</small></p></td></tr>\n"; echo "<tr><td><a href="http://".$SERVER_NAME."/".$treffer["datei_url"][$i]."" target="_blank">\n"; echo "<img src="newwindow.gif" width="14" height="10" border="0">\n";
echo " http://".$SERVER_NAME."/".$treffer["datei_url"][$i]."</a></td>\n"; echo "<td align="right"><small><b>".$treffer["woerter"][$i]." ".$woerter." | ".$treffer["vorkommnisse"][$i]." ".$vorkommnisse."</b></small></td>\n"; echo "</td></tr></table><br><br>\n"; } } }
if ($treffer_anzahl>0) { echo "<center>Seite: \n"; } $j=ceil($treffer_anzahl/$treffer_pro_seite)-1; for ($i=0;$i<=$j;$i++) { $zahl=$i+1; if (($index+1)!=$zahl) { echo "<a href="$PHP_SELF?suchtext=$suchtext&index=".$i."&grossschreibung=".$grossschreibung."&ganzewoerter=".$ganzewoerter."">"; } echo $zahl; if (($index+1)!=$zahl) { echo "</a>"; } echo " "; } if ($treffer_anzahl>0) { echo "</center>\n"; } } ?>
</body> </html>
Hallo,
den Quellcode hab ich mir nicht angeschaut, aber ich nehme an, daß das Suchformular außerhalb des IFrames nicht in ein funktionierendes <form> eingebaut ist.
Schau dir mal den Quellcode des i-frame an und vergleiche das dort eingebaute form mit dem außerhalb des iframe.
Nur ein Input ohne form funktioniert nicht.
Als target für das Form außerhalb des I-Frames kannst du dann den Iframe angeben und dort sollten dann, wenn du alles richtig gemacht hast auch die Ergebnisse angezeigt werden.
http://selfhtml.teamone.de/html/formulare/definieren.htm
Odium
hi,
Nun hätte ich es gerne so, dass das Suchformular (wo man den Suchbegriff eingibt) nicht im selben Frame ist, wie die Suchergebnisse, d.h.
dass man im Suchformular (das sich nicht im iFrame befindet) etwas eingibt -> Auf 'suchen' klickt -> und die gefundenen Ergebnisse in einem iFrame angezeigt werden.
dann benutze eine target-angabe im <form>-tag, die auf den iframe verweist.
Anbei der Quellcode des PHP-Dokuments: [...]
ist hier völlig fehl am platze.
druck ihn von mir aus aus, und erschlage lästige insekten damit.
gruss,
wahsaga