Page 1 sur 1

Textarea et fichier texte

Posté : 25 janv. 2008, 19:29
par DeLorbe
Bonjour,

Je me permets de créer un nouveau post, car toutes les réponses que j'ai trouvées, ici ou ailleurs, ne résolvent pas mon problème.

Je veux gérer l'édito de mon site avec un formulaire et le conserver dans un fichier texte : "edito.txt".

J'ai créé un formulaire ("frmEdito"), qui contient un textarea. Celui-ci s'appelle "txtEdito" Le saut de ligne est réglé à "default".
--> Quel est le code envoyé pour un saut de ligne, dans ce cas? "\n", "\r\n" ou autre?
--> Qu'est-ce que "\r\n"? J'ai lu ça dans un forum, mais je n'avais jamais entendu parler de ça...

Au traitement de ce formulaire, j'ouvre un fichier texte en écriture, et je lui envoie le contenu du textarea, que j'ai préalablement récupéré dans une variable :

Code : Tout sélectionner

$fp = fopen("../edito.txt", "w"); $Edito = $_POST["txtEdito"]; fputs ($fp, $Edito); fclose ($fp);
Je sais qu'il faut utiliser des fonctions lors de l'écriture et/ou de la lecture du fichier, pour remplacer les sauts de lignes par des balises HTML, mais je m'y perds. Je ne sais pas lesquelles utiliser.

Mon problème :

Dans le textarea j'écris :
Blablablablablabla
Blablablablablablablablablabla,
Blablablablablablablablablabla,
Blablablablablablablablablabla.

Blablablablablablablablablabla,
Blablablablablablablablablabla,
Blablablablablablablablablabla.
(j'ajoute un dernier saut de ligne)

Je soumets le formulaire, et j'ouvre mon fichier texte. Son contenu est identique à ce que j'ai écrit dans le textarea.

A présent j'ouvre la page qui est censée afficher cet édito, et je lis :
Blablablablablabla
(et mon saut de ligne)

voici comment je lis mon fichier texte :

Code : Tout sélectionner

$fp = fopen("../edito.txt", "r"); $Edito = fgets ($fp, 9999); fclose ($fp);
Que faire svp?

Posté : 25 janv. 2008, 19:45
par h0_noMan
fgets — Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier

Posté : 25 janv. 2008, 19:50
par Berzemus
tu veux dire que tu as cherché sans jamais tomber sur nl2br() ?

Hé ben.. l'arbre devait cacher la forêt :wink:

Pour \n et \r\n, ça dépend de l'os et du navigateur utilisé par le client (toi quoi), c'est le format du retour à la ligne.

Soit tu utilises nl2br(), ou un simple regex pour remplacer \n ou \n\r par <br />. (ou \n<br />n pour garder le retour a la ligne).

voilà :D

Posté : 25 janv. 2008, 20:22
par DeLorbe
Merci pour vos réponses :wink:

Si, j'avais vu nl2br() et regex().
J'ai testé les deux, et puis je me suis emmêlé les pinceaux et j'ai viré tout ça de mon code.

Donc je le remets de cette façon :

Code : Tout sélectionner

$fp = fopen("../edito.txt", "r"); $Edito = fgets ($fp, 9999); $Edito = nl2br($Edito); fclose ($fp);
Bien entendu, lors de la lecture du fichier.
Il n'y a rien à faire lors de l'écriture? Pas de formatage, rien?

h0_noMan, veux-tu dire par là que mon code ci-dessus ne lirait QUE la première ligne du fichier?
Si oui, il faut que je fasse une boucle pour lire tout le contenu.
Aurais-tu un exemple, un lien, ou un conseil stp?

Merci encore à vous deux :)

Posté : 25 janv. 2008, 20:28
par h0_noMan
Oui c'est exactement cela.

Sois tu fait une boucle, comme dans l'exemple
http://fr2.php.net/fgets

Ou sois tu utilises fread (Penses a mettre b dans les paramètres d'ouverture du fichier)

Posté : 25 janv. 2008, 20:32
par DeLorbe
Ok, plutôt que d'éditer je réponds pour terminer ce sujet :

J'ai trouvé, il me fallait faire une boucle pour lire tout le fichier :

Code : Tout sélectionner

$Edito = ""; $fp = fopen("../edito.txt", "r"); if ($fp) { while (!feof($fp)) { $Edito = $Edito . fgets($fp, 4096); } fclose($fp); } $Edito = nl2br($Edito);
Merci beaucoup à vous deux, j'espère pouvoir aider à mon tour désormais.

Posté : 25 janv. 2008, 20:34
par zeus
Modération :
DeLorbe, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

Posté : 25 janv. 2008, 20:41
par DeLorbe
Bonjour,

je le fais tout de suite, et j'y penserai les prochaines fois :)