XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Barrierefreiheit (http://xhtmlforum.de/forumdisplay.php?f=78)
-   -   PHP Skript macht meine Seite unvalide (http://xhtmlforum.de/showthread.php?t=44570)

X-TREM 18.02.2007 21:17

PHP Skript macht meine Seite unvalide
 
Hallo!

Ich habe Probleme eine bestimmte Seite von mir valide zu machen.

Und zwar die: Suche - Suptra.de

Die Seite öffnet sich zum darstellen der Suchergebnisse auf meiner Seite.

Wenn ich das Skript rauslösche aus dem Quelltext ist die Seite wieder valide...

An was kann das liegen?

Gruß
X-TREM

andir 19.02.2007 11:46

Deine divs hauptcont, center-div und content werden nicht geschlossen- jedenfalls sieht es im Quelltext / tidy so aus. Deswegen die Fehlermeldung.
Wenn man aber im FF Webdeveloper die Seite anschaut ( Edit HTML) sind die drei schließenden Tags plötzlich da.

??
Kannst Du mal das breadcrumb php-script posten ( also nicht das generierte, sondern das script an sich) hier hats eine Funktion zum Einfügen dafür.

Edit: Ausserdem fehlt das schließende body und html-Tag. Merkwürdig.

X-TREM 19.02.2007 13:11

Hallo Andreas,

Danke für Deine Antwort.

Ich vermute, dass das Skript eine Art Blockade darstellt. Ich werde Dir das Skript heute Abend posten.

Schöne Grüße
X-TREM

X-TREM 19.02.2007 17:38

PHP-Code:

<?php

// Domain-Name für die Anzeige in den Resultaten

$DomainName="http://www.suptra.de";

// Root-Verzeichnis für den Zugriff auf die Dateien am Server

$RootDir=dirname($_SERVER['SCRIPT_FILENAME']);

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

// Beschreibung anzeigen ("true" für ja, "false" für nein)
$Show_Description=true;

// Teile des Inhalts anzeigen ("true" für ja, "false" für nein)
$Show_Content=false;

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

// Dateinamen anzeigen ("true" für ja, "false" für nein)
$Show_Filename=true;

// Dateigröße anzeigen ("true" für ja, "false" für nein)
$Show_Filesize=true;

// Nummer des Resultates anzeigen ("true" für ja, "false" für nein)
$Show_ResultNumber=true;

// Erlaubte Verzeichnisse als Array, getrennt mit einem Beistrich
// Z.B.: $AllowedDirs=array($RootDir,$RootDir."/hilfe",$RootDir."/infos");
$AllowedDirs=array($RootDir);

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

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

?>

<?php
  $search
=FormatSearchString(stripslashes($_POST['p_search']));
?>

<?php

if(!$search) exit;

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

echo 
"<h4></h4>\n";

echo 
"<h4></h4>\n";

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

$ResultCount=0;
if(
$files && $search){
  foreach(
$files as $f){
    if(
SearchFile($f,$search)){
      
$fn=$f;
      if(
substr($f,0,strlen($RootDir))==$RootDir$fn=$DomainName.substr($f,strlen($RootDir));
      
$ResultCount++;
      if(
$Show_ResultNumber) echo $ResultCount.". ";
      echo 
"<a href=\"".$fn."\"><b>".$Site_Title."</b></a><br>\n";
      if(
$Meta_Description) echo $Meta_Description."<br>\n";
      if(
$Site_Content) echo "<span id=small><span id=grey>".$Site_Content."</span></span><br>\n";
      if(
$Show_Filename) echo "<span id=grey>Datei:</span> <span id=green>".$fn."</span>";
      if(
$Show_Filesize){
        if(
$Show_Filename) echo " - ";
        echo 
"<span id=grey>Größe:</span> <span id=green>".round(filesize($f)/1024,2)." KB</span>";
      }
      if(
$Show_Filename || $Show_Filesize) echo "<br>";
      echo 
"<br>\n";
    }
  }
  
clearstatcache();
}
echo 
"Es wurden insgesamt <b>".$ResultCount."</b> Seiten gefunden.<br>\n";  

function 
SearchFile($url,$search){
  global 
$Show_Description;
  global 
$Found_Piece_Len;
  global 
$Activate_Umlaut;
  global 
$RootDir;
  global 
$DomainName;
  
  global 
$Site_Title;
  global 
$Site_Content;
  global 
$Meta_Description;
  global 
$Meta_Robots;
  
  
$Site_Title="";
  
$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;
    }
  }
  if(!
$Show_Description$Meta_Description="";
  if(
eregi("noindex",$Meta_Robots)) return false;
  
  
// *** Dateiinhalt einlesen (bzw. Ausgabe bei PHP) ***
  
$fp=@fopen($url,"r"); 
  if(!
$fp) return false;
  while(!
feof($fp)){
    
$content.=fgets($fp,10240);
  }
  
fclose($fp);
  
$content=str_replace("<?","<",$content);
  
$content=str_replace("?>",">",$content);
  
$content=trim($content);
  
$content=$Site_Title." ".$Meta_Title." ".$Meta_Keywords." ".$Meta_Description." ".$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($Activate_Umlaut){
    
$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);
      
  
// *** Suchen ***
  
$found=false;
  
$a=explode(" ",strtolower($search));
  
$lowcontent=strtolower($content);
  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)."<b id=red>";
      
$result_text.=substr($content,$p0,strlen($arg))."</b>".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";
  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($DirArray,$ExtArray){
  
$fileArray=array();
  foreach(
$DirArray as $d){
    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));
}

?>


andir 20.02.2007 09:56

Erst einmal was mir bei der Nutzung deiner Suchfunktion aufgefallen ist:

Du verwendest bei der Ausgabe des Scripts viele Line-breaks, die nicht geschlossen sind.

zum Beispiel < br > -- das ist HMTL-Syntax, bei deinem Doctype ist aber < br / > richtig ( denke dir die Leerstellen bei den spitzen Klammern weg.)

Also: Nachbessern:

Zum Auszeichnen diverser Elemente verwendest Du spans. Soweit ok, aber du verwendest gleichzeitig id's, die mehrfach im Dokument vorkommen. Das darf nicht sein, ersetze also id durch die z.B. gleichnamige Klasse. Zwei leere h4 container sind ausserdem an Bord.
Ich persönlich bevorzuge es, id's und Klassen im HTML in " " zu setzen.
Du müsstest das in deinem Suchausgabescript anpassen, entweder das doppelte Anführungszeichen escapen oder nur einfache ' ' nehmen.

Das ist dieser Bereich:

PHP-Code:

if($Show_ResultNumber) echo $ResultCount.". ";
      echo 
"<a href=\"".$fn."\"><b>".$Site_Title."</b></a><br>\n";
      if(
$Meta_Description) echo $Meta_Description."<br>\n";
      if(
$Site_Content) echo "<span id=small><span id=grey>".$Site_Content."</span></span><br>\n";
      if(
$Show_Filename) echo "<span id=grey>Datei:</span> <span id=green>".$fn."</span>";
      if(
$Show_Filesize){
        if(
$Show_Filename) echo " - ";
        echo 
"<span id=grey>Größe:</span> <span id=green>".round(filesize($f)/1024,2)." KB</span>";
      }
      if(
$Show_Filename || $Show_Filesize) echo "<br>";
      echo 
"<br>\n";
    } 


Damit kannst Du die rund 264 Fehlermeldungen vermeiden die ich bekommen habe...


@Thema:


Dein Skript endet unwiderrruflich, wenn die Variable Search nicht existiert, also keine Sucheingabe erfolgt ist.

PHP-Code:

if(!$search) exit; 

Das ist uncool, weil nur eine leere Seite zu sehen ist.

Besser ist es :
PHP-Code:

if(!$search) die ("Bitte geben Sie einen Suchbegriff ein") ; 

zu verwenden.

Gleichzeitig bin ich mir nicht sicher, ob die oder exit hier die richtige Wahl ist, denn offensichtlich wird das Ausführen des gesamten Seitenscripts abgebrochen. Wie du im Browser und auch im Quelltext siehst, fehlt der footer komplett und natürlich die diversen im vorigen Posting angesprochenen Tags.

Entweder verbindest Du das Aussteigen aus dem Script mit einer entsprechenden Fehlerbehandlung ( if !$search... echo "div footer bla bla... UND DANN ERST DIE ( ) ) oder du läßt Dir was anderes einfallen.

Leider bin ich nicht so der php Crack, aber auch da haben wir ein forum für :)

X-TREM 20.02.2007 12:17

Wahnsinn... vielen Dank Andreas :)

Hast mir sehr weitergeholfen!


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:02 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023