Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello à tous,
je me pose une simple question mais je ne sais pas quelle solution utiliser. D'ou ma demande.
La plupart des hébergeurs ont la directives magic quote activé (qui rajoute des backslashes devant ' ou ").
Sur un hébergement mutualisé, il est en général impossible de la désactivé.
Donc lors d'un post, les champs qui contiennent ces caractères spéciaux sont échappés. Donc la valeur en base contient les backslashes.
On arrive à ma question.
Est il mieux selon vous d'échapper les données en sorties donc lors de l'utilisation des valeurs avec stripslashes ou lors de l'ajout en base ?
Dans le 1er cas cela inclut qu'a chaque affichage d'élément texte il faudra appeler stripslashes (qui alourdit le code).
Dans le 2e cas, lors d'un insert (via une classe qui étend Zend_Db_Table_Abstract) il faudra enlever les backslashes (tj grace à stripslashes). Mais dans ce cas y aura t'il des soucis pour l'insertion ou Zend le gère lui même. (Pour info, j'ai fais un test et je n'ai pas l'impression que cela pose problème).
Donc selon vous qu'elle est la meilleure stratégie à adopter ?
D'avance merci
Dernière modification par bucheron (05-11-2008 16:28:41)
Hors ligne
Déjà il faut TOUJOURS échapper avant un insert en BDD, ceci afin d'éviter une injection SQL.
Zend_DB te fournis plusieurs méthodes pour rle faire automatiquement et en toute transparence, que magic quote soit activé ou non donc pas trop de pb de ce coté là
Ensuite, si tes données sont correctement insérées en BDD, tu n'a plus besoin de faire des stripslashes en sortie d'écran.
Hors ligne
ok, donc la 2e solution est mieux (c'est ce que je pensais)
par contre tu parles de méthodes automatique, est ce que tu pourrais me les indiquer ?
merci
Hors ligne
Hello,
Chaque adaptateur de BDD fournit :
quote() => $name = $db->quote("O'Reilly"); quoteInto() => $db->quoteInto("SELECT * FROM bugs WHERE reported_by = ?", "O'Reilly"); quoteIdentifier() => sql = "SELECT * FROM " . $db->quoteIdentifier("order");
Si tu utilises Zend_Db_Table ou Zend_Db_Table_Row, ce que tu fournis est échappé. Ex :
$table = new Bugs(); $data = array('created_on' => '2007-03-22', 'bug_description' => "qqch avec des 'quotes' ", 'bug_status' => 'NEW'); $table->insert($data);
A+
Hors ligne
en effet j'utilise Zend_Db_Table.
En fait je récupère mes données post puis j'appel mon insert.
Dans ce que tu m'expliquais je pensais qu'il existait une méthode à appeler avant l'insert pour échapper les \ d'une chaine ?
PS: J'ai toujours la solution d'appeler la fct stripslashes pour chacune de mes variables Posts
Hors ligne
Hello,
Non effectivement, tu dois enlever ce qui aura été mis par magic_quote.
A+
Dernière modification par mikaelkael (05-11-2008 15:44:56)
Hors ligne
ok impec merci beaucoup
Hors ligne