Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-07-2009 00:33:03

shiryu
Membre
Date d'inscription: 10-06-2009
Messages: 13

[Résolu][Zend_Db][1.8] Méthode save() et quotes

J'ai un souci avec le composant Zend_Db_Table_Row. A partir d'un formulaire, je récupère des données pour les insérer dans la base de données

Code:

// cree une instance de Zend_Db_Table
$motTable = new ORM_VocabulaireMots();

// prepare un nouvel enregistrement dans la base de donnees
$mot = $motTable ->createRow();

// recupere les infos du formulaire et on
// les insere dans l'instance de Zend_Db_Table_Row
$mot->mot = $this->getRequest()->getParam('mot');

// on enregistre l'information dans la base de donnees
$mot->save();

$this->getRequest()->getParam('mot') contient les informations du mot postées par l'utilisateur. Le souci se produit quand cette information contient des " et des '. Je pensais que la méthode save() savait les gérer.

Si les informations sont par exemple "L'heure", la méthode enregistre L'\heure dans ma base de données si le magic quotes de PHP est activé et L'heure s'il est désactivé (donc dans ce dernier cas c'est ok).

Si j'utilise " dans l'information, alors ça pose plus de problèmes. "L'heure "H"" par exemple enregistrera L\'heure \"H\" dans ma base de données avec les magic quotes activés et L'heure (sans "H") sans les magic quotes.

Ma question : comment faire fonctionner SAVE() pour qu'il enregistre les ' et les " correctement sans les \ ? J'ai vu que Zend_Db possède les méthode Quote et QuoteInto, mais cela ne sert que pour la création des requêtes SQL, pas sur une donnée extérieure. Or impossible d'agir sur la requête de save() directement.

J'ai passé des heures à tester diverses solutions et ai recherché les infos sur internet, mais je n'ai trouvé aucune solution.

Dernière modification par shiryu (11-07-2009 01:18:44)

Hors ligne

 

#2 10-07-2009 09:58:09

vg33
Membre
Date d'inscription: 30-07-2008
Messages: 46

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

As-tu essayé :

Code:

$mot->mot = $motTable->quote($this->getRequest()->getParam('mot'));

Hors ligne

 

#3 10-07-2009 11:40:08

shiryu
Membre
Date d'inscription: 10-06-2009
Messages: 13

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

Oui j'avais déjà essayé. "L'heure "H" par exemple me donne cela exactement : 'L\'heure \'. Il ajoute les quotes simples nécessaires pour les requêtes SQL, ce qui est parfait... mais uniquement si on travaille directement sur une requête SQL. C'est un peu ce que j'avais écrit dans mon premier post.

Voici l'expression exacte que j'ai utilisée (car quote n'est pas directement accessible de Zend_Db_Table)

Code:

$contenu = $this->getRequest()->getParam('mot');
$motTable->getDefaultAdapter()->quote($contenu);

Dernière modification par shiryu (10-07-2009 11:47:29)

Hors ligne

 

#4 11-07-2009 01:16:33

shiryu
Membre
Date d'inscription: 10-06-2009
Messages: 13

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

J'ai trouvé d'où venait le problème. Je me suis rendu compte que la méthode save() enregistrait correctement les données dans la base de données (qu'il y ait des ', " ou autre caractères bizarres), mais que c'était à l'affichage que cela ne fonctionnait plus.

Dans la vue, pour afficher correctement les données, il est important d'utiliser $this->escape($variable) pour convertir les caractères qui posent problème en entités HTML. C'est aussi très important pour la sécurité de l'application car ça permet d'empêcher un texte malveillant entré par un pirate d'attaquer l'application.

Hors ligne

 

#5 11-07-2009 09:22:07

vg33
Membre
Date d'inscription: 30-07-2008
Messages: 46

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

Il faut faire systématiquement $this->escape() pour afficher toutes données utilisateur. C'est en effet essentiel en sécurité, notamment pour éviter les attaques CSS.

Hors ligne

 

#6 11-07-2009 13:46:31

shiryu
Membre
Date d'inscription: 10-06-2009
Messages: 13

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

Exactement. Je voulais aussi attirer l'attention sur le fait que "toutes données utilisateurs" ne veut pas forcément dire toutes les variables de la vue.

J'ai par exemple des Zend_Form_Element que j'envoie à la vue pour afficher mes éléments où je veux sans avoir à gérer les decorators très complexes du Zend_Form. Dans ce cas, si on fait un $this->escape sur la variable contenant le Zend_Form_Element, il y aura le code html affiché à l'écran.

Hors ligne

 

#7 11-07-2009 13:59:47

vg33
Membre
Date d'inscription: 30-07-2008
Messages: 46

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

Ce n'est pas le Zend_Form_Element que tu dois échapper, mais sa valeur.

Hors ligne

 

#8 12-07-2009 00:30:11

shiryu
Membre
Date d'inscription: 10-06-2009
Messages: 13

Re: [Résolu][Zend_Db][1.8] Méthode save() et quotes

oui je sais bien. Cela est fait dans le controlleur, pas dans la vue.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages