Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/11/2011, 10h20   #1
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 180
Points : 36
Points : 36
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 :
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 :
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
la_praline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 13h44   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
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 :
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...
 
   }
}
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h04   #3
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 180
Points : 36
Points : 36
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.
la_praline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h15   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Tu peux faire comme ça :
Code :
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h39   #5
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 180
Points : 36
Points : 36
Ce code tu l'insères dans la vue ?
la_praline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h52   #6
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Non sûrment pas dans la vue mais dans un contrôleur.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 14h57   #7
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 180
Points : 36
Points : 36
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 ?
la_praline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 15h09   #8
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
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 :
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h54.


 
 
 
 
Partenaires

Hébergement Web