Olis tarkoitus tehä mun sivujen vieraskirjaan viestinpoisto mahdollisuus (siis tietysti vain webmasterille), mutta mulla itellä ei ole hajuakaan, että miten sen voi tehdä. Eli voiskos joku kertoo millä periaatteella semmonen viestinpoisto toimii? Nii ja se vieraskirja toimii txt tiedostolla.
Luet vaikka tekstitiedoston taulukkoon file()-funktiolla ja poistat kyseisen viestin array_splice()-funktiolla. Sen jälkeen tallennat uuden taulukon tiedostoon.
Esim.
<?php $taulukko = @file("tekstitiedosto.txt"); array_splice($taulukko, $numero, 1); ?>
$numero on sen viestin indeksi minkä haluut poistaa. Sen voit lähettää skriptille vaikka formilta. $taulukon indeksit alkaa 0:sta.
Onko liioittelua käyttää flock() -funktiota estämään tiedostoon kirjoituksen tuon operaation ajaksi.
Mä poistan tiedostosta rivin näin:
<?php $id = 12; //poistettava rivinumero $file = file("tietokanta.txt"); //tiedoston rivit taulukkoon $rivit = count($file) -1; //lasketaan tiedoston rivien määrä $kirjoitus = fopen("tietokanta.txt", "w"); //tyhjennetään tiedosto ja avataan se kirjotusta varten flock ($kirjoitus, 2); //lukko kiinni for ($i = 0; $i <= $rivit; $i++) { //kaydaan jokanen rivi lapi if ($i != $id) { //jos rivi ei ole poistettava rivi fwrite ($kirjoitus, $file[$i]); //kirjotetaan se filuun } } flock ($kirjoitus, 3); //lukko veks fclose ($kirjoitus); //filu kiinni ?>
PHP:ssä ei vaikeelta kuulostavat asiat oo välttämättä niin vaikeita. Pitää vaan keksii et kuinka toteuttaa.
PS. ei sit winetä turhist kommenteist
EDIT: hienosäätöä
Turhan hankalasti toteutettu :)
Itse käytän tätä tapaa:
<?php $id = 12; $tiedosto = "tiedosto.txt"; $filu = file($tiedosto); $filu[$id] = ""; $save = fopen($tiedosto, "w"); fwrite($save, implode("", $filu)); fclose($save); ?>
Niin, ja tuota voi käyttää myös rivin muokkaamiseen.
Mitäs kukas se täällä alkaa mun patenttiratkasuja uhmaamaan?
EDIT: Tai no joo pakko tässä on taipua :/
Koodissasi ei tarkisteta onnistuiko lukitus. Iteki tein ennen tolleen, et "jos ei poistettava rivi", mutta siirryin sittemmin implodeen. array_splice näyttäisi hyvältä vaihtoehdolta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.