Kuinka tuollainen otsikon mukainen juttu oikein tehdään? Sehän tehdään jollain PHP:llä, mutta miten? Sorsalammessa oli joku koodiesimerkki, mutta en saanut sitä toimimaan jostain syystä.
Tässä on index.php
<a href="index.php?page=1">Sivu 1</a><br> <a href="index.php?page=2">Sivu 2</a><br> <a href="index.php?page=3">Sivu 3</a><br> <a href="index.php?page=4">Sivu 4</a><br> <?php if ($page == 0) include("1.txt"); else include($page .".txt"); ?>
Ja kaikki sivujen tekstit ovat numeroiduissa tekstitiedostoissa: 1.txt,2.txt,3.txt,4.txt.
Tuossa index.php:ssä on tuo if sitävarten että kun tullaan etusivulle niin page:lla ei ole mitään arvoa joten se laittaa siihen oletusarvoisesti tuon ykkösen.
<?php $pages = Array ( "etusivu" => "etusivu.txt", "linkit" => "linkit.txt", "palaute" => "palaute.txt" ); // Jos ?page= on tyhjä niin viedään etusivulle $page = ($_GET["page"] != "") ? $_GET["page"] : "etusivu"; // Kokeillaan löytyykö kyseistä tekstitiedostoa kuten palaute.txt if (isset($pages[$page]) AND file_exists($pages[$page])) { // Sivu löytyi ja se näytetään eli includetetaan.. :D include ($pages[$page]); } else { // Jotain on nyt väärin.. näytetään virheilmoitus echo "Error 404 - The page cannot be found."; } ?>
Tämä koodi on alunperin muistaakseni odyksen tekemä ja otin siitä enkunkieliset kommentit pois ja suomensin muutamia.. huonosti kylläkin.. :D
Array_key_exists-funktio on myös aika kova sana assosiatiivisten taulukoiden avainten olemassaolon tutkimisessa.
Eikös se ole yksinkertaisinta näin
Linkku kirjoitti:
Eikös se ole yksinkertaisinta näin
No jaa, entäpäs jos sivuja paljon esim. yli 100 kpl? Tulee turhaa koodia aika paljon.
Laitat ne sivut taulukkoon. Taulukon voit luoda atomaattisesti tai käsin, ihan kumpi enempi miellyttää.
Kyllä minusta tuo "Kaviaarin" systeemi on paras. Eihän sen sivun nimen tieten tarvi välttämättä numero olla, vaan voihan se olla ihan mitä vaan.
ajv kirjoitti:
Linkku kirjoitti:
Eikös se ole yksinkertaisinta näin
No jaa, entäpäs jos sivuja paljon esim. yli 100 kpl? Tulee turhaa koodia aika paljon.
No mä ainakin käytän tota. Voi siihen kehitellä parempiakin systeemejä jos tekee isoja sivustoja.
Kyllä se ihan yksinkertaisin on:
<?php $page2 = $_GET['page']; $page = "./kansio jossa sivut/" . $page2 . ".php"; if (!file_exists($page)) { $page = ""./kansio jossa sivut/" . "pääsivu" . ".php"; // Jos ei sivua löydy otetaan pääsivu } ?>
Suosin myös tuota llr:n tyyliä, tosin siinä on yksi tietoturva-aukko: osoiteriville voi kirjoittaa index.php?sivu=../admin/adminsalasanat. Tässä omani:
<? if(!$sivu = $_GET['sivu']) $sivu = "etusivu"; //pysytään siellä hakemistossa tai kuollaan: if(ereg("^\\.",$sivu)) die("<h3>h4x0ring my homepages is not that easy!</h3>"); if(file_exists("kansio jossa sivut/$sivu.php")) include("kansio jossa sivut/sivu.php"); else include("kansio jossa sivut/error_404.php"); ?>
Itse käytän tällaista.
<?php // Tarkistetaan millä sivulla ollaan $sivu = $_GET['sivu']) // Includetetaan etusivu if($sivu == "etusivu"){ include('sivut/etusivu.php'); } //Includetetaan etusivu elseif($sivu == ""){ include('sivut/etusivu.php'); } // Includetetaan uutiset elseif($sivu == "uutiset"){ include('sivut/uutiset.php'); } // Tulostetaan virhe viesti else{ echo "<b>Eipäs onnistu :P</b>"; } ?>
Eikö kannattaisi mieluummin olla vaikka taulukossa nuo mahdolliset vaihtoehdot ja jos $sivu löytyy taulukosta niin includetaan se. Vaikka key=$sivu:narvo ja value=sivunosoite. Kuten Olga tuolla mainitsikin.
TETRIS: Tuon etusivusi includettamisen voi yhdistellä:
// Includetetaan uutiset if ($sivu == "etusivu" || $sivu=="etusivu"){ include('sivut/etusivu.php');
EDIT: Hups väärä sivu eka :).
tsuriga kirjoitti:
if ($sivu == "etusivu" || $sivu=="etusivu"){ include('sivut/etusivu.php');
Vieläkin hieman viilattavaa? :)
Jääköön harjoitustehtäväksi :).
EDIT: Kopioin tuossa epähuomiossa väärän rivin kuten kommentista saattaa huomata.
Ei mitään hajua, että mikä tässä meni väärin. Koodi vaikuttaa minusta täysin oikealta. Anteeksi, että tässä on koko sivun koodi. Voisitteko auttaa?
***index.php*** <html> <head> <title>Arkisto</title> <link rel="stylesheet" href="../style.css" type="text/css"> </head> <body> <table height="100%" width="100%"> <td height="100%" width="20%" valign="top"> <a name="menu" id="menu"></a> <?php include("../menu.php"); ?> </td><td height="100%" width="80%" valign="top"> <a href="index.php?page=farcry">Far Cry v1.0 ongelmia Radeon 8500-9200</a><br> <a href="index.php?page=adpcm">Intel/DVI IMA ADPCM-koodekkiongelma</a><br> <?php $page = $_GET['page']; if ($page == 0) include("selostus.php"); else include($page.".php"); ?> </td> </table> </body> </html>
Olen varma, että tässä on joku n00b-virhe(Aloin opetella PHP:tä toukokuussa). Dokumentit adpcm.php ja farcry.php ovat olemassa samassa hakemistossa.
***index.php*** <html> <head> <title>Arkisto</title> <link rel="stylesheet" href="../style.css" type="text/css"> </head> <body> <table height="100%" width="100%"> <td height="100%" width="20%" valign="top"> <a name="menu" id="menu"></a> <?php include("../menu.php"); ?> </td><td height="100%" width="80%" valign="top"> <a href="index.php?page=farcry">Far Cry v1.0 ongelmia Radeon 8500-9200</a><br> <a href="index.php?page=adpcm">Intel/DVI IMA ADPCM-koodekkiongelma</a><br> <?php $page = $_GET['page']; if (!$page) { include("version.php"); } else { include($page.".php"); } ?> </td> </table> </body> </html>
Kokeileppas noin...
Juu... keksin tuon jo itsekin tässä vähän aikaa sitten.. no kiitos kumminkin.
Kaviaari kirjoitti:
Tässä on index.php
Tuohon oikeastaan pitäisi laittaa alkuun $page=$_GET['page'];, kaikki servut kun eivät laita niitä automaattisesti. :)
Ei pidä, mutta se on suositeltavaa. Servut eivät myöskkään laita sitä itse vaan jos register_globals on off asennossa niin pelkkä $page ei edes toimi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.