IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

Récupérer valeur d'un enregistrement saisi dans un autre formulaire


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut Récupérer valeur d'un enregistrement saisi dans un autre formulaire
    Bonjour,

    J'ai aujourd'hui un formulaire d'ajout d'un pays dans ma BDD et qui fonctionne.
    J'ai aussi un formulaire d'ajout d'une ville, lequel contient une liste des pays déjà enregistrés. On choisit le pays, l'identifiant du pays est bien enregistré avec la ville dans la BDD.

    Maintenant, j'ai ajouté un lien vers le formulaire d'ajout du pays dans le formulaire d'ajout de la ville, de manière à pouvoir ajouter un pays à la liste des pays déjà enregistrés.
    Ce lien fonctionne, le formulaire d'ajout du pays s'ouvre, je peux enregistrer un pays.

    Mais je fais comment pour revenir automatiquement au formulaire d'ajout de la ville avec ce pays nouvellement créé ajouté à la liste et automatiquement sélectionné ?

    Un peu de code pour comprendre ?
    FormulaireVille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // =============== Pays de la ville ========================
            $pays = new Pays;
            $liste_pays = $pays->fetchAll($pays->select()->order('pay_nom_francais'));
            $tab_pays = array();
            foreach($liste_pays as $un_pays)
            {
                $tab_pays[$un_pays->pay_id] = $un_pays->pay_nom_francais;
            }
     
            $sel_pays = new Zend_Form_Element_Select('vil_pays_id');
            $sel_pays    ->setLabel('Pays')
                        ->setMultiOptions($tab_pays)
                        ->setValue(1);
    Le setValue(1) c'est pour fixer la valeur par défaut à France.

    Script de vue ajouter.phtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // =============== Pays de la ville ========================
            $pays = new Pays;
            $liste_pays = $pays->fetchAll($pays->select()->order('pay_nom_francais'));
            $tab_pays = array();
            foreach($liste_pays as $un_pays)
            {
                $tab_pays[$un_pays->pay_id] = $un_pays->pay_nom_francais;
            }
     
            $sel_pays = new Zend_Form_Element_Select('vil_pays_id');
            $sel_pays    ->setLabel('Pays')
                        ->setMultiOptions($tab_pays)
                        ->setValue(1);
    Contrôleur PaysController (classique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function ajouterAction()
        {
            $this->view->title = "Ajouter un pays";
            $form = new FormulairePays();
            $form->submit->setLabel('Ajouter');
            $this->view->form = $form;
            if ($this->_request->isPost()) 
            {
                $formData = $this->_request->getPost();
                if ($form->isValid($formData)) 
                {
                    $pays = new Pays();
                    $row = $pays->createRow();
                    $row->pay_nom_francais = $form->getValue('pay_nom_francais');
                    $row->pay_nationalite_masc = $form->getValue('pay_nationalite_masc');
                    $row->pay_nationalite_fem = $form->getValue('pay_nationalite_fem');
                    $row->pay_code = $form->getValue('pay_code');
     
                    if($form->getValue('pay_commentaire') != '')
                    {
                        $row->pay_commentaire = $form->getValue('pay_commentaire');
                    }
     
                    $row->save();
     
                    $this->_redirect('/');
                } 
                else 
                {
                    $form->populate($formData);
                }
            }
        }
    J'imagine que ça doit se passer du côté de :
    En mettant une condition sur la cause de l'ouverture du formulaire peut-être ?
    Mais comment passer cette condition ou la récupérer du formulaire ville ?

    EDIT :
    J'ai réussi à rediriger vers le formulaire d'ajout de la ville.
    J'ai ajouté un paramètre à PaysController/ajouterAction et j'ai mis la condition pour rediriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function ajouterAction($origine = null)
        {
    ...
    if ($origine = 'ville')
                    {
                        $this->_redirect('/ville/ajouter');
                    }
                    else
                    {
                        $this->_redirect('/');
                    }
    Mais je ne vois vraiment pas comment garder ce qui a déjà été saisi dans le formulaire d'ajout de la ville (nom français, nom original) ni lui retourner l'id du pays ajouté.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Dans on cas, personnellement je met les infos en Session !

    Session que je détruit dès que je l'ai passé dans une variable de vue.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Et il y a une manière particulière de faire ça en Zend Framework ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Les sessions via ZF tu veux dire? Si c'est le cas oui c'est particulier (enfin pas vraiment compliqué on utilise juste pas de session_start(), etc...). Regarde ds la doc de Zend ya un exemple c'est vraiment pas compliqué

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Personnellement je me suis créer une petite classe, pour gérer les sessions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    <?php
     
    /**
     * Classe statique pour la gestions de sessions
     * ceci en méthode statique.
     *
     *
     * @copyright  2008Formatux Technologies
     * @author     info@formatux.be  Ernaelsten Gerard
     * @license    http://www.formatux.be/contact   Merci de prendre contact avec l'auteur
     * @version    Release: 0.3
     * @link       http://www.formatux.be
     * @since      Class available since Release 1.7.0
     * @deprecated Class deprecated in Release 2.0.0
     * @category   Pontaury
     * @package    My
     * @subpackage Session
     */
    class My_Session {
     
        protected  static $_nameSpace = 'default';
     
        /**
         * Methode permettant d'assigner une valeur à une session
         *@method setData
         *@return session
         */
        public static function setData($name, $data, $nameSpace = null) {
            if (isset($nameSpace)) {
                self::$_nameSpace = $nameSpace;
            }
            $session = new Zend_Session_Namespace(self::$_nameSpace);
            $session->$name = $data;
        }
     
        /**
         * Methode permettant de recuperer une valeur de session
         *@method getData
         *@return
         */
        public static function  getData($name, $nameSpace = null) {
            if (isset($nameSpace)) {
                self::$_nameSpace = $nameSpace;
            }
            $session = new Zend_Session_Namespace(self::$_nameSpace);
     
            return $session->$name;
        }
    }
     
    ?>


    du coup je fais ceci


    pour mettre la valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My_Session::set('valeur_post',$post);
    pour lire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    My_Session::get('valeur_post');

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Très pratique

    Juste une petite question, tu devrais pas ne pas fermer ta balise php?

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Le Header c'est pas la balise Head . Pense Google!
    Euh... Toujours pas compris !
    Tu me parles d'un "content_type" de la page.
    C'est une info qui se trouve en entête de page HTML non ?
    Bref...

    Un autre truc que je n'aime pas et que j'ai vu dans la classe My_Session de MaîtrePylos : Les accolades de bloc de code qui commencent à la fin de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class MaClass () {
        function MaFonction() {
            // du code
            foreach ($tableau as $cle => $valeur) {
                // du code
                if ($valeur == 'kekchose') {
                   // du code
                   // bon je vais arrêter là mais ça peut être pire !
                }
            }
        }
    }
    Avec un bloc de code un peu long et en contenant d'autres, va t'en retrouver à quelle accolade ouvrante correspond telle accolade fermante !

    Je préfère nettement mettre l'accolade ouvrante sous l'instruction qui a lancé le bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class MaClass () 
    {
        function MaFonction() 
        {
            // du code
            foreach ($tableau as $cle => $valeur) 
            {
                // du code
                if ($valeur == 'kekchose') 
                {
                   // du code
                   // bon je vais arrêter là mais ça peut être pire !
                }
            }
        }
    }
    Il est beaucoup plus facile de remonter l'écran en laissant la souris fixe pour trouver l'accolade ouvrante !

    C'est vrai qu'avec Eclipse tu cliques à côté d'une accolade et il entoure en pointillés gris l'accolade qui correspond mais bon, c'est quand même plus facile de voir où on va comme ça.

    Sinon pour revenir au sujet principal, la classe My_Session fonctionne très bien.
    Il a juste fallu que je la renomme MySession car apparemment Zend cherchait une classe Session dans un répertoire My.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    En cherchant à faire le même genre de truc qu'il y a presque un an, et après un voyage pénible sur la planète Seam qui m'a un peu perturbé, je retrouve la présente discussion qui semble dire que la solution de la classe proposée par Maître Pylos fonctionne bien. Il faudra que je retrouve à la maison ce code...

    Maintenant que je suis en ZF 1.11, y a t-il une meilleure méthode ou puis-je directement implémenter cette classe ?

    Concrètement, j'ai un formulaire avec une liste déroulante permettant de choisir un type d'établissement et un lien à côté de la liste pour ajouter un type d'établissement à la liste. Ce lien ouvre un formulaire de saisie et quand l'insertion est faite en BDD il faut revenir au premier formulaire, mettre à jour la liste déroulante et sélectionner automatiquement le type d'établissement qui vient d'être ajouté.
    Besoin classique et fréquent il me semble.
    Quelle est la meilleure méthode pour faire ça ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Je dirais vite fait.....

    Soit tu utilises une session pour propager l'info (ma classe est toujours d'actualité, ZF n'a pas modifié la gestion des sessions).

    Soit tu crées ton controller avec un paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    function menuDeroulantAction(){
     
    ($this->_request->getParam(item))?$this->view->item =$this->_request->getParam(item):$this->view->item = NULL
     
     
    .....;
     
    }
     
    function ajoutMenuDeroulant(){
     
    //insertion dans la db
     
    $this->_redirect('vers/menu-deroulant/item/'.$this->_request->getParam('ajoutItem'));
     
    }
    Vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <select .....>
     
    <option value='<?php echo $this->item ?>'
     
    ......

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    OK merci je pige le truc. Je reviens si ça coince.

    EDIT
    J'y suis arrivé mais il y a un truc qui m'embête alors je crée une autre discussion sur ce détail.

    EDIT2
    En fait, un autre problème est apparu avec la solution donnée dans l'autre discussion.
    J'en crée encore une nouvelle !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [AC-2003] Donner à un contrôle la valeur saisie dans un autre formulaire
    Par C15nantes dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/02/2015, 18h40
  2. Réponses: 6
    Dernier message: 10/11/2014, 20h06
  3. Réponses: 4
    Dernier message: 23/03/2014, 15h04
  4. Réponses: 13
    Dernier message: 21/08/2009, 17h56
  5. Réponses: 17
    Dernier message: 12/07/2006, 22h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo