| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
TextDataBaseDJ-Dew 11.03.05 16:25 Yksinkertainen(?) tekstitietokanta. Ainakin itsellä tuli tarpeeseen kun ei ollut MySQL:ää saatavilla, tosin nyt sellainen löytyy...
***** functions.php ***** <?php $polku = "/home/käyttäjä/kanta/"; # Hakemisto, johon kannat tallennetaan palvelimella. "/"-merkki loppuun # ja chmodit 777 kans tolle hakemistolle # Luo uuden tietokannan. Parametrit: Tietokannan nimi function tdb_create_db( $nimi ) { global $polku; if( @is_dir( $polku.$nimi ) ) # Jos kansio on jo olemassa, die( "<b>Error:</b> Can't create db. Db <b>".$nimi."</b> already exists" ); # heitetään errori elseif( @mkdir( $polku.$nimi,0777 ) ) # Luodaan uusi kansio, jos oikeudet riittävät, return true; else die( "<b>Error:</b> Can't create db. Permission denied." ); # muuten errori. } # Poistaa tietokannan. Parametrit: Tietokannan nimi function tdb_delete_db( $nimi ) { global $polku; if( !@is_dir( $polku.$nimi ) ) # Jos kansiota ei ole, die( "<b>Error:</b> Can't delete db. Db <b>".$nimi."</b> not exists" ); # heitetään errori, elseif( @unlink( $polku.$nimi ) ) # jos kansio on olemassa, poistetaan se return true; else # Jos poistaminen ei onnistunut, return false; # palautetaan false. } # Valitsee tietokannan. Parametrit: Tietokannan nimi function tdb_select_db( $nimi ) { global $polku; if( tdb_db_exists( $nimi ) ) # Jos tietokanta on olemassa, return $polku.$nimi.'/'; # "valitaan" se, else # muuten, die( "<b>Error:</b> Can't select db. Db <b>".$nimi."</b> not exists" ); # heitetään errori. } # Kertoo, onko tietokantaa olemassa. Parametrit: Tietokannan nimi function tdb_db_exists( $nimi ) { global $polku; if( @is_dir( $polku.$nimi ) ) # Jos kansio on olemassa, return true; # palautetaan true, else # jos ei, return false; # palautetaan false. } # Palauttaa koko sarakkeen taulukkona(array). Parametrit: Sarakkeen nimi, Valittu taulu function tdb_get_col( $sarake, $nimi ) { @include( $nimi.".tdb" ); if( $solu && $solu[$sarake] ) # Jos sarake on olemassa, return $solu[$sarake]; # palautetaan se taulukkona (array) } # Palauttaa rivin/rivit taulukkona(array). Parametrit: Rivinumero(n/*), Valittu taulu, Ehdot(esim. "kaupunki == espoo") function tdb_get_rows( $id, $nimi, $ehdot = false ) { @include( $nimi.".tdb" ); if( $solu ) { foreach ( $solu as $vara => $ar1 ) { foreach ( $ar1 as $i => $vara2 ) { if( $i == $id || $id == "*" ) { if( $ehdot ) { # Jos on ehdot, $ehdot1 = explode( " == ", $ehdot ); # hajotetaan ne "==" merkin kohdalta if( strtolower( $solu[$ehdot1[0]][$i] ) == strtolower( $ehdot1[1] ) ) # Jos solun arvo on sama kuin ehto, $col[$i][$vara] = stripslashes( str_replace( "<_br_>","<br />",htmlspecialchars( $solu[$vara][$i] ) ) ); # lisätään se uuteen taulukkoon. } else { # Jos ei ole ehtoja, $col[$i][$vara] = stripslashes( str_replace( "<_br_>","<br />",htmlspecialchars( $solu[$vara][$i] ) ) ); # lisätään kaikki solut uuteen taulukkoon } } } } if( $col ) { $lll=0; foreach ( $col as $val ) { # Järjestetään taulukko $col1[$lll] = $val; $lll++; } if( count( $col1 ) == 1 ) # Jos vain yksi tulos, return $col1[0]; # palautetaan tavallinen taulukko, else # muuten, return $col1; # palautetaan moniulotteinen taulukko. } else { return false; } } else return false; } # Kirjoittaa tietokantaan. Tiedot voi syöttää myös taulukkona(array). Parametrit: Kirjoitettava data, Sarake/Sarakkeet, Valittu taulu function tdb_put( $data, $sarake, $nimi ) { if( file_exists( $nimi.".tdb" ) ) { include( $nimi.".tdb" ); $id = tdb_count_rows( $nimi ); # Lasketaan uusi id uudelle riville if( is_array( $data ) && is_array( $sarake ) ) { # Jos kirjoitettava data ja sarake ovat taulukoita $data1 = array(); # Luodaan uusi taulukko $sarake1 = array(); # Ja toinen sellainen foreach ( $data as $tmp ) { # luupataan kirjoitettava data $lask++; $data1[$lask] = stripslashes( str_replace( array( "\r\n", "\n" ), "<_br_>",$tmp ) ); } $lask = 0; foreach ( $sarake as $tmp ) { # luupataan sarakkeet $lask++; $sarake1[$lask] = $tmp; } $lask = 0; foreach( $data1 as $tmp ) { # luupataan sarakkeet ja data yhteen $lask++; $solu[$sarake1[$lask]][$id] = $data1[$lask]; } } else { # Jos tietoja ei ole annettu taulukkona $solu[$sarake][$id] = stripslashes( str_replace( array( "\r\n", "\n" ), "<_br_>",$data ) ); # Kirjoitetaan riville vain yksi solu } $fp = fopen( $nimi.".tdb", "w" ); # avataan tiedosto flock( $fp, LOCK_EX ); # Lukkoon fwrite( $fp, "<?php\n\n" ); # Kirjotetaan php-alkutagi tiedostoon fwrite( $fp, "\$solu = ".var_export( $solu,true ) ); # Kirjotetaan kaikki tiedot tiedostoon fwrite( $fp, "\n?>" ); # Kirjotetaan php-lopputagi tiedostoon flock( $fp, LOCK_UN ); # lukko auki fclose( $fp ); # Suljetaan tiedosto } else { # Ja jos koko tiedostoa ei ole olemassa, heitetään errori $deebee = explode( "/", $kanta ); die( "<b>Error:</b> Can't write to table. Table <b>".$nimi."</b> not exists <b>in db ".$deebee[count($deebee)-1]."</b>" ); } } # Luo uuden taulun tietokantaan. Parametrit: Taulun nimi, Avattu tietokanta function tdb_create_table( $nimi, $kanta ) { if( !file_exists( $kanta.$nimi.".tdb" ) ) { # Jos tiedostoa ei löydy, touch( $kanta.$nimi.".tdb" ); # luodaan sellainen chmod( $kanta.$nimi.".tdb", 0777 ); # ja oikeudet kuntoon } else { # Jos tiedosto on olemassa, $deebee = explode( "/", $kanta ); die( "<b>Error:</b> Can't create table. Table <b>".$nimi."</b> already exists <b>in db ".$deebee[count($deebee)-1]."</b>" ); # heitetään errori. } } # Poistaa taulun tietokannasta. Parametrit: Taulun nimi, Avattu tietokanta function tdb_delete_table( $nimi, $kanta ) { if( @unlink($kanta.$nimi.".tdb" ) ) { # Yritetään poistaa tiedosto return true; } else { # Jos ei onnistunut, $deebee = explode( "/", $kanta ); die( "<b>Error:</b> Can't delete table. Table <b>".$nimi."</b> not exists <b>in db ".$deebee[count($deebee)-1]."</b>" ); # heitetään errori. } } # Valitsee taulun tietokannasta. Parametrit: Taulun nimi, Valittu tietokanta function tdb_select_table( $nimi, $kanta ) { if( @is_file( $kanta.$nimi.".tdb" ) ) { # Jos tiedosto löytyy, return $kanta.$nimi; # "valitaan" se } else { # Muuten, $deebee = explode ("/", $kanta ); die( "<b>Error:</b> Can't select table. Table <b>".$nimi."</b> not exists <b>in db ".$deebee[count($deebee)-1]."</b>" ); # Heitetään errori. x) } } # Kertoo onko taulua olemassa tietokannassa. Parametrit: Taulun nimi, Valittu tietokanta function tdb_table_exists( $nimi, $kanta ) { if( file_exists( $kanta.$nimi.".tdb" ) ) { # Jos tiedosto löytyy return true; # palautetaan true } else # muuten, return false; # false. } # Laskee sarakkeet taulusta. Parametrit: Valittu taulu function tdb_count_cols( $nimi ) { @include( $nimi.".tdb" ); if( $solu ) return count( $solu ); } # Laskee rivit taulusta. Parametrit: Valittu taulu, Sarake = false function tdb_count_rows( $nimi, $sarake = false ) { @include( $nimi.".tdb" ); if( $solu ) { if( $sarake ) { return count( $solu[$sarake] ); # Jos halutaan laskea vain yhden sarakken rivit. } else { # muuten $arr = array(); foreach( $solu as $key => $value ) { foreach( $solu[$key] as $avain => $arvo ) { $arr[] = $avain; } } @sort( $arr, SORT_NUMERIC ); return end( $arr ) + 1; } } else return 0; } # Copyright © Valtzu aka D.J-Dew ?> ***** Esimerkki ***** <?php include( "functions.php" ); if( !tdb_db_exists( "vieraskirja" ) ) # Jos kantaa "vieraskirja" ei löydy, tdb_create_db( "vieraskirja" ); # luodaan sellainen. $kanta = tdb_select_db( "vieraskirja" ); # Valitaan kanta "vieraskirja". if( !tdb_table_exists( "viestit", $kanta ) ) # Jos taulua "viestit" ei löydy valitusta kannasta, tdb_create_table( "viestit", $kanta ); # luodaan sellainen. $taulu = tdb_select_table( "viestit", $kanta ); # Valitaan taulu "viestit" valitusta tietokannasta($kanta). if( $_GET['do'] == "write" ) { # Jos halutaan kirjoittaa, tdb_put( array( stripslashes( $_POST['nimi'] ), str_replace("\n", "<br />", stripslashes( $_POST['viesti'] ) ) ), array( "nimi", "viesti" ), $taulu ); # kirjoitetaan valittuun tauluun($taulu) nimi ja viesti. header( "Location: ".$_SERVER['PHP_SELF'] ); # Ohjataan käyttäjä takas } $rivit = tdb_get_rows( "*", $taulu ); # Valitaan kaikki rivit valitusta taulusta($taulu) if( $rivit ) { # Jos rivejä, foreach ( $rivit as $msg ) { # luupataan ne läpi echo '<b>Nimi:</b> '.$msg['nimi']; # tulostetaan nimi echo '<br /><b>Viesti:</b><br />'.$msg['viesti'].'<br /><br />'; # ja viesti. } } echo '<br /><br /><form action="?do=write" method="post">'; # Tulostetaan kirjoituslomake echo 'Nimi: <input type="text" name="nimi"><br />'; echo 'Viesti: <br /><textarea name="viesti"></textarea><br />'; echo '<input type="submit" value="Lähetä">'; echo '</form>'; # ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! # EDIT 20.3.2005: Koodia siistitty! mm. sisennykset yms... # ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ?> DJ-Dew 16:40 11.3.05 Esimerkkiä osoitteessa http://www.mustikkarinne.net/~valtzu/kanta/ Ztane 17:02 11.3.05 hohhoijaa... mites konkurrenttius? Tuun sun sivuille ja nakkaan pari kertaa reloadia nii se räjäthtää kuitenki. editoitu: 17:50 11.3.05 T.M. 17:35 11.3.05 PHP:n w-kirjoitusmoodia ei voi ohittaa siten, ettei reloadin näpäyttely hajota tiedoston rakennetta kun siihen kirjoitetaan tihein aikavälein. Jos voi, niin kertokaa ihmeessä miten. --- Koodista sen verran, että sisennökset voisi laittaa kuntoon, sekä olla käyttämättä if-else-lauserakenteita joissa on kaarisulkeet jommassa kummassa, esim funktiossa tdb_select_table() on else-lauseessa kaarisulkeet, mutta ei if-lauseessa -> epäselvää lukea, ja vaikeampi muokata. Ja noi settype() jutut voi korvata ihan hyvin niillä muuttujaan asetuksilla: settype($data1,"array"); ...joka on huomattavasti selkeämpää.-> $data1 = array(); Taulukon tallentamiseen kannattaa käyttää serialize() funktiota, joka on huomattavasti kätevämpi kuin explode. Edit: Kappas... tallennat tiedostoon PHP-koodia jossa noi taulukot on, joka taas ei ole kovin mukava tapa turvallisuuden kannalta. --- Anteeksi taas kerran jos valitan (joidenkin mielestä) turhaan. DJ-Dew 18:46 11.3.05 Muutin noi if-else jutut T.M.:n mielestä selvemmiksi. Settype-jutskaa en halua muuttaa, mun mielestä settype($data1,"array") on siistimpi ku $data1 = array(). Sanoppas joku ohjelma Linuxille(Mandrake), jolla saa sisennykset kuntoon, ite en jaksa alkaa sisentämään, Käytin tossa KWriteä. Jos pelkää turvallisuutta ni .htaccess suojaus varmaan auttaa.... Pakkohan sitä jonkun on valittaa, että oppii jotakin. :) Turatzuro 19:48 11.3.05 Kannattaisi varmaan heittää luokkaan koko hoito, niiin voisi esimerkiksi globaaleilla heittää vesilintua? Muutenkin olisi mielestäni selkeämpi... kerubi 20:16 11.3.05 1) Luokkaan? Suosittelen! 2) Tiedostoon kirjoittamisessa voisi käyttää flock() -lukitusta mainittujen päällekkäistallennusten ehkäisemiseksi. Voisi jopa ajatella että kirjoitettavan tavaran tallentaminen yhdellä fwrite() -kutsulla nopeuttaisi sekä skriptiä että lukituksen vapauttamista. 3) Kuten T.M. mainitus, settype()a on käytetty turhaan ja nähdäkseni myös virheellisesti: ensimmäinen parametrin tulisi manuaalin mukaan olla viittaus olemassaolevaan muuttujaan... eipä taida virheraportointi olla oikealla tasollaan taas jälleen kerran... 4) Kätevällä funktiolla nimeltänsä var_export() saat taulukon validina php-muotoiluna jonka voit sitten tallentaa php-tagien sisällä datatiedostoosi... Toki tallennustavassa on turvallisuusriskejä, muttei moisia joita ei voitaisi hyvällä käyttäjädatan tarkistuksilla ja merkkimuunnoksilla hoitaa. Itse tunnustan myös tämäntyylistä ratkaisua käyttäneeni. DJ-Dew 10:26 12.3.05 Mitä hyötyä tämän laittamisesta luokkaan? flockin lisään jonain päivänä.... editoitu: 10:50 14.3.05 Akiro 10:50 14.3.05 T.M. kirjoitti: PHP:n w-kirjoitusmoodia ei voi ohittaa siten, ettei reloadin näpäyttely hajota tiedoston rakennetta kun siihen kirjoitetaan tihein aikavälein. Jos voi, niin kertokaa ihmeessä miten. http://fi.php.net/flock editoitu: 14:00 14.3.05 T.M. 13:52 14.3.05 Juuh, kyllä minä tuon tiesin, mutta kun se ei toimi. <?php Tämäkään ei toimi (koitin mbnetissä)$fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX)) { // do an exclusive lock fwrite($fp, "Write something here\n"); flock($fp, LOCK_UN); // release the lock } else { echo "Couldn't lock the file !"; } fclose($fp); ?> flock() is not supported on antiquated filesystems like FAT and its derivates and will therefore always return FALSE under this environments (this is especially true for Windows 98 users). Joten:<?php Joka ei tietenkään toimi.$fp = fopen("/tmp/lock.txt", "w+"); flock($fp, LOCK_EX)); // do an exclusive lock fwrite($fp, "Write something here\n"); flock($fp, LOCK_UN); // release the lock fclose($fp); ?> Vai onkos jotain muita taikatemppuja jolla tuon saa toimimaan niin kuin pitää (myös wintoosassa) ? DJ-Dew 16:33 14.3.05 toi var_dump tulostaa koko taulukon näytölle, muttei tallenna sitä... :( DJ-Dew 16:45 14.3.05 katos toinen parametri muutti asian... lisäsin sen koodivinkkiin, samoin flockin myös vaikken tiedä auttaako se mitään.... Ceez 21:50 14.3.05 [id] => <br />Arvo:<br /><br />Array<br />(<br /> [0] => Array<br /> (<br /> [id] => 123<br /> [nimi] => YritysYksi OY<br /> [osoite] => Kojukuja 21 b<br /> [kunta] => Nakkila<br /> )<br /><br /> [1] => Array<br /> (<br /> [id] => <br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [2] => Array<br /> (<br /> [id] => <br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [3] => Array<br /> (<br /> [id] => <br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [4] => Array<br /> (<br /> [id] => a<br /> [nimi] => a<br /> [osoite] => a<br /> [kunta] => a<br /> )<br /><br /> [5] => Array<br /> (<br /> [id] => testi<br /> [nimi] => 2<br /> [osoite] => 3<br /> [kunta] => 4<br /> )<br /><br /> [6] => Array<br /> (<br /> [id] => testi<br /> [nimi] => 2<br /> [osoite] => 3<br /> [kunta] => 4<br /> )<br /><br /> [7] => Array<br /> (<br /> [id] => a<br /> [nimi] => b<br /> [osoite] => c<br /> [kunta] => d<br /> )<br /><br /> [8] => Array<br /> (<br /> [id] => sniper<br /> [nimi] => Sape<br /> [osoite] => Tie<br /> [kunta] => Jyväskylä<br /> )<br /><br /> [9] => Array<br /> (<br /> [id] => fdg<br /> [nimi] => dfgd<br /> [osoite] => fgdfgfd<br /> [kunta] => gf<br /> )<br /><br /> [10] => Array<br /> (<br /> [id] => id<br /> [nimi] => nimi<br /> [osoite] => osoite<br /> [kunta] => kunta<br /> )<br /><br /> [11] => Array<br /> (<br /> [id] => 1336<br /> [nimi] => omglol<br /> [osoite] => noob<br /> [kunta] => wtf<br /> )<br /><br /> [12] => Array<br /> (<br /> [id] => rrrrrrrrrrrrr<br /> [nimi] => rrrrrrrrrrrrr<br /> [osoite] => rrrrrrrrrrrrrr<br /> [kunta] => rrrrrrrrrrrrr<br /> )<br /><br /> [13] => Array<br /> (<br /> [id] => <a href="http://google.fi">Google</a><br /> [nimi] => <a href="http://google.fi">Google</a><br /> [osoite] => <a href="http://google.fi">Google</a><br /> [kunta] => <a href="http://google.fi">Google</a><br /> )<br /><br /> [14] => Array<br /> (<br /> [id] => 1<br /> [nimi] => t<br /> [osoite] => r<br /> [kunta] => r<br /> )<br /><br /> [15] => Array<br /> (<br /> [id] => <?php phpinfo(); ?><br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [16] => Array<br /> (<br /> [id] => tt<br /> [nimi] => ee<br /> [osoite] => ss<br /> [kunta] => dd<br /> )<br /><br /> [17] => Array<br /> (<br /> [id] => draaw<br /> [nimi] => asd<br /> [osoite] => dsfa<br /> [kunta] => adfssadf<br /> )<br /><br /> [18] => Array<br /> (<br /> [id] => 6<br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [19] => Array<br /> (<br /> [id] => k<br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [20] => Array<br /> (<br /> [id] => 82918291<br /> [nimi] => Matti<br /> [osoite] => Meikäläinen<br /> [kunta] => Kotikunta<br /> )<br /><br /> [21] => Array<br /> (<br /> [id] => 45<br /> [nimi] => 666<br /> [osoite] => 666<br /> [kunta] => 666666<br /> )<br /><br /> [22] => Array<br /> (<br /> [id] => a<br /> [nimi] => a<br /> [osoite] => a<br /> [kunta] => aa<br /> )<br /><br /> [23] => Array<br /> (<br /> [id] => 5656<br /> [nimi] => 24664<br /> [osoite] => 5544<br /> [kunta] => 554554<br /> )<br /><br /> [24] => Array<br /> (<br /> [id] => dssd<br /> [nimi] => sd<br /> [osoite] => sd<br /> [kunta] => sd<br /> )<br /><br /> [25] => Array<br /> (<br /> [id] => moi<br /> [nimi] => juu<br /> [osoite] => just<br /> [kunta] => kyl<br /> )<br /><br /> [26] => Array<br /> (<br /> [id] => 666<br /> [nimi] => Mustikka<br /> [osoite] => Rinne<br /> [kunta] => Muonio<br /> )<br /><br /> [27] => Array<br /> (<br /> [id] => 9<br /> [nimi] => Mansikka<br /> [osoite] => 7<br /> [kunta] => Helvetti<br /> )<br /><br /> [28] => Array<br /> (<br /> [id] => fhdh<br /> [nimi] => dfhhd<br /> [osoite] => dhfd<br /> [kunta] => dfhhdh<br /> )<br /><br /> [29] => Array<br /> (<br /> [id] => juu<br /> [nimi] => jaa<br /> [osoite] => aegage<br /> [kunta] => okojåoj<br /> )<br /><br /> [30] => Array<br /> (<br /> [id] => 124<br /> [nimi] => <b>Foobar</b><br /> [osoite] => <b></b><br /> [kunta] => <b></b><br /> )<br /><br /> [31] => Array<br /> (<br /> [id] => <br /> [nimi] => <br /> [osoite] => <br /> [kunta] => <br /> )<br /><br /> [32] => Array<br /> (<br /> [id] => ba<br /> [nimi] => ababa<br /> [osoite] => ababa<br /> [kunta] => bababab<br /> )<br /><br /> [33] => Array<br /> (<br /> [id] => vavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavav<br /> [nimi] => vavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavav<br /> [osoite] => vavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavav<br /> [kunta] => vavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavvvavavavavavvavavavavavavavav<br /> )<br /><br />) Aika hieno id tuossa yhdessä. DJ-Dew 19:30 20.3.05 ööh... Onko joku peeloillu vai onkohan toi bugi.... btw, ei ois tarvinnu postaa tota tänne! |
![]() Haku
|