Todella yksinkertainen vieraskirja, joka toimii FlatFile systeemillä ja hyödyntää PHP:n Serialize() ja Unserialize() -funktioita, joiden avulla saadaan tallennettua muuttujia tiedostoon byte-streamina eikä muuttujien tietotyyppejä menetetä.
Todella kätevä tapa tallentaa tietoa tiedostoihin.
Vieraskirja tukee seuraavia BBCode tägejä:
[b] [i] [u] [s] [url=http://jope.psykoosi.org/]Linkki[/url] [url]http://jope.psykoosi.org[/url] [url=mailto:jope@psykoosi.org]Mailia mulle[/url] [blockquote] [code] [pre]
<?php /* * Guestbook is coded by Joni Järvinen a.k.a Jope <jope@psykoosi.org> * More scripts can be found at http://jope.psykoosi.org/ (Finnish site) * * This is a simple guestbook built on flatfile system so there is no * need for SQL database. * * Guestbook is very easy to use; just include this page into some of * your pages and it will automatically work. * * This guestbook could be optimized a little. For example when I * read data into array from datafile: * $data = Unserialize(Implode("", File($datafile))); -> * $data = Unserialize(File_Get_Contents($datafile)); * * This is because file_get_contents() is pretty new function and * everyone doesn't have it so you can edit the script by yourself. * * Usage (Right way to use this guestbook): * * <?php * Ob_Start(); * ?> * <html> * <head><title>My guestbook</title></head> * <body> * <?php include ("gusetbook.php"); ?> * </body> * </html> * <?php * $data = Ob_Get_Contents(); * Ob_End_Clean(); * echo $data; * ?> * */ // File where guestbooks data is saved. (no need to change this) $datafile = "guestbook.dat"; // Do NOT edit unless you know what you're doing! $Qstring = preg_replace("/&?act=(write|save|read)/i", "", $_SERVER["QUERY_STRING"]); $address = ($Qstring == "") ? "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"] : "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"] . "?" . $Qstring; if ($_GET["act"] == "write") { echo "<h2>Kirjoita vieraskirjaan!</h2>"; if ($_GET["error"] == 1) { echo "<font color=\"#FF0000\">Täytä vähintään nimi ja viesti!</font>\n"; } if ($Qstring == "") { echo "<form action=\"$address?act=save\" method=\"POST\">"; } else { echo "<form action=\"$address&act=save\" method=\"POST\">"; } echo "<small><b>Nimi:</b></small><br> <input type=\"text\" size=\"25\" maxlength=\"50\" name=\"nimi\"><br> <br> <small><b>Kotisivut:</b></small><br> <input type=\"text\" size=\"25\" maxlength=\"50\" name=\"kotisivut\" value=\"http://\"><br> <br> <small><b>Sähköposti:</b></small><br> <input type=\"text\" size=\"25\" maxlength=\"50\" name=\"email\"><br> <br> <small><b>Viestisi:</b></small><br> <textarea rows=\"6\" cols=\"36\" name=\"viesti\"></textarea><br> <br> <input type=\"submit\" value=\" Tallenna \"> <input type=\"checkbox\" name=\"bbcode\" value=\"disabled\"> Poista BBcode käytöstä tässä viestissä </form>"; } else if ($_GET["act"] == "save") { if (!file_exists($datafile)) { if (!@touch($datafile)) { die ("Couldn't create datafile!"); } if (!@chmod($datafile, 0777)) { die ("Couldn't chmod datafile!"); } } if ($_POST["nimi"] != "" AND $_POST["viesti"] != "") { $data = Unserialize(Implode("", File($datafile))); $bbcode = ($_POST["bbcode"] == "disabled") ? "disabled" : "enabled"; $data[] = Array( "nimi" => $_POST["nimi"], "kotisivut" => $_POST["kotisivut"], "email" => $_POST["email"], "viesti" => $_POST["viesti"], "aika" => time(), "bbcode" => $bbcode ); $fp = @fopen($datafile, "w"); if ($fp) { fwrite ($fp, Serialize($data)); fclose ($fp); if ($Qstring == "") { Header ("Location: $address?act=read"); } else { Header ("Location: $address&act=read"); } } else { die ("Couldn't open datafile!"); } } else { if ($Qstring == "") { Header ("Location: $address?act=write&error=1"); } else { Header ("Location: $address&act=write&error=1"); } } } else if ($_GET["act"] == "read") { if (file_exists($datafile)) { $data = Unserialize(Implode("", File($datafile))); if (sizeof($data) > 0 AND Is_Array($data)) { echo "<h2>Lue vieraskirjaa</h2>"; $data = Array_reverse($data); for ($i = 0; $i < sizeof($data); $i++) { $nimi = StripSlashes(HtmlEntities($data[$i]["nimi"])); $kotisivut = StripSlashes(HtmlEntities($data[$i]["kotisivut"])); $email = StripSlashes(HtmlEntities($data[$i]["email"])); $viesti = ($data[$i]["bbcode"] == "disabled") ? StripSlashes(HtmlEntities($data[$i]["viesti"])) : StripSlashes(BBcode(HtmlEntities($data[$i]["viesti"]))); $aika = Date("d.m.Y / H:i:s", $data[$i]["aika"]); echo "<b>$nimi @ $aika (<a href=\"$kotisivut\">WWW</a> | <a href=\"mailto:$email\">E-mail</a>)</b> <hr>". nl2br($viesti)." <br> <br> <br>"; } } else { echo "Ei viestejä"; } } else { echo "Ei viestejä"; } } else { echo "<h2>Vieraskirja</h2>"; if ($Qstring == "") { echo "<center><br><br><br><br><a href=\"$address?act=write\">Kirjoita vieraskirjaan</a> | <a href=\"$address?act=read\">Lue vieraskirjaa</a></center>"; } else { echo "<center><br><br><br><br><a href=\"$address&act=write\">Kirjoita vieraskirjaan</a> | <a href=\"$address&act=read\">Lue vieraskirjaa</a></center>"; } } function BBcode ($data) { $data = preg_replace("/\[(\/?)(b|u|i|s|strike|blockquote|code|pre)\]/i", "<$1$2>", $data); $data = preg_replace("/\[url\](.*)\[\/url\]/i", "<a href=\"$1\" target=\"_blank\">$1</a>", $data); $data = preg_replace("/\[url=(.*)\](.*)\[\/url\]/i", "<a href=\"$1\" target=\"_blank\">$2</a>", $data); return $data; } ?>
Ihan hienolta näyttää..
Hyvältä toi ainaki näyttää
pieni mutta pippurinen ;)
esimerkkisivut olis kivoja
hjuva, pistä toi kuvaukseen nii sen löytää paremmin.
Ei pysty kun toi editointi kusee niin pahasti.. se tekee ton vieraskirjan formin tohon :))
siis...?
textarea hajoo?
Kommentointi voisi olla suomeksi, koska koodivinkit tuntuvat kopioiduilta kun kommentit ovat englanniksi. Mutta jos todella hallitsee englannin paremmin kuin suomen niin antaa palaa vaan.
jep, joistain englannin kielisistä selityksistä voi olla vähän vaikeaa saada selkoa. :P
No jaa.. voisi kyllä alkaa kommentoimaan suomeksi. Olen nyt kirjoitellut kommentit englanniksi sen varalta jos joskus laitan skriptini englannin kieliselle sivustolle.
Mitäs tehdään jos se valittaa mbnetissä could open datafile?
Laitetaan tiedostolle chmod 666 tai 664 kunhan se toimii.
Sen pitäisi onnistua MBnetin omalla kotisivumuokkaimella, jossa on kohta muokkaa tiedoston oikeuksia..
mä kokeilin tota mun mbnetin kotisivuille, valittaa Couldn't create datafile! mitä pitäs tehä??
Hei!
Mistä tuossa ylhäällä olevasta koodista vaihdetaan taustaväriä? Vai täytyykö siihen luoda joku erillinen koodi millä sitä vaihdellaan?
Itse sä sen taustavärin määrität sillä sivulla mihin vieraskirjan liität.
Aivan juu, voihas vitsi... mitä mahdoin ajatella!
Koodi toimii yksinään hyvin, mut heti kun määritän jonkun taustavärin, ni johan ongelmat alko. Jos liitän suoraan johonkin sivuun niin virheitä rupeaa tulemaan aina sillon kun kirjoittaa vieraskirjaan tuleen ilmoitus! Huh,hu!
Warning: Cannot modify header information - headers already sent by (output started at E:\sivut\kansio\vieraskirja.php:10) in E:\sivut\kansio\vieraskirja.php on line 105
Selkeä errori.. laita vaikka ihan sivun ekaks riviks <?php ob_start(); ?> ja ihan vikaks riviks <?php ob_end_flush(); ?>
Selkeä errori.. laita vaikka ihan sivun ekaks riviks <?php ob_start(); ?> ja ihan vikaks riviks <?php ob_end_flush(); ?>
En kyllä saanut toimimaan tuollakaan koodilla. Pelkkä php koodi liitettynä tyhjään taulukkoon toimii hyvin, ei mitään varoituksia. Ei auta ku opiskella... kyllä se vielä joskus toimii!
Onkohan tää kopioitu vaan jostain kun kommentit eng.? Tai no jos tykkää tehä enkuks :/
Höm... Kuvauksessa olevat tagit tekee tekstin vähän erilaiseksi kuin yleensä on
Gwaur, reportoin siitä antille.
Ja Jen0va miks vitussa kopioisin koodia jotain? Tää on alunperin ollu mun enkunkielisillä sivuilla jotka myöhemmin muutettiin suomeks.
Aina kun kokeilen tuota vieraskirjaa tulee teksti "Couldn't create datafile!". Miten tuon saa toimimaan. Käytän MBnetin kotisivumuokkainta.
Mullakaan ei alukis toiminut herjas tota "Couldn't create datafile!", mutta kun tein tiedoston guestbook.dat ja heitin sille 666 chmodit niin rupes jopa toimimaan =)
Toimii hyvin myös keskellä koodia.
Kannattaa tarkistaa, että <?php ob_start(); ?> :n edessä ei ole tyhjiä rivejä eikä välejä. Mulla kiikasti ensin siitä.
Aika kivan näkönen vieraskirja. Hyvin ainakin toimii :P hyvä odys!
mitenkähän saan vieraskirjaan näkymään muutkin tiedot kuin nimen ,email osoitteen ja www osoitteen. Kaikki kyllä tallentuu dat tiedostoon mutta miten koodia pitää muuttaa että ne näkyy siellä vieraskirjassa?
Osaisiko joku selittää noobielle, että kuinka tuohon lisätään noita BBCode tageja lisää? Esimerkiksi joku
[img]http://www.kuvanosoite.fi/kuva.jpg[/img]
yritin sinne perään bbcode hommaan missä näin ne muutkin niin lisätä tälläisen koodipätkän (mikä ei toiminut, koska kuvaa ei näy):
$data = preg_replace("/\[img=(.*)\](.*)\[\/img\]/i", "<IMG SRC=\"$1\">", $data);
Laitoin tän kotisivuilleni, kunnes kerkeen koodata ite oman. www.square35.shyper.com
Tein nopeustestin tietokannallesi, sekä vertasin muihin vaihtoehtoihin:
file / explode - Keskimäärin 68 kierrosta per sekunti file / unserialize - Keskimäärin 67 kierrosta per sekunti file_get_contents / unserialize - Keskimäärin 17 kierrosta per sekunti
Näyttää siltä että käyttämäsi tietokantatyyppi on todella hidas verrattuna esimerkiksi rivi per rivi tallennettuun tietoon joka sitten puretaan explodella.
Näiden tilastojen valossa en suosittele tallentamaan koko viestitaulukkoa yhdelle riville.
Tällä hetkellä vieraskirjani käyttää File / unserializea.
$data = Unserialize(Implode("", File($datafile)));
Mikäs tuo sitten on? o_O
Edit:
Ai niin, käytätkin file / unserialize / implode, mutta ajaa kyllä saman asian kuin file_get_contents / unserialize
Olen ihan noob, joten kysyn hassuja...
Mulla herjas myös "Couldn't create datafile!" joten pitäisi
ilmeisesti tehdä joku database että toimisi(mutta miten), auttakkee minua.
Chmodit ompi väärin. Ei voi luoda tiedostoja.
lainaus:
Olen ihan noob, joten kysyn hassuja...
Mulla herjas myös "Couldn't create datafile!" joten pitäisi
ilmeisesti tehdä joku database että toimisi(mutta miten), auttakkee minua.
Mulle sano samat sanat?
Mitäs pitäs tehdä?
Jotain vikaa kyllä löytyy esim se että jos menee lukemaan vieraskiraa ei pääse linkillä pois siitä
Onko minkäänlaista mahdollisuutta vastata viesteihin?
Olisi kiva ominaisuus.
Mulla herjaa
Warning: Cannot modify header information - headers already sent by (output started at /home/rax/public_html/muille/***/index.php:20) in /home/rax/public_html/muille/***/guestbook.php on line 98
Ja rivi 98:
Header ("Location: $address&act=read");
EDIT: Vaihoin sen 98:n tälläseks:
echo "Kiitos että kirjoitit vieraskirjaamme! <a href=\"index.php?p=guestbook&act=read\">Lue viestejä</a>";
nii lopetti herjaamisen
Otin käyttöön vieraskirjan, mutta php on minulle aivan uusi tuttavuus. Koitin korjata vieraskirjaan tullutta viestiä (kirjoittajan pyynnöstä) muuttamalla viestin tekstiä guestbook.dat tiedostossa. Tallensin korjatun version ja latasin nettiin, mutta tämän jälkeen mitkään viestit eivät enää vieraskirjassa näkyneet. Missä vika?
Entä jos vieraskirjaan tulee viesti, minkä haluaisin poistaa. Miten se tapahtuu vai katoavatko kaikki viestit tällöinkin?
Kuten sanottu, en ole ennen php:tä käyttänyt eli voi hyvin olla, että en ole hoksannut kaikkea, mitä olisi pitänyt. Kaikki neuvot otetaan siis kiitollisena vastaan!
Minusta jotenkin huvittavaa, että kommentointi on englanniksi, siltä varalta, että laittaisi koodin englanninkieliselle sivulle. Jouduthan koodia muokkaamaan kuitenkin, kun laitat kaikki suomenkieliset "Kirjoita uusi viesti" - tekstit "Write a new message"iksi. Ei olisi iso homma tehdä kommentointia suoraan suomeksikin, ja muuttaa sitten.
Wee kirjoitti:
Minusta jotenkin huvittavaa, että kommentointi on englanniksi, siltä varalta, että laittaisi koodin englanninkieliselle sivulle. Jouduthan koodia muokkaamaan kuitenkin, kun laitat kaikki suomenkieliset "Kirjoita uusi viesti" - tekstit "Write a new message"iksi. Ei olisi iso homma tehdä kommentointia suoraan suomeksikin, ja muuttaa sitten.
Itsekin huvittelen samaa juttua, nämä mokomat englannin kielellä kirjoittajat on joko: a) kopioinneet koodin jostain vaikka toisin väittävätkin b) haluavat muuten vain leveillä lontoon kielen taidoillaan
Minua alkaa vituttamaan se jostakin syystä. Ja ettei kukaa käsittäis viestiäni väärin sanon, että itse en osaa lontoota paskankaa vertaa.
Lisäämällä tämän tonne BBcode funktioon saa värit käyttöön
$data = preg_replace("/\[color=(red|yellow|green|blue|white)\]/i","<font color=\"$1\">",$data); $data = preg_replace("/\[(\/?)color\]/i","<$1font>",$data);
ja tällä saa eri kokoista tekstiä
$data = preg_replace("/\[size=(-3|-2|-1|1|2|3|4|5|6|7|8|)\]/i","<font size=\"$1\">",$data); $data = preg_replace("/\[(\/?)size\]/i","</font>",$data);
http://rauh.0009.ws/vieraskirja.php
Notice: Undefined index: act in /www/0009.ws/r/a/u/rauh/htdocs/vieraskirja.php on line 69
Notice: Undefined index: act in /www/0009.ws/r/a/u/rauh/htdocs/vieraskirja.php on line 94
Notice: Undefined index: act in /www/0009.ws/r/a/u/rauh/htdocs/vieraskirja.php on line 134
Aihe on jo aika vanha, joten et voi enää vastata siihen.