Problemo #1
Sivuni käyttävät yksinkertaista ja suosittua dynaamista sivujärjestelmää:
<?php if(!isset($_GET["sivu"])) { $sivu = "sivut/etusivu"; } else { $sivu = $_GET["sivu"]; } if(!file_exists($sivu . ".php")) { $sivu = "sivut/error"; } include($sivu . ".php"); ?>
Tämän ja formien kanssa esiintyy ongelma. Eli index.php on koko hoidon juuressa. Palautelootan kirjoitussivun polku on sivut/palaute/kirjoita.php, ja lähetyssivun polku on sivut/palaute/laheta.php.
Jos nyt avaan sivujärjestelmällä palautesivun, kirjoitan testipalautteen ja lähetän sen, niin päädyn etusivulle (vaikka pitäisi mennä laheta.php:n kautta lahetetty.php sivulle). Ja palautteen sisältö ilmestyy osoiteriville ikäänkuin kuin käyttäisin GETtiä, vaikka käytän tässä tapauksessa POSTia. Johtuuko tämä siitä, että sivujärjestelmä käyttää GETtiä, jolloin kaksi eri lomaketta "törmäävät"?
Problemo #2
Minulla on itse tehty blogijärjestelmä. Entryt menevät omaan tauluunsa, jossa kenttiä on kuusi; lahettaja, otsikko, paiva, aika, viesti ja id. Yksi rivi on yksi blogientry. Id alkaa nollasta ja kasvaa koko ajan yhdellä, eli ensimmäisen entryn id on 0, toisen 1, kolmannen 2 jne. Nyt pitäisi saada hakuskripta listaamaan entryt (jokaisesta entrystä linkki, jonka teksti on entryn otsikko) alkaen uusimmasta, ja järjestelemään ne sivuille. Eli yhdelle sivulle tulisi joko kuukauden entryt, tai sitten esim. 10 entryä per sivu. Kuinka mahdollista?
Anteeksi lievä epäselvyys :)
lainaus:
Sivuni käyttävät yksinkertaista ja suosittua dynaamista sivujärjestelmää
Lisätään listaan vielä "turvatonta". Systeemihän ei mitenkään tarkasta, mitä tiedostoa ollaan lukemassa, joten tällä tavalla on mahdollista urkkia miltei minkä tahansa tekstitiedoston sisältö, johon PHP pääsee käsiksi.
GETiä ja POSTia voi käyttää ihan hyvin yhtä aikaa. Hankala sanoa mikä tuossa ykkösongelmassasi mättää, kun en saa todellisesta hakemistorakenteesta selkeää kuvaa, lomakkeen koodia ei ole näkyvillä jne. Ainoa vinkki, jonka voin tähän hätään antaa, on, että kokeile antaa URLit täydellisinä, ei suhteellisina ja katso, mitä tapahtuu.
Kakkosongelmaan lyhyehkö pätkä antamaan vinkkiä (ei pidä ajatella lopullisena koodina):
<?php $query = mysql_query("SELECT * FROM entryt ORDER BY id DESC LIMIT 10"); echo "<ul>\n"; while($row = mysql_fetch_assoc($query)) echo "<li><a href=\"jokusivu?id=".$row['id']."\">".$row['otsikko']."</a></li>\n"; echo "</ul>\n"; ?>
Suosittelen lukemaan perustutoriaaleja tietokantojen käytöstä.
Laaksoselta löytyy sivutukseen loistava koodivinkki.
https://www.ohjelmointiputka.net/koodivinkit/
Jooh... Kiitosta. Muokkasin tuota sivusysteemiä niin, että se pääsee käsiksi vain sivut-hakemistoon. Kokeilen soveltaa tuota sivutussysteemiä.
Hakemistorakenne on tässä:
http://img178.imageshack.us/my.php?image=dirvc9.
index.php on siis tuon www-hakemiston juuressa.
Ja tässä palautelootan koodia:
**kirjoita.php <h1>Palaute</h1> Vaikuta sivustoon. Kirjoita palautetta. Kaikki palautteet luetaan ja riippuen siitä onko sähköpostiosoitetta annettu, niihin myös vastataan.<p> <form action="sivut/palaute/laheta.php" method="POST"> <b>Nimi/nick:</b><br><input type="text" name="Nimi"><p> <b>E-mail:</b><br><input type="text" name="E-mail"><br><i>Vaadittu, jos haluat, että palautteesesi vastataan.</i><p> <b>Miten löysit tänne ensimmäistä kertaa:</b><br> <select name="Miten löysi"> <option value="Joku kertoi (suullisesti)">Joku kertoi (suullisesti) <option value="Haki hakukoneella">Hain hakukoneella <option value="Klikkasi linkkiä">Klikkasin linkkiä <option value="Klikkasi mainosta">Klikkasin mainosta <option value="Randomilla">Randomilla </select><p> <b>Palaute: *</b><br><textarea name="Palaute"></textarea><p> <input type="submit" value="Vaikuta"> </form>
**laheta.php <?php foreach($_POST as $nimi => $arvo) { $palaute .= $nimi . ": " . $arvo . "\n"; } $viesti = mail("foo@bar.com", "[Loota.] Palaute", $palaute); if($viesti) { header("Location: index.php?sivu=palaute/success&teema={$_GET['teema']}"); } else { header("Location: index.php?sivu=palaute/fail&teema={$_GET['teema']}"); } ?>
Et lähetä tuossa koodissa missään vaiheessa teemaa, esim.
action="sivut/palaute/laheta.php?teema=seteema"
Pistäisi arvon kulkemaan niin että sen saa $_GETillä kaivettua.
Toinen tapa olisi heittää hidden-kenttänä formiin ja lukea $_POSTilla.
Pidemmän päälle järkevin tapa olisi heittää selaimeen keksi.
No pistetään keksinä :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.