PHP-Ohjelmointi tutoriaali: Vieraskirja

Yksinkertainen aloitus kohta on vieraskirja, ja tarjoaa helpon oppimistien, joten aloitamme siitä. Vieraskirjat edelsi keskustelupalstoja jne. ja oikeastaan hyvin harvoin käytetty nykyään.

Siitä ei kuitenkaan ole pitkä matka esimerkiksi artikkeli kohtaiseen kommentointiin, tai jopa keskustelupalstaan.

Aluksi hieman HTML:ää kuitenkin, tässä on perus-runko, joka pitää olla kaikissa HTML sivuissa:

<html>

<head>

                      <title>Vieraskirja PHP:llä - Jeesi.info tutoriaali</title>

</head>

<body>

 

 

</body>

</html>

<html></html> määrittää sisällön HTML:ksi. Tagit joilla on lopetus aina merkitään </TAGI>. seuraava elementti on <head>, eli header, joka sisältää mm. sivun otsikon, meta-tiedot (avainsanat, tyylitiedostot jne.). Vihdoin tulee body elementti, eli itse sisältö. tageille voidaan määritellä ominaisuuksia, esimerkiksi: <body bgcolor=black text=white> muuttaisi pohja värin mustaksi ja tekstin valkoiseksi.

Seuraavaksi pitää tehdä lomake: <form> tagilla.

<form action="add.php" method=”post”>

 

</form>

Ominaisuus ”action” määrittää että mille tiedostolle syöte lähetetään, ja ”method”’ nimensä mukaisesti lähetys tavan. Käytämme tässä ”post” lähetystapaa, mutta yhtä hyvin voi käyttää ”get” lähetystapaa.

Seuraavaksi tarvitaan syöte kentät, jotka lisätään <input> merkinnällä, lisää nämä <form> ja </form> tagien väliin:

Nimesi:<input type="text" name="nimi" /> <br />

 

Kommentti:<br />

<textarea name="kommentti">

</textarea>

<br />

 

<input type="submit" value="Lisää" />

<input> tagille on monta eri ominaisuutta, ja tässä on käytetty tyyppiä, nimeä sekä arvoa. Lisäksi laitoimme tekstialue kentän, eli <textarea>. Uuden standardin mukaan kaikki tagit joilla ei ole pääte tagia pitää lopettaa / merkillä, eli pelkkä <br> (rivinvaihto) ei riitä, vaan sen pitää olla <br />.

<input> tagin tyyppi text on tekstinkysely, ja name joka annetaan, tarkoittaa muuttujanimeä jollekka kysellään arvoa. Tyyppi submit taas on lähetys nappi, ja tälle kun laitetaan value, eli arvo, tarkoittaa tekstiä joka napissa lukee.

Tällä hetkellä sivumme koodi on tällainen:

<html>

<head>

                      <title>Vieraskirja PHP:llä - Jeesi.info tutoriaali</title>

</head>

<body>

 

<form action="add.php" method="post">

 

Nimesi:<input type="text" name="nimi" /> <br />

 

Kommentti:<br />

<textarea name="kommentti">

</textarea>

<br />

 

<input type="submit" value="Lisää" />

 

</form>

 

</body>

</html>

Ja se näyttää tällaiselta:

Nytten pääsemme PHP:n käsiksi. Katsotaan ensin mitä tietoa saamme kun lähetämme lomakkeen, tee tiedosto ”add.php” samaan paikkaan kuin vieraskirja.php ja lisää tämä siihen:

<pre>

<?php // add.php Jeesi.info vieraskirja tutoriaalista

print_r($_POST);

?>

</pre>

<pre> poistaa HTML muotoilut, elikkä teksti tulee sellaisena kuin se syötetään, ei tarvitse muotoilla. PHP koodi aloitetaan aina <?php käskyllä, jolla PHP tunnistaa että ”Ahaa, tämä pitää käsitellä!”, ja lopetetaan ?> merkinnällä. Print_r funktio näyttää taulukon (engl. array) sisällön.

Näemmä tälläistä kun syötetään nimeen testaaja, ja kommenttiin testaa:

Nyt meidän pitää käsitellä syötetty tieto ja tallentaa se. Emme itse asiassa tarvitse edes syötteen tarkistusta, koska tallennamme tiedot tiedostoon, valmiiksi muotoiltuna.

Lisää nytten perus HTML runko tähän, poistaen <pre> sekä </pre> ja jättäen PHP koodin body elementin sisälle. Sitten avaamme kommentit.txt tiedoston, ”append” käsittelyyn, eli lisäämme loppuun. Avaus tapahtuu fopen() funktiolla, ja tiedosto tarvitsee ”handlerin”, elikkä mihin muuttujaan osoitin tallennetaan: $fp = fopen(”kommentit.txt”, a); Lopuksi tiedosto täytyy myös sulkea: fclose($fp);

Kirjoittaaksemme tiedostoon käytetään fwrite(); funktiota, eli lisätään muotoilematta nimi & kommentti: fwrite($fp, $_POST['nimi'] . "\r\n" . $_POST['kommentti'] . "\r\n");

\r\n vaihtaa riviä, ja . ”\r\n” ., pisteet on sen takia että se erottelee ”seuraavaan syötteeseen”, ja on pakollinen samaan aikaan muuttujia että valmiiksi koodiin kirjoitettua tekstiä syöttäessä kaikissa funktioissa.

Avaa nytten kommentit.txt ja siellä pitäisi näkyä seuraavaa:

Nytten halutaan siihen muotoilut, joten tyhjennä tiedosto.

Add.php näyttää tällä hetkellä tältä:

<html>

<head>

                      <title>Kommentin lisäys</title>

<body>

 

<?php // add.php Jeesi.info vieraskirja tutoriaalista

 

$fp = fopen("kommentit.txt", a);                 // A niinkuin append

fwrite($fp, $_POST['nimi'] . "\r\n" . $_POST['kommentti'] . "\r\n");

fclose($fp);

 

 

?>

 

</body>

</html>

Nytten lisätään muotoiluja. Ota tän hetkinen fwrite pois, ja sitten tehdään ensin muuttuja ”teksti” johonka laitetaan käyttäjän kommentti ja nimi, muotoilujen kanssa:

$teksti = "\r\n\r\n" . 'Kuka:<br /> <span style="background-color: lightgrey;">' . $_POST['nimi'] . '</span><br />' . "\r\n";

$teksti .='Kommentti:<br /><span style="background-color: lightblue;">' . $_POST['kommentti'] . '</span><br /><br />' . "\r\n";

 

fwrite($fp, $teksti);

Yllä olevassa on käytetty ” sekä ’ syötteen erotteluun sen takia että kummatkin merkit toimivat hieman erilailla, ” merkkien sisäpuolella oleva PHP käsittelee, ja \r\n on rivin vaihto (Windowsissa, Linuxissa jne. riittää pelkkä \n).

Jonka lisäksi haluamme myös nähdä syötteen, joten lisää vieraskirja.php:n formin alle:

<?php @include(’kommentit.txt’); ?>, edessä on @ merkki sen takia että se ”hiljentää” varoitukset ja virheet, ja mikäli meillä ei ole jo kommentit.txt:tä se aiheuttaisi virhe ilmoituksen.

Vieraskirja.php:mme näyttää tältä selaimessa:

Se toimii! Vielä pitää kuitenkin lisätä pari varmistusta ja ilmoitusta add.php:n.

Ettei käyttäjä syöttäisi PHP koodia meidän täytyy poistaa <? merkinnät. Se onnistuu hyvin yksinkertaisesti: $teksti = str_replace('<?', '', $teksti);

Str_replace() funktio siis korvaa tekstin toisella, ensimmäinen parametri on mikä korvataan, toinen millä, ja kolmas mistä.

Lisäksi haluamme lisätä ilmoituksen onnistuneesta lisäyksestä.

pistä fwrite() funktion eteen $write =, joten siitä tulee $write = fwrite($fp, …. jonka jälkeen lisätään IF-lauseke, eli ”mikäli näin niin sitten” à if ($write != 0) echo ”Kommentti lisätty onnistuneesti!”;

Emme tee nytten sen kummempaa tarkistusta, tuo saa riittää.

Fwrite funktio palauttaa kirjoitettujen tavujen määrän, joten yksinkertaisesti tarkistetaan, ettei se vaan olisi 0. Tämä ei ole täydellinen tapa, mutta välttää.

Lopuksi koodimme näyttää tältä:

Vieraskirja.php:

<html>

<head>

                      <title>Vieraskirja PHP:llä - Jeesi.info tutoriaali</title>

</head>

<body>

 

<form action="add.php" method="post">

 

Nimesi:<input type="text" name="nimi" /> <br />

 

Kommentti:<br />

<textarea name="kommentti">

</textarea>

<br />

 

<input type="submit" value="Lisää" />

 

</form>

Jätetyt viestit:<br />

<?php @include('kommentit.txt'); ?>

</body>

</html>

Add.php:

<html>

<head>

                      <title>Kommentin lisäys</title>

<body>

 

<?php // add.php Jeesi.info vieraskirja tutoriaalista

 

$fp = fopen("kommentit.txt", a);                 // A niinkuin append

 

 

$teksti = "\r\n\r\n" . 'Kuka:<br /> <span style="background-color: lightgrey;">' . $_POST['nimi'] . '</span><br />' . "\r\n";

$teksti .='Kommentti:<br /><span style="background-color: lightblue;">' . $_POST['kommentti'] . '</span><br /><br />' . "\r\n";

 

$teksti = str_replace('<?', '', $teksti);

 

$write = fwrite($fp, $teksti);

 

if ($write != 0) echo "Kommentti lisätty onnistuneesti!";

 

 

fclose($fp);

 

 

?>

 

</body>

</html>

- Aleksi U.