Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Rivin poistaminen tiedostosta

Sivun loppuun

folo [03.05.2006 17:48:25]

#

On varmasti jollain tavalla jo selitelty että miten se tapahtuu. Mutta en ole siltikään saanut toimimaan sitä! Olen vasta aloittelija "alalla".

Elikkäs, tarkoitus on tehdä sivuille "uutiset" kohta, johon lisään asioita silloin tällöin. Olen yrittänyt koodailla helppoa semmoisen palstan ylläpito ohjelmaa. Täältä olen repinyt vaikka mitä vinkkejä, en ole saanut sitä toimimaan.

Nyt minulla on työkalu jolla lisään uutisen .txt tiedostoon. Yksi uutinen on yksi rivi. Tahtoisin siihen perään esim. linkin jota painamalla se tietty rivi häipyy sivuilta ja .txt tiedostosta. En tarvitse mitään muokkaa nappeja. Pelkästään poisto. Nyt minulla on siinä linkki jolla PITÄISI pystyä poistamaan rivin, mutta sehän sitten tyhjentää koko .txt tiedoston!

Oisko heittää vinkkiä? Ja nyt en kaipaa mitään naljailua et "miks ei vaa tee sitä noin?!", olen alottelija. Jos joku voisi vain ystävällisesti kertoa miten ton saisin helpoiten tehtyä.

Megant [03.05.2006 18:30:21]

#

Luet koko tiedoston taulukkoon ja kirjoitat kaiken takaisin paitsi poistettavan rivin.

folo [03.05.2006 19:03:32]

#

ok. eli olen alottelija. meni ohi.

Megant [03.05.2006 19:11:43]

#

Tässäpä esimerkki:

$tiedosto = file("tiedosto.txt"); //luetaan tiedosto
$tiedosto2 = fopen("tiedosto.txt", "w"); //kirjoitettava tiedosto, käytetään samaa tiedostoa, ja käytetään "w" parametriä, joka tyhjentää tiedoston
$poistettava = 4; //poistetaan rivi neljä, jos sellainen on
for ($i = 0; $i < count($tiedosto); $i++) //käydään kaikki rivit läpi
{
  if($i != $poistettava) //jos ei olla menossa samassa rivissä kuin mikä poistetaan, kirjoitetaan se takaisin tiedostoon
   fwrite($tiedosto2, $tiedosto[$i]);
}
//suljetaan tiedosto
fclose($tiedosto2);

folo [07.05.2006 22:07:37]

#

kiitoksia!

Nyt ei tyhjene enään koko .txt tiedosto. Mutta.... kuinka minun pitäisi nuo laitella?

eli siis nyt minulla on lisää.php, millä laitan uuden jutun, sitten on nayta.php missä nuo jutut näkyy ja jokaisen jutun perässä on poista linkki. ja kun painaa sitä poista linkkiä, ajaa ohjelma poista.php:en jossa on tuo em. koodin pätkä.

eli jos on juttuja vaikka 14 siinä näkyvillä, ja painan jutun nro 7 kohdalla poista, niin miten sen nimenomaisen jutun saan pois?

tsuriga [07.05.2006 22:47:27]

#

PHP-opas, osa 4. ja kohta "Tietojen käsittely skriptissä".

folo [09.05.2006 23:02:04]

#

ei uppoo.. ei toimi.

eli. miten saan tuon poiston nyt toimimaan siitä linkistä mikä on sen poistettavan jutun perässä? miten tuo yllä oleva rivin poisto koodin pätkä pitäisi laittaa....?

nim: epätoivo

jgz [09.05.2006 23:57:07]

#

Välität sillä linkillä sen poistettavan rivin indexin ja sijoitat sen tuohon $poistettava -muuttujaan.

jideko [10.05.2006 11:24:02]

#

Tässä myös toinen esimerkki.

Jos tuo esimerkki olisi vaikka poista.phpn niin nyt sun pitäisi joka uutisen perään lisätä linkki esim poista.php&rivi=xx, missä tietenkin xx on sen uutisen rivinumero tiedostossa. ja vielä kun muistat että ensimmäinen rivi on 0.

Ilmottele jos et saa toimimaan.

<?php
$rivinro=$_GET["rivi"]; //hakee rivinumeron url:ista

$tiedosto="tiedosto.txt";
$alkuper=file($tiedosto); //luetaan alkuperäinen tiedosto riveittäin taulukkoon
$tuleva=fopen("temp","w"); //luodaan ja avataan temp tiedosto

$i=0; //alustetaan laskuri
//jostain syystä olen tottunut käyttämään foreachia forin sijaan. Eli tässä käydään tiedoston jokainen rivi yksitellen läpi.
foreach ($alkuper as $rivi){
	if ($i<>$rivinro) fwrite($tuleva,$rivi); //jos laskuri ja annettu rivinro eivät ole samoja kirjoitetaan vanha rivi temp tiedostoon.
	$i++;//kasvatetaan laskuria yhdellä.
}
fclose($tuleva); //suljetaan temp tiedosto
unlink($tiedosto);//poistetaan alkuperäien tiedosto
rename("temp",$tiedosto); //nimetaan temp tiedosto uudelleen saman nimiseksi kuin alkuperäinen.
?>

Blaze [10.05.2006 13:08:38]

#

Jotenki tästä ketjusta tulee ihan mieleen The Spider of Doom: http://www.thedailywtf.com/forums/65974/ShowPost.aspx

folo [10.05.2006 17:46:08]

#

juu, ei ala vieläkää aukeemaa miten ton pitäs toimia, vaikka muuten on kyllä vienyt eteenpäin koko settiä.

http://lucidity.kapsi.fi/camelus/admin/laheta.php

nyt näyttää tuo uutisten näyttö tältä, samassa pitäisi olla se uutisten poisto. eli näytä.php:

<?php
//luetaan viestit taulukkoon
$viestit = file("viestit.txt");
//käännetään taulukko, jolloin uusimmat viestit tulevat ylimmiksi
$viestit = array_reverse($viestit);
//viestien määrä on suoraan taulukon rivien määrä
$viestimaara = count($viestit);


//käydään jokainen viesti läpi
for ($i = 0; $i < $viestimaara; $i++) {
   //$viestit[$i] on merkkijono, joka sisältää viestin $i tiedot
   //pystyviivoilla erotettuna; jaetaan viestit $tiedot-taulukkoon
   $tiedot = explode("|", $viestit[$i], 3);

   //erotellaan tiedot omiin muuttujiinsa
   $nimi = $tiedot[0];
   $aika = $tiedot[1];
   $viesti = $tiedot[2];


   //tulostetaan viesti

   echo " ". date("d.m.Y", $aika) . "  <b>$nimi</b><br>";
   echo "<br>$viesti <a href=poista.php> [Poista]</a><hr>";
}
?>

ja sitten jotenkin pitäisi saada tuo muutettua siten että sieltä lähtee vaikka kolmas rivi pois kun tuota poista.php linkkiä painaa. eli sitä en oikein hoksaa että miten tuonne poista.php :hen saa laitettua sen rivin "muutoksen" laitettua. poista.php jossa on toi numero tuolla vielä 3...

<?php

$tiedosto = file("viestit.txt"); //luetaan tiedosto
$tiedosto2 = fopen("viestit.txt", "w"); //kirjoitettava tiedosto, käytetään samaa tiedostoa, ja käytetään "w" parametriä, joka tyhjentää tiedoston
$poistettava = 3; //poistetaan rivi neljä, jos sellainen on
for ($i = 0; $i < count($tiedosto); $i++) //käydään kaikki rivit läpi
{
  if($i != $poistettava) //jos ei olla menossa samassa rivissä kuin mikä poistetaan, kirjoitetaan se takaisin tiedostoon
   fwrite($tiedosto2, $tiedosto[$i]);
}
//suljetaan tiedosto
fclose($tiedosto2);

header("Location: nayta.php");

?>

ja tämänhän olen ottanut tuolta ylempää...

oisko jollain vinkkiä miten tuon saisi toimimaan siten kun pitää?

jideko [10.05.2006 18:35:03]

#

muuta näytä.php:sta poistokohta seuraavaksi

echo "<br>".$viesti."<a href=\"poista.php&rivi=".($viestimaara-$i-1)."\"> [Poista]</a><hr>";

ja sitten poista.php:sta

$poistettava = $_GET['rivi'];

folo [10.05.2006 18:40:46]

#

no nyt ollaan askeleen lähempänä totuutta.. mut errorin heittää:

The requested URL /camelus/admin/poista.php&rivi=3 was not found on this server.

eli ilmeisesti tossa poistettavan rivin määrityksessä jotain pientä vielä on..

jideko [10.05.2006 18:48:09]

#

anteeks

korvaappas tuo & kysymysmerkillä

echo "<br>".$viesti."<a href=\"poista.php?rivi=".($viestimaara-$i-1)."\"> [Poista]</a><hr>";

folo [10.05.2006 18:52:21]

#

no niin. ei tullu erroria mut se poistaa aina ensimmäisen rivin.. näin lähellä en oo vielä ollukkaa toimivaa koodia :)

mut mikähän tossa on..


edit:

KOMENTO TAKAS! tää toimii!! huhhuh... kiitos kumarrus!!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta