Page 1 sur 1

Suppression de caractère lors de l'enregistrement

Posté : 19 déc. 2011, 16:03
par fsom
Bonjour,

J'ai un bout de code (ci-dessous) qui me permet d'enregistrer dans une table un champs de texte libre.
Problème : ce texte est ensuite utilisé dans un progiciel qui n'accepte pas un certain nombre de caractère (#/\' { ") etc...

Code : Tout sélectionner

if($commentaires!=""){ $commentaires = str_replace("Notez ici vos commentaires a envoyer a FDM...","",$commentaires); $q = "INSERT INTO commentaires (user_id,commentaires) VALUES ('".$user."','".str_replace("'","''",$commentaires)."') "; $dbs->query($q); $dbs->next_record(); }
Sachant que dans la zone de texte, il y a déja un message qui dit "inscrivez ici vos commentaire", j'ai fais en sorte que ce bout de texte soit effacé si le message est saisie à la suite.
Mais comment faire pour remplacer tous les caratère interdit par un tiret par exemple ?
Je précise que je ne souhaite aps "bloquer" l'envoi du commentaire mais juste remplacer les élements interdits par le progiciel.

Merci d'avance pour votre aide !

++

fsom

Re: Suppression de caractère lors de l'enregistrement

Posté : 19 déc. 2011, 16:11
par xTG
Regardes le premier exemple de la documentation de str_replace(), tu peux lui demander de remplacer plusieurs caractères en spécifiant un array de valeurs.

Re: Suppression de caractère lors de l'enregistrement

Posté : 19 déc. 2011, 16:26
par fosm
Donc, cela me donne quelque chose comme ca ?

Code : Tout sélectionner

if($commentaires!=""){ $commentaires = str_replace("Notez ici vos commentaires a envoyer a FDM...","",$commentaires); $interdits = array("/", "\", "#","""); $q = "INSERT INTO commentaires (user_id,commentaires) VALUES ('".$user."','".str_replace("'","''",$interdits,$commentaires)."') "; $dbs->query($q); $dbs->next_record(); }

Re: Suppression de caractère lors de l'enregistrement

Posté : 19 déc. 2011, 17:56
par fsom
Donc, j'ai fais mes modifications et j'obtiens le coade suivant :

Code : Tout sélectionner

if($commentaires!=""){ $commentaires = str_replace("Notez ici vos commentaires a envoyer a FDM...","",$commentaires); $interdits = array("'/'","'\'","'#'","'","'*'"); $q = "INSERT INTO commentaires (user_id,commentaires) VALUES ('".$user."','".str_replace($interdits,"''",$commentaires)."') "; $dbs->query($q); $dbs->next_record();
Par contre je n'arrive pas à interdire le " . J'ai essayé de le mettre entre "' et '" mais rien n'y fait.

Avez-vous une idée ?

Merci d'avance :)

Re: Suppression de caractère lors de l'enregistrement

Posté : 19 déc. 2011, 19:07
par xTG
C'est quoi ce mixte de quote et de double quote dans les interdits...
Je suis franchement étonné que tu ne te choppes pas une jolie erreur de syntaxe en exécutant ce code !
$interdits = array("/","\\","#","'","*",".");
$q = "INSERT INTO commentaires (user_id,commentaires) VALUES (".$dbs->quote($user).",".$dbs->quote(str_replace($interdits,"",$commentaires)).") ";
Voilà un code qui protège les champs injectés dans la requête et qui supprime les caractères interdits : / \ # ' * .

Re: Suppression de caractère lors de l'enregistrement

Posté : 20 déc. 2011, 11:37
par fsom
Bonjour !

Alors, j'ai installé le fragment de code proposé mais j'obtiens l'erreur suivante :

Fatal error: Call to undefined method ps_DB::quote() in /.../export_commandes.php on line 26

La ligne 26, c'est la ligne INSERT.

Avez-vous une idée du pourquoi ?

Sinon, je cherche aussi à supprimer les double quote mais lorsque je les insèrent dans l'array des caractères à proscrire, j'ai une erreur de syntaxe. Comment peut-on les indiquer ?

Merci beaucoup pour votre aide,

fsom

Re: Suppression de caractère lors de l'enregistrement

Posté : 22 déc. 2011, 10:50
par fsom
Bonjour,

Est-ce que l'on ne peux pas simplifier l'expression comme ci-dessous ?

Code : Tout sélectionner

$interdits = array("/","\\","#","'","*","."); $q = "INSERT INTO commentaires (user_id,commentaires) VALUES ('".$user."','".str_replace($interdits,"''",$commentaires)."') ";
Merci pour votre aide,

fsom