Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-04-2008 17:44:31

JiBe
Membre
Lieu: Brabant Wallon, Belgique
Date d'inscription: 27-06-2007
Messages: 16

[Résolu]échappement apostrophe

Bonjour,

Lors de l'enregistrement dans la base de donnée, j'utilise un modèle qui étend Zend_Db_Table_abstract.
Connexion avec PDO_MYSQL.

Lorsque j'enregistre "Hall d'entrée", je l'affiche dans la vue avec zend_form et j'obtient "Hall d\'entrée"

bootstrap

Code:

// Set up layout
Zend_Layout::startMvc(array('setEncode' => 'htmlentities', 'setEncoding' => 'UTF-8'));

fichier ini pour Zend_form

Code:

[element]
name = "releves_photovoltaique"
;action = "/releves_photovoltaique/save"
method = "post"
attribs.class = "crud_form"

;elements.id.type = "hidden"
;elements.id.options.label = "#"
;elements.id.list = true

elements.client_id.type = "select"
elements.client_id.options.label = "Client"

elements.grd.type = "text"
elements.grd.options.label = "Grd"

elements.fournisseur_energie.type = "text"
elements.fournisseur_energie.options.label = "Fournisseur d'énergie"

elements.code_ean.type = "text"
elements.code_ean.options.label = "EAN"

elements.raccordement_electrique_id.type = "select"
elements.raccordement_electrique_id.options.label = "Type de raccordement"

elements.numero_compteur.type = "text"
elements.numero_compteur.options.label = "Numéro de compteur"

elements.consommation_jour.type = "text"
elements.consommation_jour.options.label = "Consommation jour"

elements.consommation_nuit.type = "text"
elements.consommation_nuit.options.label = "Consommation nuit"

elements.type_emplacement_id.type = "select"
elements.type_emplacement_id.options.label = "Emplacement"

elements.type_recouvrement_id.type = "select"
elements.type_recouvrement_id.options.label = "Recouvrement"

elements.orientation.type = "text"
elements.orientation.options.label = "Orientation"
elements.orientation.validators.int.validator = "Int"

elements.inclinaison.type = "text"
elements.inclinaison.options.label = "Inclinaison"
elements.inclinaison.validators.int.validator = "Int"

elements.surface_disponible.type = "text"
elements.surface_disponible.options.label = "Surface disponible"

elements.photo_emplacement.type = "checkbox"
elements.photo_emplacement.options.label = "Photos"

elements.emplacement_compteur.type = "text"
elements.emplacement_compteur.options.label = "Emplacement du compteur"

elements.emplacement_coffret.type = "text"
elements.emplacement_coffret.options.label = "Emplacement du coffret"

elements.hauteur_sous_corniche.type = "text"
elements.hauteur_sous_corniche.options.label = "Hauteur sous corniche"
elements.hauteur_sous_corniche.validators.float.validator = "Float"

elements.type_pose_id.type = "select"
elements.type_pose_id.options.label = "Type de pose"

elements.puissance_desiree.type = "text"
elements.puissance_desiree.options.label = "Puissance désirée"

elements.pvdatabase.type = "checkbox"
elements.pvdatabase.options.label = "PV Database"

elements.etat_emplacement_id.type = "select"
elements.etat_emplacement_id.options.label = "Etat de l'emplacement"

elements.submit.type = "submit"
elements.submit.options.label = "Enregistrer"

elementFilters.trim = "StringTrim"

le modèle

Code:

<?php

/**
 * RelevePhotovoltaiqueModel
 *  
 * @author Thomas Jacquart    
 * @version 0.1
 */

require_once 'Soltom/Db/Table.php';

class RelevesPhotovoltaiqueModel extends Soltom_Db_Table {
    /**
     * The default table name 
     */
    protected $_name = 'releves_photovoltaique';

}

La classe étendue

Code:

<?php

/**
 * Class personnalisée pour les enregistrements des données de type CRUD
 *  
 * @author Thomas Jacquart    
 * @version 0.1
 */

require_once 'Zend/Db/Table/Abstract.php';

class Soltom_Db_Table extends Zend_Db_Table_Abstract {
    
    /**
     * Retourne tous les résultats pour l'affichage dans la liste
     * 
     * @return rowset
     */
    public function fetchForList() {
        return $this->fetchAll();
    }
    
    /**
     * Retourne l'information d'un élément identifié par la clé primaire 'ID'
     * 
     * @return row
     */
    public function fetchById($id) {
        // TODO test de la valeur de id
        // TODO retour que si un élément existe
        $row = $this->find($id)->current();
        return $row;
    }
    
    function create($data) {
        $row = $this->createRow($data);
        return $row->save();
    }
    
    public function save($id, $data)    {
        $row = $this->fetchById($id);
        $row->setFromArray($data);
        return $row->save();
    }
    
    public function deleteById($id) {
        $row = $this->fetchById($id);
        if (isset($row)) {
            return $row->delete();
        } else {
            return $id;
        }
    }        


}

Action controller

Code:

<?php

/**
 * ArticlesController
 * 
 * @author Thomas Jacquart
 * @version 0.1
 */

require_once 'Zend/Controller/Action.php';
require_once 'Zend/Form.php';

class Soltom_Controller_Action extends Zend_Controller_Action {
    protected $session;
    protected $form;
    protected $controllerName;
    protected $actionName;
    protected $model;
    protected $iniForm;
    
    public function init() {
        $this->controllerName = $this->_request->getControllerName();
        $this->actionName = $this->_request->getActionName();
        $this->session = new Zend_Session_Namespace($this->controllerName);
        $this->iniForm = new Zend_Config_Ini($this->controllerName . '.ini', 'element');
        $this->view->controllerName = $this->controllerName;
        $this->view->actionName = $this->actionName;
    }
    
...    
    public function viewAction() {
        $id = $this->getParamId();
        $data = $this->model->fetchById($id);
        
        // TODO test que l'enregistrement existe sinon retour list avec message d'erreur    
        $this->session->formAction = '/' . $this->controllerName . '/save/id/' . $id; 
        $this->createForm();
    
        // affectation des valeurs de la base de donnée aux éléments du formulaire
        foreach ($this->form->getElements() as $name => $element) {
            if (isset($data->$name)) {
                $element->setValue($data->$name);
            }
        }
        
        $this->view->form = $this->form;
        $this->render('form');
    }
    
    protected function createForm() {
        // TODO récupération des paramètres depuis un fichier de configuration
        $this->form = new Zend_Form($this->iniForm);
        $this->form->setAction($this->session->formAction);
    }
    
    protected function getParamId() {
        $id = $this->_request->getParam('id');
        if ($id === 'new') {
            // TODO nouvel enregistrement
            $id = 0;
        }
        elseif ($id <= 0) {
            // TODO message d'erreur
            $this->_redirect($this->controllerName . '/list');
        }
        return $id;
    }
}

Une idée ?

Merci

JiBe

Dernière modification par JiBe (08-04-2008 14:53:02)

Hors ligne

 

#2 07-04-2008 18:28:49

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: [Résolu]échappement apostrophe

Moi j'écris simplement dans ma méthodes init() de mon controleur la ligne suivante et ça marche

Code:

$this->view->setEscape('utf8_encode');

Bon travail

Hors ligne

 

#3 07-04-2008 20:35:15

JiBe
Membre
Lieu: Brabant Wallon, Belgique
Date d'inscription: 27-06-2007
Messages: 16

Re: [Résolu]échappement apostrophe

ziedb a écrit:

Moi j'écris simplement dans ma méthodes init() de mon controleur la ligne suivante et ça marche

Code:

$this->view->setEscape('utf8_encode');

Bon travail

j'ai déjà les encodages pour l'utf8, le problème vient des données qui remontent de la base MySQL. Il y a l'échappement de l'apostrophe.

En son temps j'utilisait le mysql_real_escape() lors de l'insertion des données.

Ici avec ZF je sèche un peu.

Je pourrais écrire une classe qui étend pdo_mysql et ajouter le real_escape mais je suis convaincu qu'il y a une autre solution.

Autre idées ?

JiBe

Hors ligne

 

#4 08-04-2008 09:20:00

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu]échappement apostrophe

Bonjour,

T'as regardé si tu n'as pas les magic_quote activés sur ton serveur ? (regarde dans ton phpinfo).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 08-04-2008 09:48:15

JiBe
Membre
Lieu: Brabant Wallon, Belgique
Date d'inscription: 27-06-2007
Messages: 16

Re: [Résolu]échappement apostrophe

philippe a écrit:

Bonjour,

T'as regardé si tu n'as pas les magic_quote activés sur ton serveur ? (regarde dans ton phpinfo).

A+, Philippe

Ben non j'avais pas regardé !

C'est dans ses moment là qu'on se sent seul wink

J'en ai profité pour ajuster le php.ini de MAMP et du httpd.conf, quasi tous les modules sont activés.

Merci Philippe.

A+

JiBe

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