Kehittelin itseäni varten hyvin yksinkertaista linkkilistaa, jossa linkit olisi listattuna ja numeroituna. Linkit ovat tallennettu tiedostoon ja aina skriptin saadessa post-dataa, lisätään post-datassa oleva url tiedoston perään. Idea oli hieno, mutta toteutus ei pelaa.
Ongelmat:
1) Linkkilistassa on jatkuvasti vain viimeiseksi lisätty linkki
2) Ohjelman tuloste tulostaa toiseksi linkiksi skriptin osoitteen
Suorittettava koodi on seuraava:
<?php if(isset($_POST['url'])) { $_POST['url']=$url; if(preg_match("/^http:\/\//",$url)) { //url kelvollinen, etsitään datatiedosto. tässä vaiheessa lisätään vain rivi tiedoston loppuun //linkit sijaitsevat alla olevassa tiedostossa $tiedosto = "linkit.txt"; if(file_exists($tiedosto)) //jos tiedosto on olemassa jatketaan { $kahva = fopen($tiedosto,"w"); //avataan tiedosto kirjoitusta varten fwrite($kahva, $url."\n"); //kirjoitetaan tiedostoon url fclose($kahva);//suljetaan tiedosto header("location: http://koti.mbnet.fi/juspi/urlnappari/laddare.php"); //palataan ilman post-dataa } else //jos tiedostoa ei löydy, herjataan { echo "Tiedostoa ei löydy"; } } // jos url ei ole kelvollinen, herjataan else { echo "url ei kelvollinen"; } } else { //jos POST-dataa ei ole määritelty avataan tiedosto taulukkoon ja käydään taulukko läpi yksitellen ja luodaan linkkilista jossa linkit on numeroitu $tiedostoarray = file("linkit.txt"); for($i=0; $i<=count($tiedostoarray); $i++) { echo '<a href="'.$tiedostoarray[$i].'">'.($i+1).". linkki</a><br>"; } } ?>
Osaisiko joku auttaa ongelmieni ratkaisussa. Kiitos.
$kahva = fopen($tiedosto,"w");
Avaat tiedoston write-moodiin, joka tyhjentää tiedoston avauksen yhteydessä. Vaihda w-moodi a-moodin, eli append-moodiin.
Kappas, olipas hölmö hirve. Nyt toimii mutta tulee vielä tuo skriptin osoite viimeiksi mutta ei se mitään haittaa :)
Ongelma 2, käyt forilla läpi yhden ylimääräisen silmukan. Tässä tapauksessa ensin arvolla 0, sitten arvolla 1 (jota ei ole olemassa). Eli muuta muotoon
for($i=0; $i < count($tiedostoarray); $i++)
Aihe on jo aika vanha, joten et voi enää vastata siihen.