Page 1 sur 1
supprimer espaces et sauts de ligne
Posté : 24 janv. 2009, 08:38
par boobz
Bonjour,
J'ai un formulaire comportant plusieurs champs dont un textarea pour des commentaires. Je récupère tout ça et le mets ensuite dans une bd mysql.
Mon problème est que si l'utilisateur met plusieurs espaces entre les mots et/ou des sauts de ligne dans son texte, ceci se retrouve dans ma bd ce qui me pose problème plus tard, quand je récupère ce champs. J'aimerai donc supprimer tous ces espaces et sauts de ligne. J'imagine qu'il faut que je fasse cela *avant* de l'insérer dans la bd. Or je ne vois pas comment faire cela *simplement*.
Avez-vous une idée ?
Merci d'avance
Posté : 24 janv. 2009, 09:08
par Stef
situsupprimestouslesespacesçavafairecommeça...c'estpastrèspratique,non?
Posté : 24 janv. 2009, 09:27
par boobz
Bien vu
J'ai évidemment oublié de préciser que je voulais supprimer tous les espaces *en trop*. Donc je veux une longue chaîne de mots séparés par *un* espace et plus de saut de ligne.
Va mieux comme ça ?
Posté : 24 janv. 2009, 09:40
par Stef
tu pourrais montrer ton code d'insertion dans ta bdd?
Posté : 24 janv. 2009, 09:46
par boobz
Tout bête :
Code : Tout sélectionner
$sql = "insert INTO ar_order
(
ID_AR_ORDER,
ORDER_DATE,
AR_QUANTITY,
REMARK,
ID_CLIENT,
USER_ID
)
values
(
'',
'".$date."',
'".$ar_qty."',
'".$remark."',
'".$id_client."',
'".$user_id."'
)
";
Posté : 24 janv. 2009, 11:22
par Stef
J'imagine que le champ qui te pose problème est REMARK, issu d'un textarea sans doute (c'est à partir d'un formulaire?)?! tu ne fais aucun traitement sur ce champ ?
tu peux montrer le reste du code?
Posté : 24 janv. 2009, 11:49
par thehawk
Essaye un trim(), ca devrait normalement t'aider ou du moins te lancer sur une piste
Source :
http://fr.php.net/manual/fr/function.trim.php
Bye Hawk
Posté : 24 janv. 2009, 15:28
par boobz
J'imagine que le champ qui te pose problème est REMARK, issu d'un textarea sans doute (c'est à partir d'un formulaire?)?! tu ne fais aucun traitement sur ce champ ?
Exact. Et non je ne fais aucun traitement pour le moment (c'est toute la question justement).
J'ai remarqué en testant que dans la bd (via phpmyadmin), le champ remark (varchar(255)) est entré exactement comme dans le textarea, ce qui ne me va pas car plus loin dans le code, je fais une requête sur cette table pour en extraire ces champs et les mettre dans un tableau qui doit pouvoir ensuite être traité dans un tableur. Et avec ce champs remark, le problème est que dès qu'il y a un saut à la ligne ça décale les colonnes (j'ai du texte par exemple dans la colonne quantity). Et évidemment ça ne va pas comme ça. Il faudra que je mette des guillemets pour séparer les champs mais même en faisant ça, ça ne changera pas le problème des espaces supplémentaires et des sauts de ligne. Tout ce dont j'ai besoin pour ce champ remark est un texte qui se suit sans rien de bizarre dedans. PLus tard, si nécessaire je pourrais toujours traiter cette chaîne.
Entre-temps j'ai essayé avec une regex avant d'insérer dans la bd :
$remark = preg_replace('/\s\s+/',' ', $remark);
J'ai fait quelques tests et ça semble presque marcher. Parfois j'ai une erreur de syntaxe dont je n'ai pas encore compris la source, mais on se rapproche. Je vais voir si trim() m'aide un peu plus ou pas.
tu peux montrer le reste du code?
Je pense que c'est inutile vu les explications données ci-dessus.
Merci d'avance
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Posté : 24 janv. 2009, 16:26
par blof
Bonjour,
<pre>
<?php
$txt = 'aaa bbb ccc ddd eee
fff ggg';
$txt = preg_replace('/ +/', ' ', $txt);
$txt = preg_replace('/[\r\n]+/', "\n", $txt);
echo $txt;
?>
</pre>
( Lorsqu'on insère des données dans une table, penser aussi aux "
injections SQL" )
Posté : 25 janv. 2009, 08:50
par boobz
Bonjour Blof et merci pour la suggestion. J'ai juste remplacé le "\n" par un espace ' ' car je ne veux pas de newline dans mon champ.
Ensuite j'ai fait quelques tests, plusieurs ont passé sans problème mais le dernier me sort l'erreur suivante :
Code : Tout sélectionner
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'espace un deux
trois \b \n en encore du texte \n ici du text ', '69', ' at line 15
J'y ai mis un \b (pour voir hein) et un \n. A la ligne 15, je ne vois pas où se trouve le problème... ça doit être la ligne 15 "ailleurs"...
Et en ce qui concerne les injections SQL, j'ai "sanitarizé" tous les champs d'entrée par une regexp. N'étant pas un spécialiste, j'espère que ça suffira.
Merci d'avance
Posté : 25 janv. 2009, 12:50
par blof
je ne veux pas de newline dans mon champ.
dans ce cas c'est plus simple :
<?php
// ici la connexion au serveur et la selection de la base de données ( mysql_connect() + mysql_select_db() )
$txt = 'aaa bbb ccc ddd eee
fff ggg';
$txt = preg_replace('/\s+/', ' ', $txt);
$txt = mysql_real_escape_string($txt);
echo $txt;
?>
Pour éviter les injections SQL, on utilise mysql_real_escape_string().
Posté : 25 janv. 2009, 15:19
par boobz
Merci ça marche très bien. Et merci aussi pour le conseil ; je crois qu'il va falloir repasser dans certaines parties du code ...
Posté : 25 janv. 2009, 15:39
par zeus
Modération :
boobz, 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
en haut à gauche de ce sujet.
Posté : 25 janv. 2009, 15:53
par boobz
Voilà, désolé je n'y avais pas pensé.