Osaisitteko auttaa kun mulla on seuraavanlainen koodi :
<form method="post" action="lisaa.php"> Sivun URL : <input type="text" name="url" size="50" value="http://" style="background-color: #FFFFFF; font-family: Verdana; color: #000000; font-size: 8pt; border: 1 solid #000000"><br> Sivun nimi : <input type="text" name="nimi" size="31" value="" style="background-color: #FFFFFF; font-family: Verdana; color: #000000; font-size: 8pt; border: 1 solid #000000"><br> Sivun kuvaus : <input type="text" name="kuvaus" size="45" value="" style="background-color: #FFFFFF; font-family: Verdana; color: #000000; font-size: 8pt; border: 1 solid #000000"><br> <input type="submit" value="Lisää" style="background-color: #FFFFFF; font-family: Verdana; color: #000000; font-size: 8pt; border: 1 solid #000000"> </form> <?php if (isset($url)) { $tiedosto = "linkit.txt"; $fp = fopen($tiedosto, 'a+'); $data = "${_POST["url"]}|${_POST["nimi"]}|${_POST["kuvaus"]}\n"; fwrite ($fp, $data); print "Linkki lisätty.<br>\n"; } ?>
ja toi tartteis sitten saada tehtyä niin että se lisää ton linkin tiedoston alkuun eikä loppuun niiku se nyt tekee. Löysin ohjelmointiputkasta kyllä samaa aihetta käsittelevän jutun mutta en onnistunut solveltamaan sitä tähän sopivaksi.
Itsekin samaa mietiskelin tuossa vähän aikaa sitten ja päätin tulostaa viimeisen rivin ensiksi..
eli tiedot kirjoittuu tiedostoon
Rivi1
Rivi2
Rivi3
mutta tulostuu
Rivi3
Rivi2
Rivi1
<?php
$fp = file("linkit.txt");
$fp = array_reverse($fp);
foreach( $fp as $linkit )
{
print "$linkit";
}
?>
Ja tuo sinne sivulle missä haluat linkkisi tulostaa.
Jos tuosta nyt mitään apua oli..
Ottakaa ensin tiedoston sisältö taulukkoon muistiin file() funktiolla, avaatte tiedoston "w" muotoon jolloin se tyhjenee samalla, kirjoitatte ensin uuden rivin tiedostoon ja sen jälkeen vanhat tiedot taulukosta sen rivin perään.
Ikäänkuin tähän tapaan:
<?php if (isset($url)) { $tiedosto = "linkit.txt"; $oldfile = file($tiedosto); $data = "${_POST["url"]}|${_POST["nimi"]}|${_POST["kuvaus"]}\n"; $fp = fopen($tiedosto, "w"); fwrite ($fp, $data); for ($i = 0; $i < count($oldfile); $i++) { fwrite($fp, $oldfile[$i]); } fclose($fp); echo "Linkki lisätty.<br>\n"; } ?>
Tuo trinitin esimerkki on aika hidas..
<?php $tiedosto = "linkit.txt"; $olddata = file($tiedosto); $newdata = "${_POST["url"]}|${_POST["nimi"]}|${_POST["kuvaus"]}\n"; $fp = fopen($tiedosto), "w") or die("Ei voitu avata tiedostoa!"); fwrite ($fp, $newdata); fwrite ($fp, implode("", $olddata)); fclose($fp); echo "Linkki lisätty.<br>\n"; ?>
Näin säästytään turhan for loopin käyttämiseltä ja saadaa skripti nopeammaksi. :) (Eron huomaa suurissa tiedostoissa)
No hmm. Asiaa sivuten miten olis järkevin poistaa joku rivi ja/tai muokata jotain riviä. Siis, että kaikille ei tulostu ne muokkaa / poista kohdat vaan olisi esimerkiksi vaikka admin.php sivu josta ylläpitäjä voi sitten niitä poistella tai niihin vastata..? Ja miten silloin kannattaa tulostus hoitaa? Oon selaillut ja testaillut ja sain jonkun jopa toimimaan, mutta se oli semmoinen missä lomakekenttään kirjoitettiin rivi mikä poistetaan, joten ei siitä sen enempää. :D
Laita se admin tiedosto htaccessilla suojatuksi (Jos et osaa lue putkan opas)
Sitten yhen rivin poisto ois helpointa esim:
<?php $data = file("tiedosto.txt"); // Poistetaan rivinumero 30 unset($data[29]); // Muutetaan rivinumero 50 $data[49] = "Muutettu teksti"; ?>
Sitten tietysti tallennat taas datan tiedostoon takaisin..
Rivi 1 = 0
Rivi 2 = 1 jne..
Nopeampaa on tehdä lisäys aina tiedoston loppuun ja hoitaa tulostus käänteisesti. Tosin jos lisäyksiä on harvoin ja tiedosto ei ole kovin suuri on melko sama miten toimii. Kuitenkin koko tiedoston uudelleenkirjoitus ei ole suositeltavaa jos tiedonmäärä on suuri. (mho)
Juu htaccessin osaan kyllä. Ja siis tuon koodin minkä(jope) näytit niin osaan :P Mutta siis niinku vaikka käyttäjille rivit näkyisivät tällä tavalla:
samii | email | www | 10.7.2003
moimoi
juu ja tuon saan kyllä. Mutta sitten admin osassa viestit näkyisi vaikka:
samii | email | www | 10.7.2003 | poista |
moimoi
Niin, että miten tuo olisi järkevintä toteuttaa? Niin kuin sanoin niin oon saanut poistettua rivejä kirjoittamalla lomakekenttään rivin numero ja painamalla submittia. Mutta tuo ei ole järkevä tapa kun pitää laskea rivit.. Ja tuota mitä sanoin niin en ole ainakaan vielä itse hiffannut.. Toivottavasti ymmärsitte :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.