Kann mir jemand diesen Fehler erklären?

Mellowtrax

Mitglied
Also ich hab folgendes Script für eine Suchmaschine

PHP:
<!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:7.9pt }
 .t_nummer { font-family:Verdana,Tahoma,Arial; font-size:16pt; font-weight:bold; color:#999999}
 .markierung {color:#ff0000}
 </style>
</head>
<body>
<?

########### Hier folgen die Einstellungen ###########
$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","pdf","PPS"); # Dateien mit welchen Endungen werden durchsucht?
$pfade_gesamt="./,Schwarzes Brett/6Sigma/,Schwarzes Brett/Anschlagbrett/,Schwarzes Brett/Tel.Verzeichnis/,Schwarzes Brett/Smile/,Schwarzes Brett/Q-Handbuch/00/,Schwarzes Brett/Q-Handbuch/10/,Schwarzes Brett/Q-Handbuch/20/,Schwarzes Brett/Q-Handbuch/30/,Schwarzes Brett/Q-Handbuch/40/,Schwarzes Brett/WIR/,EDV und Admin/Anleitungen/,EDV und Admin/DiverseInfos/,Abteilungen/BM_Kundendienst/,Abteilungen/BM_Verkauf/,Abteilungen/ESYS/,Abteilungen/FIBU/,Abteilungen/LOSY/"; # 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="500" cellpadding="5" cellspacing="0" border="0" bgcolor="#ccddee" align="center">
<tr>
<td align="right">
<?
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 type="submit" value=" suchen ">
</td>
<td>
<b>Groß- und Kleinbuchstaben</b><br>
<input type="radio" name="grossschreibung" value="1" <? if ($grossschreibung==1) echo "checked"; ?>>unterscheiden<br>
<input type="radio" name="grossschreibung" value="0" <? if ($grossschreibung==0) echo "checked"; ?>>nicht unterscheiden
</td>
<td>
<b>Art der Suche</b><br>
<input type="radio" name="ganzewoerter" value="1" <? if ($ganzewoerter==1) echo "checked"; ?>>nur ganze Wörter<br>
<input type="radio" name="ganzewoerter" value="0" <? if ($ganzewoerter==0) echo "checked"; ?>>Wortteile
</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=\"500\" border=\"0\" align=\"center\"><tr><td>\n";
echo "<span style=\"font-size:13pt\"><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=\"580\" border=\"1\" 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]."\"><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."/Intranet/".$treffer["datei_url"][$i]."\" target=\"_blank\">\n";
echo "<img src=\"Bilder\newwindow.gif\" width=\"14\" height=\"10\" border=\"0\">\n";
echo "&nbsp;http://".$SERVER_NAME."/Intranet/".$treffer["datei_url"][$i]."</a></td>\n";
echo "<td align=\"right\"><small><b>".$treffer["woerter"][$i]."&nbsp;".$woerter." | ".$treffer["vorkommnisse"][$i]."&nbsp;".$vorkommnisse."</b></small></td>\n";
echo "</td></tr></table><br><br>\n";
}
}
}
if ($treffer_anzahl>0) { echo "<center>Seite:&nbsp;&nbsp;&nbsp;\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 "&nbsp;&nbsp;&nbsp;";
 }
if ($treffer_anzahl>0) { echo "</center>\n"; }
}
########### Ende des Suchmaschinenskripts ###########
?>
</body>
</html>

Wenn ich XAMPP installiere und die Seite ausführe funktionierts prima. Nun hab ich aber einen PC auf dem der IIS (windows XP) läuft und ich PHP installiert habe.
Wenn ich da diese Datei ausführe kommt folgende Fehlermeldung:

Notice: Undefined variable: suchtext in c:\Inetpub\wwwroot\suchen.php on line 37


Weshalb

Gruss Mell
 
Findest du es nicht ein wenig frech, hier einfach 250 Zeilen Quellcode hinzuklatschen? Die Fehlermeldung ist in Wahrheit eine Notiz, die du unterdrücken kannst, wenn du [phpf]error_reporting[/phpf] für das Scrit anpasst, oder generell für alle Scripte über die php.ini.
 
Zuletzt bearbeitet:
Was soll man da erklären:confused:
Code:
$suchtext=trim(stripslashes($suchtext));
...du hast diese Variable nirgends definiert.... das sollte man selbst ohne Englisch-Kenntnisse aus der Fehlermeldung entnehmen können.

Wirf einen Blick in unsere PHP-FAQ, unter "Ich kann nach Abschicken des Formulars nicht auf meine Variablen zugreifen, was tun?" dürfte die Lösung deines Problems zu Finden sein.
 
Jaja aber das komische ist ja, genau dieses Script lief vorher einwandfrei und ich hab nix geändert..

Und was die 250 Zeilen code angehen, zuerst hies es ich soll in Zukunft den ganzen Code posten und jetzt nicht mehr?

Na ja egal.. das Script funktioniert auch nicht mehr, wenn ich was suchen will, kommt die Fehlermeldung "Seite nicht gefunden oder so" aber mit XAMPP hat das Ding noch funktioniert!
 
Mellowtrax hat gesagt.:
Jaja aber das komische ist ja, genau dieses Script lief vorher einwandfrei und ich hab nix geändert.
Du hast 2 PHP.... mit wahrscheinlich nicht identischer php.ini .... das macht den Unterschied.

Kopiere die php.ini von dem XAMPP- Rechner auf den mit IIS, vielleicht reicht das schon aus.
Oder setzte in der php.ini auf dem IIS-Rechner register_globals auf "on"... das würde zumindest diese Fehlermeldung beseitigen.
 
Ich hab irgendwo im Source gesehen, dass Suchtext irgendwie uebergeben wird, daher ist das auch vorher nicht deklariert.
Okay, soviel dazu. Vielleicht ist register_globals=off, sodass Du $suchtext erstmal per $_GET oder $_POST holen musst.
 
Zurück