PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Intelligentes Menüsystem


rrabe
31.08.2009, 17:57:50
Hallo!

Habe lange nichtmehr mit PHP gebastelt, nun stellt sich mir folgendes Problem:
Es gibt diverse Kategorien (z.B. Index, Fotos, Impressum)

Wenn ich nun in index.php den Namen von Fotos in Videos ändere, ließt man in impressum.php immernoch " - [Fotos] - [Impressum]". Das heißt, ich müsste, wenn es mehrere Kategorien gibt in jeder [I]dateiname.php die Bezeichnung ändern.

Das Problem wollte ich wie folgt lösen:

navi.inc:
<?php
$navigation = $array(
'Index' => index.php,
'Fotos' => fotos.php,
'Impressum' => impressum.php;
)

//Link wird mit entsprechender Bezeichnung ausgegeben
?>
<? foreach ($navigation as $bezeichnung => $datei){ ?>
<a href="<?= $datei ?>"><?= $bezeichnung ?></a>
<? } ?>

In der index.php:


...
<div id="navi">
<span>
<?php include ("navi.inc")?>
</span>
</div>
...

Beim Testen erhalte ich folgende Fehlermeldung:

Parse error: syntax error, unexpected T_DOUBLE_ARROW in C:\xampp\htdocs\navi.inc on line 2

Was mache ich falsch? bin aus der Materie einfach raus.
Liebe Grüße :)

feuervogel
31.08.2009, 18:11:13
es heißt ... = array(... und nicht ... = $array(...

rrabe
31.08.2009, 18:19:29
Danke dir, außerdem waren Klammer und Simikolon vertauscht.

So müsste es aussehen:
<?php
$navigation = array(
'Index' => index.php,
'Fotos' => fotos.php,
'Impressum' => impressum.php);
?>

Allerdings funktioniert der zweite Teil nicht. Als Ausgabe erhalte ich lediglich:
$datei){ } ?>

Wo steckt da der Fehlerteufel?

xabbuh
01.09.2009, 11:08:26
Wie sieht dein Code jetzt aus?

Domi
01.09.2009, 11:47:56
<?php
foreach ($navigation as $bezeichnung => $datei) {
echo "<a href=\"{$datei}\">{$bezeichnung}</a>";
}
?>

mal so probiert?

bist du dir sicher, dass .inc Dateien bei dir auf dem System richtig geparst werden? unter Umständen werden nur .php Dateien wirklich geparst.

Gruß
Domi

rrabe
01.09.2009, 15:25:33
Danke Domi, nun funktionierts - Außerdem haben bei der Bezeichnung der Namen im Array ein paar Anführungszeichen gefehlt.

Ich habe noch eingebaut, dass die Seite, auf der man sich zur Zeit befindet nicht nochmal verlinkt wird.

navi.inc:
<?php
$navigation = array(
'Index' => 'index.php',
'Fotos' => 'fotos.php',
'Impressum' => 'impressum.php');
?>

<?php
foreach ($navigation as $bezeichnung => $datei) {
if ($datei == basename($_SERVER['PHP_SELF'])) {
echo "{$bezeichnung} " ;
}
else {
echo "<a href=\"{$datei}\">{$bezeichnung}</a> ";
}
}
?>

Die navi.inc wird sauber geparst, klappt wunderbar.
Danke euch. :o)

3e3e
01.09.2009, 23:51:52
...
<div id="navi">
<span>
<?php include ("navi.inc")?>
</span>
</div>
...




nur mal ein kleiner tipp, benenne die datei nicht navi.inc sondern navi.inc.php o.ä. weil nur mit navi.inc kann man die datei ganz normal aufrufen wie ne text datei.

Domi
02.09.2009, 10:31:59
nur mal ein kleiner tipp, benenne die datei nicht navi.inc sondern navi.inc.php o.ä. weil nur mit navi.inc kann man die datei ganz normal aufrufen wie ne text datei.

guter input, kommt allerdings auf die Konfiguration des Servers an. Normalerweise haben Dateien die included werden können garnichts in öffentlichen Verzeichnissen zu suchen:



...
|
+ -- htdocs
| |
| index.php
|
+ -- includedir
|
navi.inc


*ascii rock* ;)

3e3e
02.09.2009, 10:40:31
jo da hast du vollkommen recht, aber ich weis ja nicht wo er die datein hat, ich bin davon ausgegangen das er sie sicher im öffentlichen ordner hat da kein "./include/navi.inc" stand *gg*

rrabe
03.09.2009, 16:27:31
Ich schütze meine include-Datein normalerweise, indem ich hinten noch eine # dranhänge.
Beispielweise so: navi.inc#

Über include kann die Datei aufgerufen werden, ein Aufruf über den Browser oder den Dateindex (in dem Fall http:/localhost/) ist ebenfalls nicht möglich.

Kann man das so machen oder ist das schlechter Stil? :/

Domi
03.09.2009, 16:32:32
Kann man das so machen oder ist das schlechter Stil? :/

sowas habe ich noch nie gesehen *g* wie gesagt, ich habe meine Files einfach nicht im htdocs und somit hat sich das alles erledigt. Aber du kannst zusätzlich per htaccess schützen - entweder mit USER/PW-Abfrage oder einfach alles weg-rewriten usw, aber aber das ist nicht ganz zu empfehlen, kann aber - wie gesagt - zusätzlich so gebaut werden.

Gruß
Domi

rrabe
03.09.2009, 16:39:33
Das mit der Raute habe ich irgendwann mal vor Urzeiten in nem Buch gelesen, und da mir das ne Menge Arbeit hinsichtlich Sicherheitsfragen spart, hab ich das bisher immer so gemacht.
Habe gerade mal geguckt, ob ich was drüber im Internet finde, find aber nix. Naja, scheint sich aber auch noch niemand beklagt zu haben. :P
htaccess bedeutet für mich nur noch eine Sicherheitsabfrage und noch mehr Ballast. ;)

Domi
03.09.2009, 16:44:37
Das mit der Raute habe ich irgendwann mal vor Urzeiten in nem Buch gelesen, und da mir das ne Menge Arbeit hinsichtlich Sicherheitsfragen spart, hab ich das bisher immer so gemacht.
Habe gerade mal geguckt, ob ich was drüber im Internet finde, find aber nix. Naja, scheint sich aber auch noch niemand beklagt zu haben. :P
htaccess bedeutet für mich nur noch eine Sicherheitsabfrage und noch mehr Ballast. ;)

hmmm... wieso bedeutet das Ballast? Du rufst das Verzeichnis in dem die ganzen Include-Files drin sind rufst du ja nie auf, daher auch der htaccess rein - ohne gültigen Benutzer, dann kommt niemand ran, außer du normal mit (s)ftp wie gewohnt. Musst den htaccess ja nicht ins root legen, sondern nur in das Verzeichnis welches includes-files beinhaltet.

rrabe
03.09.2009, 16:48:12
Stimmt, da hast du Recht. Habe mich nie richtig mit htaccess befasst. Aber ich glaube da komm ich jetzt nichtmehr drumherum. Danke dir! Gibt es renomierte htaccess-Seiten a lá SelfHTML? Wenn ja, könnte mir die jemand per PN sagen?

Grüße

Domi
03.09.2009, 16:57:18
auch wenn du es weiterhin mit deinen rauten machst / machen willst, dann schadet ein zusätliches htaccess trotzdem nicht.