Suppression de caractère lors de l'enregistrement

fsom
Invité n'ayant pas de compte PHPfrance

19 déc. 2011, 16:03

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

ViPHP
xTG
ViPHP | 7331 Messages

19 déc. 2011, 16:11

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.

fosm
Invité n'ayant pas de compte PHPfrance

19 déc. 2011, 16:26

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(); }

fsom
Invité n'ayant pas de compte PHPfrance

19 déc. 2011, 17:56

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

ViPHP
xTG
ViPHP | 7331 Messages

19 déc. 2011, 19:07

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 : / \ # ' * .

fsom
Invité n'ayant pas de compte PHPfrance

20 déc. 2011, 11:37

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

fsom
Invité n'ayant pas de compte PHPfrance

22 déc. 2011, 10:50

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