Auge: substr

Beitrag lesen

Hallo

<?php

$verzeichnis = array (
"portfolio/ordner_1/",
"portfolio/ordner_2/",
"portfolio/ordner_3/"
);

if ($_GET) {
$link = $_GET["link"];
$name = $_GET["name"];
}

  
`$_GET`{:.language-php} ist bei Aufruf eines Skripts über einen HTTP-Request immer gesetzt. Ob `$_GET["link"]`{:.language-php} oder `$_GET["name"]`{:.language-php} gesetzt sind, ist trotzdem nicht sicher (nach dem hier vorgestellten Code).  
  

> ~~~php

for ($zaehler = 0; $zaehler < count($verzeichnis); $zaehler++) {  

>  // Verzeichnisnamen extrahieren!  
>   
>  $verzeichnisname = explode("/", $verzeichnis[$zaehler]);

$verzeichnisname enthält nun jeweils:

$verzeichnisname[0] = "portfolio";  
$verzeichnisname[1] = "ordner_1";  
$verzeichnisname[2] = "";  

$verzeichnisname = $verzeichnisname[1];

// Generiere Linknamen: Lösche erste 3 Zeichen und ersetze _ durch Leerzeichen
    $verzeichnisname = substr(str_replace("_", " ", $verzeichnis[$zaehler]), 10, -1);

  
1\. Woher kommt `$verzeichnis`{:.language-php}? Sollte da nicht `$verzeichnisname`{:.language-php} bzw. `$verzeichnisname[1]`{:.language-php} (Wozu umherkopieren, wenn es auch direkt nutzbar ist?) stehen?  
2\. Der Unterstrich wird durch ein Leerzeichen ersetzt (wie gewollt).  
3\. Die Ursprungszeichenkette "ordner\_1" hat nur 8 Zeichen. Deine Anwendung von substr gibt aber eine Zeichenkette von Position 10 bis zum vorletzten Zeichen zurück, die es nicht geben kann, da die Zeichenkette dafür zu kurz ist.  
4\. Deine Aufgabe "Lösche erste 3 Zeichen und ersetze \_ durch Leerzeichen" würde bei richtiger Anwendung "ner\_1" ausspucken. Ist \*das\* gewollt?  
  

> ~~~php

 else {  

>   // Link zum Verzeichnis setzen  
>   echo '<li> ';  
>   echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?link=$verzeichnisname\">";  
>   echo ucwords($verzeichnisname) . "</a></li>\n";  
>  }  
> }

Benutze $_SERVER["SCRIPT_NAME"] statt $_SERVER["PHP_SELF"], maskiere $verzeichnisname im Parameterteil der URL mit urlencode und mit htmlspecialchars im Linktext.

echo "<li><a href="" . $_SERVER["SCRIPT_NAME"] . "?link=" . urlencode($verzeichnisname) . "">" . htmlspecialchars(ucwords($verzeichnisname)) . "</a></li>\n";

Tschö, Auge

--
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
Veranstaltungsdatenbank Vdb 0.3