Ideana on tallentaa lomakkeen tiedot tekstiedostoon. Homma toimii muuten hienosti, mutta ongelmaksi tulivat rivinvaihdot. Olisi ehdottoman tarpeellista, että käyttäjän kirjoittama teksti tallentuu tekstitiedostoon rivinvaihtoineen. Sain rivinvaihdot(kin) toimimaan nl2br-funktiolla, mutta nyt jos/kun käyttäjä muokkaa uudelleen vaikka ekalla rivillä olevaa tekstiä, niin seuraaville riveille generoituu toiset rivinvaihdot aiempien lisäksi. Käyttötarkoitus on nimittäin semmoinen, että lomakkeen (ja tekstitiedoston) sisältöä muokataan jatkuvasti. Miten tämmöisen vois korjata? Tarkistaa, että on vain yksi rivinvaihto/rivi? Vai onko olemassa helppoa tapaa lukea lomake jollain <pre>-tyylisellä parametrilla?
php:
<?php $fn = "huom.txt"; if (isset($_POST['content'])) { $content=nl2br($_POST['content']); /*tämä rivi tekee rivinvaihdot!*/ $fp = fopen($fn,"w") or die ("Error opening file in write mode!"); fputs($fp,$content); fclose($fp) or die ("Error closing file!"); } ?>
lomake:
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post"> <textarea rows="25" cols="40" name="content"><?php readfile($fn); ?></textarea><br> <input type="submit" value="Tallenna"> </form>
Tämä on eka php-viritelmä, joten koodi on sen mukaista copy-paste-sälää :D
Kaikki apu otetaan kiitollisuudella vastaan :)
Mod. korjasi kooditagit!
Älä aja sitä nl2br-funktiota ennen kuin sisältöä sivulle laitettaessa. Eli siis tallenna tiedosto normaalirivivaihdoilla ja laita se sellaisenaan muokkauslomakkeelle.
Lisää rivinvaihot pelkästään tulostuksessa ja anna tekstitiedoston olla sellasessa formaatissa kuin on.
esim:
<?php printf('<div>%s</div>', nl2br(file_get_contents('testi.txt'))); if (!isset($_POST['submit'])): ?> <form method="post" action="?"> <textarea name="text"><?php print file_get_contents('testi.txt');?></textarea> <input type="submit" name="submit"> </form> <?php else: file_put_contents('testi.txt', $_POST['text'], LOCK_EX); endif; ?>
Kiitos tuutti :) Toimii kuin se legendaarinen junan vessa!
tuutin koodiin täytyy lisätä htmlspecialchars tuonne textarean sisällä olevaan tulostukseen, koska muuten HTML-koodin syöttäminen (edes tahattomasti) aiheuttaa ongelmia.
Metabolix kirjoitti:
tuutin koodiin täytyy lisätä htmlspecialchars tuonne textarean sisällä olevaan tulostukseen, koska muuten HTML-koodin syöttäminen (edes tahattomasti) aiheuttaa ongelmia.
Samasta syystä se kai sitten tulisi lisätä myös printf-riville nl2br:n ja file_get_contentsin väliin.
Tukki kirjoitti:
Samasta syystä se [htmlspecialchars] kai sitten tulisi lisätä myös printf-riville nl2br:n ja file_get_contentsin väliin.
Yleensä kyllä, mutta esimerkiksi hallintapaneelissa HTML:n kirjoittaminen voisi olla myös täysin toivottu ominaisuus. Tosin silloin olisi varmaan tyhmää käyttää nl2br-funktiota.
Pitääpä muistuttaa vielä, että PHP_SELF on vaarallinen muuttuja, jonka kanssa htmlspecialchars on myös tarpeen. Toisaalta koko muuttuja on yleensä hyödytön, koska action-attribuutin voi jättää tyhjäksi (jolloin GET-parametrit säilyvät) tai siihen voi laittaa ?-merkin (jolloin GET-parametrit tyhjenevät).
Metabolix kirjoitti:
Pitääpä muistuttaa vielä, että PHP_SELF on vaarallinen muuttuja, jonka kanssa htmlspecialchars on myös tarpeen. Toisaalta koko muuttuja on yleensä hyödytön, koska action-attribuutin voi jättää tyhjäksi (jolloin GET-parametrit säilyvät) tai siihen voi laittaa ?-merkin (jolloin GET-parametrit tyhjenevät).
Actionia ei voi jättää tyhjäksi, koska se rikkoo standardeja. Toisaalta ilmeisesti HTML5:n kanssa voi koko attribuutin jättää pois.
http://dev.w3.org/html5/spec/single-page.html#attr-fs-action
The Alchemist kirjoitti:
Actionia ei voi jättää tyhjäksi, koska se rikkoo standardeja.
Voitko kertoa mitä standardeja action="" "rikkoo"?
Aihe on jo aika vanha, joten et voi enää vastata siihen.