Macco kirjoitti:Ongelmani on seuraavanlainen:
Olen koodannut php:llä nettisaitin, jossa index.php-tiedostoon olen sisällyttänyt include-funktiolla mainlink.php-tiedoston, jossa on kaikki sivuston navigointilinkit. Samaisessa index.php-tiedostossa on taulukon solussa include($id); jossa mainlink-tiedoston linkeillä annetaan id:lle arvo. id-tiedostot sisältävät pelkästään informaatio-sisältöä, eli niissä ei ole html, head tai body -tageja.
Miten ihmeessä saan korostettua mainlink.php-tiedostosta sen sivun linkin, jolla kulloinkin olen? body id="jotakin" ei toimi, kun info-sivuilla ei ole bodya. Löysin netistä myös vinkkejä miten homma hoidetaan php:llä, mutta niissäkin pitäisi tavaraa laittaa info-sivun head-tagien sisään, ja niitähän näillä sivuilla ei ole

Tuota tuota, jos nyt yhtään tajusin niin sulla on tämäntyppinen index.php:
Koodi: Valitse kaikki
<html>
<head>
<style type="text/css" media="screen">
/* tyylit */
</style>
</head>
<body>
<div id="navi">
<?php include("mainlink.php"); ?>
</div>
<div id="content">
<?php
//Tässä toivottavasti paremmat tarkistukset syötteelle. Esim kaikki sallitut
//sivut ovat arrayssa ja tarkistetaan aina ennen includea, että haluttu sivu
//löytyy sallittujen sivujen arraysta
$id = basename($_REQUEST['id']);
if (file_exists($id)){
include($id);
}
else{
print "Haluamaasi sivua ei löytynyt";
}?>
</div>
</body>
</html>
Ja sitten mainlink.php:ssa sinúlla on tyyliin näin tuo navigaatio:
Koodi: Valitse kaikki
<ul>
<li><a href="?id=info">Info</a></li>
<li><a href="?id=foo">Foo</a></li>
<li><a href="?id=bar">Bar</a></li>
</ul>
Noita voisi ruuvata esimerkiksi tähän tyyliin jonka jälkeen nykyinen sivu pitäisi olla boldattu
index.php tyyleihin esimerkiksi:
Koodi: Valitse kaikki
<style>
#navi a{
font-weight: normal;
}
#navi a.sel{
font-weight: bold;
}
</style>
Sitten mainlink.php:seen teet sen suunnilleen näin:
Koodi: Valitse kaikki
<ul>
<li><a class="<?php print $id == "info" ? "sel" : "";?>" href="?id=info">Info</a></li>
<li><a class="<?php print $id == "foo" ? "sel" : "";?>" href="?id=foo">Foo</a></li>
<li><a class="<?php print $id == "bar" ? "sel" : "";?>" href="?id=bar">Bar</a></li>
</ul>
Tuo oli pikaisesti kyhätty esimerkki, enkä nyt takaa että ihan tuollaisenaan toimii, mutta tuosta varmaan saat tuon idean ja pääset eteenpäin. Ja muista, että AINA tarkista käyttäjän syöte, äläkä missään nimessä suoraan includeta include($id) silloin vihamielinen käyttäjä voi syöttää mitä haluaa tuon $id:n arvoksi (esim /etc/passwd, jos webbiserveri on väärin konfiguroitu).
Rok rok.