Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomake rivinvaihtoineen tiedostoon php:lla?

Sivun loppuun

jepulis [11.06.2012 14:05:56]

#

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!

Grez [11.06.2012 14:49:54]

#

Älä aja sitä nl2br-funktiota ennen kuin sisältöä sivulle laitettaessa. Eli siis tallenna tiedosto normaalirivivaihdoilla ja laita se sellaisenaan muokkauslomakkeelle.

tuutti [11.06.2012 14:50:32]

#

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;
?>

jepulis [11.06.2012 20:17:58]

#

Kiitos tuutti :) Toimii kuin se legendaarinen junan vessa!

Metabolix [12.06.2012 11:17:13]

#

tuutin koodiin täytyy lisätä htmlspecialchars tuonne textarean sisällä olevaan tulostukseen, koska muuten HTML-koodin syöttäminen (edes tahattomasti) aiheuttaa ongelmia.

Tukki [12.06.2012 13:15:53]

#

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.

Metabolix [12.06.2012 13:36:34]

#

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.

Metabolix [12.06.2012 18:17:40]

#

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).

The Alchemist [12.06.2012 23:48:13]

#

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

Grez [13.06.2012 07:08:35]

#

The Alchemist kirjoitti:

Actionia ei voi jättää tyhjäksi, koska se rikkoo standardeja.

Voitko kertoa mitä standardeja action="" "rikkoo"?


Sivun alkuun

Vastaus

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

Tietoa sivustosta