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>'; ?>
Sainpahan vihdoinkin ensimmäisen koodivinkkini tänne putkaan. Haluaisin palautetta toiminnasta ja mahdollisista parannus ehdotuksista.
ei oo vielä julkastu ;)
Välit selventäis koodia tosi paljon. :)
Esim. pilkkujen jälkeen ja operaattorien välissä.
Oikein laitetut sisennykset ois kans pop.
Eikö näitä koodivinkkejä voi muokata?
Oisin laittanu sisennykset kuntoon....
Kyllä voi muokata, senkus etsit "muokkaa" linkin tuolta ylhäältä.
mulla ei näkynyt muokkaa linkkiä tuolla ylhäällä, syy selvisi: Olin kirjautunut sisään pienelläkirjoitetulla nickilläni (d.j-dew), kun kirjauduin nimellä D.J-Dew, muokkauslinkki tuli näkyviin :)
Siistin samalla koodia....
Enpä tota MySQL osaa enkä tarvitse niinpä tämäkin on aika turha minulle
Olen tässä pohtinut, että miten voisi tehdä sellasen
koodin, et ensin lähetetään lomakkeen muodossa tietoja
ja, sit omalle henkilökohtaiselle profiilille ilmestyy samat tiedot, niin että ne automaattisesti aina tallentuu.
Teman kirjoitti:
Olen tässä pohtinut, että miten voisi tehdä sellasen
koodin, et ensin lähetetään lomakkeen muodossa tietoja
ja, sit omalle henkilökohtaiselle profiilille ilmestyy samat tiedot, niin että ne automaattisesti aina tallentuu.
Mysql varmaan helpoin tapa noille.
Vinkin toteutus on erittäin rajoittunut, puutteellinen ja ilmeisen viallinen ainakin htmlspecialchars- ja stripslashes-funktioiden käytön sekä rivinvaihtokikkailujen osalta. Ei tällaisesta kannata kenenkään mallia ottaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.