Hei,
kumpi näistä on parempi tapa sivujen toteutukseen:
up.php tiedostoon yläosa
down.php tiedostoon alaosa
vai
$sivu = $_GET['sivu']; $sivut = str_replace("/", "", $sivu); // vain tämä hakemisto sallittu include("".$sivu.".php");
Tarkoitus olisi aloittaa koodaaamaan simppeliä verkkokauppaa.
Molemmat ovat mielestäni huonoja ratkaisuja. (Varsinkin toi alempi kummallinen viritys) Käytä mielummin basename() - funktio.
Tee vaikka reititin joka parsii (mahdollisen) syötteen ja palauttaa ohjuri - scriptin nimen.
Ok, mikä vika tuossa ylemmässä on?
Miten muuten ohjelmointiputkassa tämä on toteutettu? Antilla tai Laurilla tietoa?
Olli kirjoitti:
Ok, mikä vika tuossa ylemmässä on?
Näkee jo koko kysymyksestä että sekin vaihtoehto olisi todennäköisesti fail.
Millä perusteella?
qeijo kirjoitti:
Näkee jo koko kysymyksestä että sekin vaihtoehto olisi todennäköisesti fail.
Perustele toki väitteesi, koska minusta se on oleellisesti parempi, kuin sinun tekemäsi viritelmä.
:D Voiko sitä kutsua edes ratkaisuksi kun se käytännössä ei tee yhtään mitään muuta kuin sisällyttää kaksi tiedostoa.?
Ja miten toi sisältö luodaan tuohon?
kö? Vai onko se stattista? Joka tapauksessa tarvitset jonkinlaisen 'reitittimen' kaltaisen scriptin joka parsii käyttäjän syötteen. Ja minun esittämäni "viritelmä" toimisi siinä enemmän kuin hyvin. Vai oletko Teuro sitä mieltä että toi:
<?php $sivu = $_GET['sivu']; $sivut = str_replace("/", "", $sivu); // vain tämä hakemisto sallittu include("".$sivu.".php"); ?>
olisi parempi.
No kysytäänpä sitten, että mitä muuta sen pitäisi tehdäkään? Tuolla tavalla saadaan jokaiselle sivulle samat perustoiminnot, jotka on helppo päivittää yhdestä paikasta kaikille sivuille. Haitallista koodia on käytännössä mahdotonta lisätä tuolla tavalla tehdylle sivulle.
qeijo kirjoitti:
Joka tapauksessa tarvitset jonkinlaisen 'reitittimen' kaltaisen scriptin joka parsii käyttäjän syötteen. Ja minun esittämäni "viritelmä" toimisi siinä enemmän kuin hyvin.
Miksi tarvitaan syöteparseri, jos kerran syötettä ei anneta, vaan sivut pyydetään sivun omalla nimella?
qeijo kirjoitti:
Vai oletko Teuro sitä mieltä että toi:
Tällaista en ole sanonut, vaan olen pyytänyt sinua perustelemaan väitteesi ratkaisun huonoudesta. Minusta tuokaan ei ole hyvä systeemi. Ensimmäinen esitetty idea on minusta toistaiseksi aivan riittävän hyvä.
Nyt mä lähen uimahalliin.
Esitetyistä tavoista ensimmäinen on parempi muttei paras. Toisessa vaihtoehdossa osoitteista tulee rumia ja virhetilanteiden järkevä käsittely vaikeutuu huomattavasti.
Parempi ratkaisu olisi tämä:
<?php require_once("sivupohja.php"); ylaosa("Otsikko"); echo "Juttua, juttua..."; alaosa();
Tällä tavalla sivun yläosa saa tarvitsemansa arvot selkeästi parametreina (ei tarvitse asettaa mystisiä muuttujia) eikä yläosan koodi pääse sotkemaan muita sivun muuttujia.
Seuraava koodi esittelee erään tyypillisen virheen:
<?php // Haetaan tietokannasta jotain sisältöä sivulle. Tämä pitää tehdä ennen // sisällön tulostamista, jotta virhetilanteesta saadaan tulostettua siisti // virheilmoitus ja oikea status (esim. 404, jos tietoa ei löydy). list($otsikko, $teksti) = hae_juttu($_GET["id"]); // Tulostetaan yläosa. $otsikko = "Uutiset"; include("yla.php"); // Tulostetaan sisältö. // Mutta kas, $otsikko ei olekaan enää jutun otsikko vaan teksti "Uutiset"! echo "<h1>", htmlspecialchars($otsikko), "</h1>"; echo "<p>", htmlspecialchars($teksti), "</p>"; include("ala.php");
Tässä siis käytetään vahingossa väärää muuttujaa. Toki näin räikeä virhe on kohtalaisen helppo huomata itsekin, mutta jos arvoa muutetaan yla.php:ssä, virheen löytäminen voi olla hankalampaa. Siksi näitä include-kikkailuja kannattaa välttää. Funktiot on tehty käytettäviksi.
Tuo väärän muuttujan käyttö on ihan totta. Taidan silti pitäytyä tuossa omassa 1. ratkaisussani.
toinen ongelma:
Minulla on seuraava kansiorakenne:
-päähakemisto --sivut ---sivu1 ---sivu2 ---sivu3
Päähakemistossa on htaccess-tiedosto. Haluaisin että htaccess-tiedoston tietyt koodit eivät olisi käytössä sivu3-kansiossa.
Tämä johtuu mod_rewrite ongelmista.
Joten miten saisin poissuljettua tietyn hakemiston?
Teuro kirjoitti:
Miksi tarvitaan syöteparseri, jos kerran syötettä ei anneta, vaan sivut pyydetään sivun omalla nimella?
Jos kyseessä ei ole yhden näkymän sivu, niin tarvitaan ylemmässäkin "ratkaisussa" jossain syöteparseri jolla käsitellään url:in query - osaa.
Itse käytän lähes poikkeuksetta tuota include top/bottom -systeemiä. Jos tarvitsee selata sivuja ajaxilla niin silloin tuo index.php:n sisällä includettaminen on mielestäni fiksumpaa.
Tuon qeijon koodikikkare on käytännössä sama asia kuin käyttäisi includea. Miksi se tarvitsisi kierrättää jonkun funktion kautta?
qeijo: ideana on siis pitää jokainen käyttäjälle näkyvä sivu erillisenä php-tiedostona. jokaiseen includetaan tuo top ja bottom, josta tulevat html:t ennen dynaamista sisältöosuutta ja sen jälkeen.
Osoitteen kauneudesta ei mielestäni kannata välittää, koska sen saa mieleiseksi mod_rewritellä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.