Miten PHP:llä tehdään allaolevista html-sivuista esim sivu.php, joka näyttäisi käyttäjälle samalta, mutta koko sivusto olisi yhdessä tiedostossa?
eka.html
<html> <head> <title> Eka sivu </title> </head> <body> Tämä on eka sivu<br> <br> <a href="eka.html">eka.html</a><br> <a href="toka.html">toka.html</a><br> <a href="kolmas.html">kolmas.html</a> </body> </html>
toka.html
<html> <head> <title> Toka sivu </title> </head> <body> Tämä on toka sivu<br> <br> <a href="eka.html">eka.html</a><br> <a href="toka.html">toka.html</a><br> <a href="kolmas.html">kolmas.html</a> </body> </html>
kolmas.html
<html> <head> <title> Kolmas sivu </title> </head> <body> Tämä on kolmas sivu<br> <br> <a href="eka.html">eka.html</a><br> <a href="toka.html">toka.html</a><br> <a href="kolmas.html">kolmas.html</a> </body> </html>
<html> <head> <?php if(!$_GET['sivu']){ echo '<title> Eka sivu </title> </head> <body> Tämä on eka sivu<br>'; } //toka.html if($_GET['sivu'] =="toka_html"){ echo '<title> Toka sivu </title> </head> <body> Tämä on toka sivu<br>'; } //kolmas.html if($_GET['sivu'] =="kolmas_html"){ echo '<title> Kolmas sivu </title> </head> <body> Tämä on kolmas sivu<br>'; } ?> <a href="mun.php">eka.html</a><br> <a href="mun.php?sivu=toka_html">toka.html</a><br> <a href="mun.php?sivu=kolmas_html">kolmas.html</a> </body> </html>
Sivun sisältö on tässä pääosin sama (linkit). Niimpä tarvitaan muutoksia vain noita otsikoita varten.
Kiitos!
Toka ja kolmas sivu toimii.
Ekassa näkyy otsikot, mutta lisäksi sivulla näkyy seuraavat herjat:
Notice: Undefined index: sivu in c:\program files\easyphp1-8\www\mun.php on line 4
Notice: Undefined index: sivu in c:\program files\easyphp1-8\www\mun.php on line 12
Notice: Undefined index: sivu in c:\program files\easyphp1-8\www\mun.php on line 22
Eli ilmeisesti noissa if-lauseissa on jotain vikaa?
Käytän EasyPHP -virtuaalipalvelinta omalla koneella, mutta on sillä kaikki aikaisemmat sivut toimineet, joten vika tuskin on siinä...
Sinun tulisi tarkistaa, sisältääkö $_GET-taulukko kyseistä indeksiä. Näin ei ole, ellei käyttäjä ole sisältänyt sitä sivupyyntöönsä (ts. hakenut esimerkiksi sivua mun.php?sivu=kolmas_html). Toisekseen, kannattaa käyttää tuossa else if -rakennetta - sivu kun ei voi olla montaa eri arvoa kuitenkaan. Kun tiedetään muuttujan tyyppi, vertailu on sama tehdä tarkoilla vertailuoperaattoreilla yllätysten välttämiseksi, sekä mahdollisesti myös nopeuden vuoksi (kun epätarkan vertailun sisältävä if palauttaa falsen, se on hitaampi kuin tarkka vertailu. Veikkaisin tilanteen olevan toinen kun if palauttaakin truen.. ei sillä, että tässä nopeuserolla olisi lähinnä mitään väliä, kts. oikea syy yllä :p). Kannattaa myös lukea PEARin koodausstandardit.
Palvelimella, jota käytät, php:n asetuksissa on E_NOTICE päällä virheilmoitukissa. Jos asiaan voit vaikuttaa, se kannattaa poistaa error_reporting-listalta.(Edit: Voit tietty vaikuttaa, koska tiedostot näyttävät olevan C-asemassa).
Minun koneellani yksikään error_reporting ei ole päällä (edessä puolipiste ;), eikä ole haitannut. Niitä voi tarpeen mukaan asetella päälle, jos ei jokin homma muuten selviä.
Riittää, kun display_errors = On.
Nämä siis tapahtuvat php.ini tiedostossa.
Ei nyt taas mennä helpoimman kautta, vaan varmistetaan mieluummin ohjelman toimivuus ennen kuin lasketaan softaa nettiin. Kyllä ne noticetkin saa olla päällä siellä kehitysserverillä, muuten sitä voi ihmetellä esimerkiksi notta "mitenkäs tässä minun funktiossa muuttujalla x on arvo 0". Tämähän voi johtua yksinkertaisesti vaikkapa siitä, että muuttuja oli määritelty funktion ulkopuolella, jolloin se ei näy funktion sisälle, ja muuttujalle annettiin oletusarvo. Paljon helpompi debugata kun huomautuksetkin ovat käytössä, ja kun ne oikeasti otetaan huomioon sillä isset-funktiolla.
Sain toimimaan, kun muutin hieman tota ekaa sivua,
if($_GET['sivu'] =="eka_html"){ echo '<title> Toka sivu </title> </head> <body> Tämä on eka sivu<br>'; }
+ linkkeihin muutos:
<a href="mun.php?sivu=eka_html">eka.html</a>
ja sivulle saapuessa laitoin osoitteeksi:
mun.php?sivu=eka_html
Kiitos kaikille!
Aihe on jo aika vanha, joten et voi enää vastata siihen.