(kyseessä on txt-tiedosto)
Eli minulla on tiedossa rivi, jonka perään pitäisi asia kirjoittaa, mutta en tiedä miten saan kirjoitettua haluamani rivun loppuun.
Lue tiedosto taulukkoon, päivitä rivi ja kirjoita tiedosto uudelleen.
Ja rivin päivityshän onnistuu vaikka näin (päivittää 6:nnen rivin loppuun tekstin " ja tässä uutta tietoa"):
$tiedosto['5'] = $tiedosto['5']." ja tässä uutta tietoa";
Mikä tässä on vielä pielessä? Tiedostoon tulostuu "Resource id #3".
$rivitin = muokattava rivi
txt/sivudata.txt = Kohdetiedosto
fopen palauttaa vain kahvan avoimeen tiedostoon, ei sen sisältöä. Haet funktiota file().
$filu = file("txt/sivudata.txt"); $filu[$rivitin] .= $vastaus;
EDIT: Hidas
Joo, nyt toi kohta on seuraavanlainen, mutta tulostaa tällä kertaa tiedostoon "array"
$size = count("txt/sivudata.txt"); for ($l = 0; $l < $size; $l++){ $zekkaus = substr($l, 0, 10); if($zekkaus == $hiddeni){ $rivitin = $l; break; } } $rivitin++; $filu = file("txt/sivudata.txt"); $filu[$rivitin] .= $vastaus; $tiedosto = fopen("txt/sivudata.txt", "w"); fwrite($tiedosto, $filu); fclose($tiedosto);
Sinulla pitää muuttaa taulukko (array) $filu string-muotoon ennen kirjoitusta. Vaikkapa funktiolla implode.
Vaihdoin vähän toimintaperiaatetta, mutta nyt tiedostoon ei tulostu mitään. Myös paremmat ideat toteuttamiseen otetaan vastaan.
if($ac == "vastaa"){ $vastaus = $_POST['vastaus']; $hiddeni = $_POST['hiddeni']; $vastaus = str_replace("||", " ", $vastaus); $vastaus = htmlspecialchars($vastaus); $vastaus = str_replace(array("\r\n","\r","\n"),"<br />",$vastaus); $vastaus = wordwrap($vastaus, 35, " ", 1); $vastaus = stripslashes($vastaus); if(strlen($vastaus) > 2500) die("Tekstisi on liian pitkä (yli 2500 merkkiä)"); if($vastaus == "") die("Puutteelliset tiedot"); $filu = file("txt/sivudata.txt"); $filu = implode($filu); $filu[$hiddeni] = $filu[$hiddeni]." $vastaus"; $tiedosto = fopen("txt/sivudata.txt", "w"); fwrite($tiedosto, $filu); fclose($tiedosto);
Ja lomake:
<FORM ACTION=\"?ac=vastaa\" METHOD=\"POST\"> ID: <INPUT TYPE=\"text\" name=\"hiddeni\" VALUE=\"$user_page\"><br> <TEXTAREA NAME=\"vastaus\"></TEXTAREA><br> <INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\"Lähetä\"></FORM>
Implode vaatii kaksi parametriä, ensinnäkin sen millä taulukko liitetään stringiksi ja toisekseen sen taulukon. Tosin se taitaa toimia myös yhdellä parametrillä, mutta se on virheellinen tapa ja tulostaa tekstit tässä tapauksessa yhdelle riville. Kokeile jotain vastaavaa:
Nyt toimii ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.