Comment comptabiliser les sauts de lignes dans un champs mysql de type text ?? [Résolu]

Signaler
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
-
Messages postés
432
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006
-
Salut !



C'est un probleme que je n'arrive pas à solutionner.

J'utilise des champs à plusieurs milliers de caractères pour des
descriptions, donc bien entendu je les stock dans la base de données
dans des champs de type text. Le probleme est que je n'arrive pas à
prendre en compte les sauts de ligne.



Je sais que c'est possible, j'ai déjà vu celà.



Quelqu'un sait il comment je pourrai faire ? Ou au pire quel subterfuge je pourrai employer ?



C'est plutôt urgent, je n'ai pas assez de temps pour réflechir à un
script contournant le probleme ou refaire complétement la structure de
la gestion des données...



Merci beaucoup.

WizardNx.

18 réponses

Messages postés
432
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Moi je préfère une autre solution :

- un formulaire envoi des données par méthode POST s'il y en a beaucoup

- je nettoie les variable de leur slashes (avec stripslashes()) si le paramètre de configuration magic_quotes_gpc est activé (j'utilise get_magic_quotes_gpc())

- et j'échappe les caractères avec une fonction prévue pour : mysql_real_escape_string() ou mysql_escape_string() si la première n'existe pas



Et avec ça je n'ai jamais eu de problème de sauts de lignes.



Evidemment, lors de l'affichage du text dans un document html, il faut rajouter htmlentities() d'abord, et nl2br() ensuite =)
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Salut, homme pressé...



La sauvegarde des sauts de ligne ne pose aucun problème, du moment que
tu encapsule le texte entre des guillemets dans ta requètes SQL



INSERT INTO `test` (text) VALUES ("un texte tout bète\nsur deux lignes");



ET que tu échapes les guillemets contenus dans le texte



$texte = 'un texte avec des "guillemes"';

$sql = 'INSERT (text) (text) VALUES ("'.addslashes($text).'");';





Si ça ne marche toujours pas (quelle base de données utilises-tu?), connais-tu les champs de type BLOB ?

(idem que TEXT mais au format binaire)



Bonne chance



PS : solutionner !?! résoudre, non ?
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
fautes de frappes...



$texte = 'un texte avec des "guillemets"';

$sql = 'INSERT INTO `test` (text) VALUES ("'.addslashes($text).'");';





désol'
Messages postés
2
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
28 octobre 2005

les sauts de lignes sont \n ou \r\n



tu fais un strreplace de ça par
avant d'afficher
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Tu utilises MySQL (je ne lis jamais les titres)

Donc aucun problèmes avec les sauts de ligne



(le problème est ailleur !!)
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Voilà...



là je crois que tout est dit ;)
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
arf non

Je sais que le saut de ligne c'est \n



Je me suis mal expliqué mea culpa.



Un utilisateur quelquonc rempli un formulaire, et dans un champs de
texte (à la limite comparons ca à un poste de forum, ca s'en
rapproche). Il met des sauts de ligne normaux (par exemple sur ce forum
quand je laisse un message je n'ai pas besoin d'ecrire \n ou

pour aller à la ligne) donc en invisible chr$(10)+chr$(13). Il
enregistre en appuyant sur le submit du formulaire...



Et là donc je récupère et enregistre dans la base de donnée, un truc
tout con donc et ensuite jfais la requete mysql pour l'enregistrer .

En gros ca donne ca :

$texte = $_POST['champs_text];

$query = mysql_query("insert into `la_table` (`text` values '$texte')");



Mais les sauts de ligne tapés dans le champs ne sont pas gardés... Et j'en ai besoin. Vouala.



Merci.

WizardNx.
Messages postés
432
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Sisi c'est obligé =)

Qu'est-ce qui te fait dire le contraire?
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
Oui, oui, oui...



Les sauts de lignes tapés dans le champ (textarea) sont bel et bien concervé !!!



SAUF QUE ces sauts de ligne sont juste des '
' (et non des \n)



La procédure décrite par monoceros est bonne, suit la pas-à-pas



Bonne chance...



PS :

insert into `la_table` (`text` values '$texte')

n'est pas vraiment ce qu'on appelle une requète SQL valide... Mais bon, ça marche quand même
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
Ah merci monoceros01 !!



C'est impecc ca marche nickel !

En fait je devais passer les htmlentities() nl2br() ! Je ne connaissais pas ces fonctions, c'est impeccable !



Merci beaucoup.

@+

WizardNx.
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
Excusez moi mais pour ma première réponse, je l'ai tapé pendant que
monoceros répondait et je n'avais pas encore vu sa réponse à ce moment
là (comme je code à coté en meme temps aussi).

Sinon je confirme que c'est bien ca !



Merc beaucoup.



@+

Nx.
Messages postés
432
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

XD évidemment, ton navigateur n'interprête pas les \n.... c'est pourtant connu <_<
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
Arf lol J_G, je sais que c'est pas valide, j'ai tapé comme ca à la
bourrin juste pour vous montrer comme je m'y prenais pour l'enreg, car
au début je soupconnais ma variable string en fait de ne pas conserver
les retours chariots (alors qu'en fait si) et j'en suis venu à me
demander plein de chose...



Faut excuser ma lenteur d'esprit aujourd'hui et lenteur tout court, ca
fait environ 37h maintenant que je bosse sans interruption (juste pour
me servir le café et pour allez aux chiottes), et j'en peux vraiment
plus.



En tout cas merci.

Nx.
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
Il interprete les \n dans son code sisi, mais pas dans le formatage de
la page ui ca je sais c'aurait été trop beau... et surtout tout et
n'importe quoi ;)

Le truc c'est qu'il n'y a aucun \n dans la chaine de caracteres qui
passe en methode POST (sinon j'aurai codé en 2 ligne un truc qui
remplace les \n par des
), ce sont des chr$(10) et (13),
retour à la ligne et retour chariot, le \n c'est pas le même niveau
d'interpretation...



Enfin bref, jte remercie beaucoup encore une fois ;)

J'y retourne !

@+

Nx.
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
7
37 H non-stop !!!



C'est ça qu'est bon avec l'informatique... on peut faire
une semaine (légale) de travail en une traite, et sans-même s'en rendre
compte...



Quel long WE en perspective pour toi :)
Messages postés
432
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Et c'est là.... la tuile!

...



Il a oublier d'pointer O_O
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
Vui :)

Et là j'y suis encore... jcrois que je viens de battre mon propre
record (c'était 38h sur une scène 3d en décollant de l'ecran que pour
aller pisser)

Le pire c'est que j'ai meme pas sommeil ! (avec les litres de café que j'ingurgite c'est pas étonnant)...



:D
Messages postés
432
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

Ouai j'connais, j'avais des rattrapages fin Août et je bossais en même
temps en nuit.... c'était folklo! XD (mais le tout sans une goutte de
café ;p )