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

Langage PHP Discussion :

[POO] Transmission des données d'un formulaire à une classe


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut [POO] Transmission des données d'un formulaire à une classe
    Bonjour,

    je débute en php plutôt habitué au java et au pattern mvc j'essaie de travaillé en php en conservant cette architecture. Pour mes tâches d'administration je fait face à une légère difficulté : la transmission des données. Je vais m'explique plus concrètement.

    Voici ma vue ajoutLigue.php

    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
     
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    	<title>Ajout d'un ligue</title>
    </head>
    <body>
    	<center>
    		<div>
    			<span>Ajout d'une ligue</span>
    		</div>
    		<div>
    			<form class="form_ligue" name="ajout_ligue" action="ligueService.php" method="POST">
    				<label from="nomLigue">Nom de la ligue</label>
    				<input type="text" id=nomLigue name="nomLigue" maxlength="30"  tabindex="1"/><br />
    				<label from="pays">Pays</label>
    				<select name="pays" id="pays" tabindex="2">
    					...					
    				</select><br />
    				<input type="submit" name="envoyer" id="envoyer"/>
    				<input type="hidden" name="ok" value="1" />	
    			</form>
    		</div>
    	</center>
    </body>
    </html>
    voici mon contrôleur ligueService.php

    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
     
    <?php
    	class LigueService {
     
    		private $ligueDAO;
     
    		function ligueService() {
    			$this->ligueDAO	= new LigueDAO();
    		}
     
    		public function getLigues() {
    			$resultat = $this->ligueDAO->getLigues();
    			$liste = array();
    			while($data = mysql_fetch_assoc($resultat))
    			{
    				$ligue = new Ligue();
    				$ligue->getPays()->setPays($data['pays']);
    				$ligue->setNomLigue($data['nomLigue']);
    			}
    		} 
     
    		public function ajouterLigue() {
     
    		}
    	}
    ?>
    Je ne sais pas comment transmettre les données une fois le bouton valider cliquer de mon formulaire à ma méthode. J'imagine que ça va passer par l'attribut action mais je me doute bien que ce que j'ai mis est insuffisant. Et puis l'autre question est une fois la méthode terminé comment retourner un résultat à mes pages car j'imagine que cela ne fera pas comme par magie.

    Je pourrai développer en php procédural et là je vois comment transmettre les donées mais en php objet je suis un peu perdu. Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    Citation Envoyé par la_praline Voir le message
    Je ne sais pas comment transmettre les données une fois le bouton valider cliquer de mon formulaire à ma méthode. J'imagine que ça va passer par l'attribut action mais je me doute bien que ce que j'ai mis est insuffisant. Et puis l'autre question est une fois la méthode terminé comment retourner un résultat à mes pages car j'imagine que cela ne fera pas comme par magie.
    Houlà, c'est le b.a.ba qui manque. Pour faire simple, regardes ici.

    Tes données sont transmises en fonction de 2 paramètres du formulaire :
    - method="POST|GET" correspondant à 2 tableaux globaux dans PHP : $_POST|$_GET et
    - action="script.php" Nom du script appelé sur click du bouton type="submit".

    ATTENTION : le PHP est sensible à la casse.
    Si tu souhaites utiliser des classes pour tes traitements, il faut d'abord les instancier. Donc pour utiliser ta classe LigueService il va falloir d'abord l'instancier de préférence dans un script différent : $ls = new LigueService();Ensuite tu passes un tableau de valeurs à ta fonction ajouterLigue(). Valeurs extraites de l'un des 2 tableaux $_POST|$_GET et tu fais le traitement approprié.

    Quelques notes :
    L'attribut from du tag label n'existe pas : c'est forPour envoyer des données au client à partir du PHP tu as echo avec différentes notations (STRING, HEREDOC, NOWDOC)
    Tu eux aussi séparer entièrement le code PHP du code HTML et là pas besoin d'echo mais peut-être d'un buffer de sortie.

    Bref, tu pars de loin donc il est impossible de te faire une réponse adéquate tant le sujet est vaste.
    Mais la bonne nouvelle c'est que tu es sur le bon site pour démarrer.

    Je repris ta classe :
    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
    <?php
     
    class LigueService
    {
       private $ligueDAO;
     
       function __construct() {
          $this->ligueDAO = new LigueDAO();
       }
     
       /* En PHP on utilise __construct(), la manière de java c'est déprécié
       function ligueService() {
          $this->ligueDAO   = new LigueDAO();
       }
       */
       function getLigues() {
          $resultat = $this->ligueDAO->getLigues();
          $liste = array();
          while($data = mysql_fetch_assoc($resultat)) {
             $ligue = new Ligue();
             $ligue->getPays()->setPays($data['pays']); // c'est étrange getPays->setPays...
             $ligue->setNomLigue($data['nomLigue']);
          }
       }
     
       /**
        * Clés : nom pays...
        * @param array $p Array(cle => valeur)
        * @return bool
        */
       function ajouterLigue(array $p) {
          // base de données : vérification, création...
     
       }
    }
    ?>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut
    J'aurai dû être plus clair dans mon premier message.
    Dans le php procédural je connais l'utilité des $_POST et $_GET.

    Ce que j'aimerai c'est que l'ensemble des valeurs de champs renseignés dans le formulaire soit passé dans la méthode ajouterLigue() de la classe ligueService.

    Puis retransmettre à la fin de ma fonction des messages d'erreurs ou l'appel à une autre page. Comme je l'ai dis en procédural je sais le faire mais le fait d'être en POO me perturbe je suis un peu perdu.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu peux faire comme ça :
    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
     
    <?php
    include 'LigueService.php';
     
    $data['nom'] = (isset($_POST['nom']) ? : $_POST['nom'] : null;
    $data['pays'] = (isset($_POST['pays']) ? : $_POST['pays'] : null;
     
    $ls = new LigueService();
     
    $exec = $ls->ajouterLigue($data);
    if ($exec) {
       header('Location:...'); // redirection en cas de succès
    }
    else {
     
    }
    ?>
    Un exemple parmi plein d'autres.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut
    Ce code tu l'insères dans la vue ?

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Non sûrment pas dans la vue mais dans un contrôleur.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut
    Donc si je comprends bien la différence entre le mvc java et le mvc php en mvc php le formulaire contenu dans ma vue fais appel à un contrôleur codé en procédural qui fait appel à une classe. En gros j'ai un contrôleur intermédiaire c'est bien ça ?

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par la_praline Voir le message
    Donc si je comprends bien la différence entre le mvc java et le mvc php en mvc php le formulaire contenu dans ma vue fais appel à un contrôleur codé en procédural qui fait appel à une classe. En gros j'ai un contrôleur intermédiaire c'est bien ça ?
    Non pas obligatoirement, c'est un choix à faire. Le contrôleur peut très bien être un objet avec des fonctions (static ou pas) listant toutes les actions contrôlées.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    class LigueController {
       static function ajouterAction() {
     
       }
     
       static function listerAction() {
     
       }
    }
    ?>
    Regardes comment les grands frameworks PHP (Yii, Symfony...) gèrent ces aspects. En gros tu sépares chaque requête en tois éléments : Request -> Controller -> Response. Et dans le flot du traitement tu y ajoutes Model et View.
    Chacun des éléments peut lui aussi être une classe. Tu peux t'affranchir complètement du procédural comme en Java. D'ailleurs, tu devrais être plus à l'aise venant du monde java avec cette approche que du procédural pur et dur.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/06/2015, 12h05
  2. [WD17] poo : comportement des membres globaux (static) d'une classe
    Par lmontout dans le forum WinDev
    Réponses: 5
    Dernier message: 26/12/2012, 12h21
  3. [POO] Insertion des données d'un formulaire en BDD
    Par adebo dans le forum Langage
    Réponses: 7
    Dernier message: 24/11/2011, 11h08
  4. Réponses: 3
    Dernier message: 31/01/2009, 17h14
  5. Réponses: 3
    Dernier message: 23/04/2006, 12h14

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