PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#26 26-06-2010 17:09:14

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Les variables du $_POST seront en effet mélangées, mais cela on ne peut rien y faire puisque c'est un tableau super-global...
Donc à toi de nommer tes champs pour qu'ils soient uniques.

Hors ligne

#27 27-06-2010 21:26:31

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonjour,

En fait pour répondre à ta question, plusieurs formulaires peuvent exister sur la même page en PHP.
Mettons par exemple que tu veuilles faire cohabiter 3 formulaires sur la même page et que les données utilisées soient croisées.
La première chose à savoir c'est que pour rendre le traitement de ta page possible, tu ne pourras pas et il ne faudra pas les afficher tous en même temps principalement à cause du submit qui doit rester unique. Pour rendre l'algorithme plus concis et simple pour mon exemple, je vais définir une fonction pour chaque formulaire à afficher à savoir display_form1() pour le premier formulaire, display_form2() pour le second et display_form3() pour le 3e. Toujours pour mon exemple je vais appeler $var_1 la variable caractéristique du formulaire 1 obligatoirement présente si le bouton submit à été utilisé sur le formulaire 1 si il a été correctement rempli (code de vérification non présent ici), et de même pour chaque formulaire avec $var_2 et $var_3. Pour l'exemple ces variables sont des entiers. On appellera $var_1_x l'ensemble des variables transmises par le formulaire 1 lors de sa soumission. De même pour $var_2_x et $var_3_x


// Nom fichier: exemple.php
if (!isset($_POST['var_1'])&&!isset($_POST['var_2'])&&!isset($_POST['var_3'])){display_form1();exit;}
if (isset($_POST['var_1'])&&!isset($_POST['var_2'])){if (!empty($_POST['var_1'])){$var_1=int($_POST['var_1']);display_form2($var_1_x);exit;}} // à inclure la récupération de toutes les variables du form 1 pour les passer dans la fontion. Cela peut être un tableau.
if (isset($_POST['var_2'])&&!isset($_POST['var_3'])){if (!empty($_POST['var_2'])){$var_2=int($_POST['var_2']);display_form3($var_2_x);exit;}} // à inclure la récupération de toutes les variables du form 2 pour les passer dans la fontion. Cela peut être un tableau.
if (isset($_POST['var_3'])){if (!empty($_POST['var_3'])){
     $var_3=int($_POST['var_3']);
     //  Inclure ici le traitement final de l'ensemble des variables des 3 formulaires
}
 

Pour que le code ci-dessus fonctionne faudra respecter les choses suivantes:
- Les 3 formulaires doivent transmettre les données en POST et Les 3 formulaires doivent pointer sur leur propre fichier pour le traitement :

<form action="exemple.php" method="post">

- Toutes les variables du formulaire précédent passées dans une fonction doivent être rajoutées dynamiquement via un champ hidden de formulaire de manière à être retransmises et ainsi les rendre disponibles lors du traitement final des 3 formulaires.

J'espère que cela t'auras aidé. wink

Jc

PS: Avec cette structure il est d'ailleurs possible de construire les formulaires 2 et 3 dynamiquement en fonction des paramètres choisis au formulaire(s) précédent(s).

Dernière modification par Jc (27-06-2010 22:14:49)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#28 27-06-2010 22:07:42

pitou
Membre
Inscription : 21-05-2010
Messages : 25

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonsoir JC,
Merci pour ton aide, je suis rentré tard ce soir et il faudra que je regarde ce que tu me dis un peu plus tard. Je te tiendrai au courant.

Hors ligne

#29 27-06-2010 22:31:17

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonsoir,

Je t'en prie.
Vu que tu as écris que tu as une certaine connaissance dans la conception d'applications, je vais essayer de t'éclairer sur la structure MVC, notamment quand tu as écris cela un peu plus haut

pitou a écrit :

Bonjour Maljuna Kris,
J'ai essayé de comprendre mais je ne vois pas ce que ça peut résoudre au problème et à la contrainte inhérente au $post qui est propre à PHP.
D'autre part, quelle que soit l'architecture, le navigateur interprète des pages, il faudra donc bien créer des pages. Ou alors peut-être que le MVC propose un viewer spécifique à la place du navigateur tel que Mozilla?
Peut-être que je n'ai pas bien compris et sur la base de mon exemple (voir mon code) tu pourrais me montrer comment faire.
Merci d'avance pour concrétiser ce que tu proposes.

Une page d'un navigateur, et ce, quelque soit le language de prog utilisé, n'associe pas forcément une sortie d'affichage utilisateur. Une page, associée physiquement à un nom de fichier, peut contenir par exemple une classe PHP de gestion de connexion, une bibliothéque de fonctions PHP (équivalent DLL sur les apli autonomes),etc... . Une Structure MVC dans les technologies web, est une structure qui va dissocier la gestion du modèle, de la vue et du contrôleur dans des pages dédiées, la structure usuelle étant d'associer les 3 sur une même page.

Tes exemples de codes précédents illustrent une structure usuelle, la mienne se rapproche d'une conception MVC. En effet la page exemple.php n'affiche rien en elle-même, elle sert juste à contrôler les paramètres, à commander l'affichage, et à traiter les paramètres finaux. C'est donc une page contrôleur type. Pour que l'architecture MVC soit respectée dans mon exemple, il faut développer les fonctions d'affichage sur une autre page par exemple display_forms.php et les associer à la page exemple.php comme illustré dans le code ci-dessous.

Ensuite pour peu que le traitement final de tes paramètres necessite un traitement base de données, tu places toutes tes fonctions de traitement base de données dans un fichier par ex traitements.php
que tu places aussi en include dans ta page exemple.php. Ainsi tu peux également mettre à jour l'affichage d'un formulaire sans toucher au code de traitement et vice-versa.


// fichier exemple.php
 include("display_forms.php");
 include("traitements.php");
 // mon code exemple précédent.
 

C'est comme ça qu'une bonne structure de programmation peut résoudre tes problèmes.;)

Voilà.

Jc

Dernière modification par Jc (27-06-2010 22:54:07)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#30 28-06-2010 09:07:11

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Pour essayer de clarifier encore un peu, je crois qu'il faut utiliser le bon vocabulaire.
En simplifaint à l'extrême, de fait, dans le PD MVC, la notion la plus proche de celle de page correspond à la VUE.
Le MODÈLE est l'ensemble des scripts assurant l'interface avec les données (MySQL le plus souvent) et le CONTROLEUR c'est le chef d'orchestre qui assure la communication entre les deux autres et le navigateur client.
En dissociant bien ces trois domaines on obtient un code plus facile à maintenir et plus commode à confier à plusieurs personnes (équipes) pour des développements en processus parallèles.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#31 28-06-2010 10:07:14

pitou
Membre
Inscription : 21-05-2010
Messages : 25

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonjour,
Merci pour les exemples et les précisions de vocabulaire.
Je pense avoir compris mais je crois être un peu perdu face à mon exemple.
Si j'ai bien compris l'approche consiste à faire une page qui n'affiche rien et qui seulement teste des conditions de valeurs de variables afin d'appeler les fonctions de traitement correspondante aux résultats des conditions trouvées. Cette page sert comme tu le dis une page contrôleur.
Mais pour revenir à mon exemple très simple il y a comme préambule le fait qu'il faudra:
1) Demander la saisie des données clients au travers d'un formulaire unique,
2) Demander à l'utilisateur ce qu'il veut faire sachant que les traitements ne dépendent pas du résultat de la saisie des données.
En conséquence, quelle que soit l'architecture envisagée, je ne vois pas comment éviter de faire deux étapes:
1) Faire une page de saisie des données clients, avec vue du formulaire, saisie et passage des valeurs des données client,
2) Faire une page de contrôle de formulaires multiples avec récupération des données par $_post et appel des fonctions de traitement correspondant au libre choix de l'utiliateur (non conditionné par des valeurs particulières).

Je tourne en rond et je ne vois toujours pas comment ne pas avoir deux pages distinctes pour dialoguer avec l'utilisateur. Encore une fois j'aurai voulu avoir tout sur une seule page avec formulaires multiples (saisie des données et choix de traitements) mais la contrainte liée à la récupération des données par $_post impose deux étapes et deux pages distinctes.
La seule chose qu'on puisse imaginer, pour n'avoir qu'une page à gérer et à maintenir, c'est de présenter la page avec des vues différentes en jouant sur les champs cachés suivant que les données clients ont été ou non déjà saisies (c'est je pense ce que vous appelez générer dynamiquement les formulaires). Au départ on ne montre que la saisie des données clients , le reste étant caché (formulaire de saisie), par la suite retour sur la même page mais cette fois avec vue des autres formulaires de traitement (formulaire d'affichage client, de saisie client, de mise à jour client, etc.....). Le tout conditionné par une variable d'affichage (false ou true) suivant le cas. 
Mais dans la réalité pour l'utilisateur cela revient toujours au même, il aura toujours deux étapes à faire car les choix de traitement dépendent de son choix et non pas de conditions.
Ai-je bien compris?
Question: Est-il possible de modifier dynamiquement les attributs des champs (cachés ou visibles)? Ou bien comment faire pour que les champs s'affichent ou pas suivant la variable d'affichage?

Hors ligne

#32 28-06-2010 10:25:56

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonjour,

Désolé c'est de ma faute je suis allé visiblement trop vite, et par conséquent tu mélanges un peu tout.
Pour répondre à ton premier 1) la page exemple.php y réponds à la ligne 2 : Elle teste qu'aucun formulaire n'a été soumis à la page pour afficher le Premier Formulaire via display_form1(). De plus cette fonction tu peux très bien la déclarer sur la même page, elle devra simplement se faire avant le reste pour qu'elle soit disponible au moment de l'appel.
Concernant le 2) Tu peux très bien au sein de ton premier formulaire via un choix d'options demander à l'utilisateur ce qu'il désire faire. Lors de la validation de ton formulaire ton fichier exemple.php va traiter les infos et afficher ton formulaire n°2 en conséquence.

De plus quand tu dis

pitou a écrit :

...mais la contrainte liée à la récupération des données par $_post impose deux étapes et deux pages distinctes.

c'est que tu n'as pas réalisé que mon exemple sert à te démontrer le contraire vu que les 3 formulaires envoyent leur variables à la même page (exemple.php) et y sont récupérés par $_POST.


Si tu n'as toujours pas bien compris, n'hésites pas à demander.

Dernière modification par Jc (28-06-2010 10:35:11)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#33 28-06-2010 10:45:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Re,

Concernant ta vision de la gestion dynamique ce n'est pas tout à fait ça. Afficher l'ensemble des possibilités sur une page et en cacher tout ou partie selon la valeur de certains paramètres est lourd et charge inutilement la page avec des données non pertinentes. Une vrai gestion dynamique gère l'affichage en fonction de paramètres. Exemple pour mieux comprendre:


if ($var1 <0 ){
  display_partie_1();
} elseif ($var1 >1 && $var1 <10) {
  display_partie_2();
} elseif ($var1 >=10){
  display_partie_3();
}
 

Ici le code d'affichage est généré à la volée en fonction d'un paramètre. Le code affiché correspondra uniquement à ce que l'on a besoin de voir.

wink

Dernière modification par Jc (28-06-2010 10:46:13)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#34 28-06-2010 10:57:16

pitou
Membre
Inscription : 21-05-2010
Messages : 25

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonjour JC,
Merci beaucoup, je pense avoir bien compris maintenant et tu as sans doute raison je pourrai anticiper sur le choix des traitements en demandant un choix multiple à l'utilisateur dès le premier formulaire et qui sera également passé en variable, après quoi on peut effectivement conditionner automatiquement les traitements.
Par contre es-tu sur qu'on puisse utiliser $_post dans la condition de départ, elle ne pourra être vérifiée qu'à partir du moment où l'utilisateur aura répondu au premier formulaire ligne2?
 


if (!isset($_POST['var_1'])&&!isset($_POST['var_2'])&&!isset($_POST['var_3'])){display_form1();exit;}

Hors ligne

#35 28-06-2010 11:13:37

pitou
Membre
Inscription : 21-05-2010
Messages : 25

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

RE,
Oui en fait s'agissant de la gestion dynamique des pages tu conditionnes l'appel de l'une ou l'autre suivant des variables qui peuvent être dynamiquement calculées ou modifiées. C'et clair.
Pour aller plus loin j'avais dans l'idée de générer des pages dynamiquement, de toute pièce et de les faire exécuter; mais ceci est encore d'un autre niveau ça fait appel à une technique de générateur (ceci me rajeunirait car c'est une technique que j'ai souvent utilisée, très tôt.... en 1970 pour mon premier générateur de programmes Cobol pour le squelette du programme gérant toute la partie logique de la logique du programme à partir d'un paramétrage issu d'une méthode d'analyse appelée MINOS).
Ceci est un autre sujet mais qui me tient à cœur de vérifier également en PHP, faire en quelque sorte un générateur d'application.

Dernière modification par pitou (28-06-2010 11:14:12)

Hors ligne

#36 28-06-2010 20:07:34

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonsoir Pitou,

Oui je suis sûr de mon code. En fait si le form1 n'a pas été rempli et envoyé sur la page exemple.php 

!isset($_POST['var_1'])==true

. Ou dit autrement si c'est la première fois que tu affiches exemple.php, la première condition est vérifiée et display_form1() sera éxécuté. Si tu n'as pas encore compris pourquoi je t'invite à jeter un oeil sur la doc de php en ligne sur la fonction isset().

Dernière modification par Jc (28-06-2010 20:09:11)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#37 28-06-2010 22:35:15

pitou
Membre
Inscription : 21-05-2010
Messages : 25

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonsoir JC,
Je ne disais pas cela pour isset mais pour $_post, isset vérifiant seulement que la variable a bien été affectée ou pas dans le cas qui nous intéresse. Par contre la variable n'est testée que par rapport à $_post ce qui implique que le formulaire ait bien été rempli par l'utilisateur sans quoi $_post n'est pas activé et ne peut pas être utilisé, voilà pourquoi je posais la question.
Est-ce que je me trompe?

Hors ligne

#38 29-06-2010 08:25:17

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Attention, les super-globales sont sensibles à la casse. C'est $_POST, qui contient les champs de formulaires pour method="post" transmis par http au serveur Apache.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#39 29-06-2010 20:07:42

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Demande d'aide pour utiliser des variables dans plusieurs pages

Bonsoir,

Pour répondre à Pitou, tu te trompes en effet car ce n'est pas comme ça que $_POST fonctionne. Comme l'a justement dit Maljuna et pour compléter ses propos $_POST est une variable serveur de type array() qui contient les champs de formulaires pour method="post" transmis par http au serveur Apache. Or cette variable est disponible en permanence tant que le serveur PHP est disponible. Si aucun formulaire est passé au serveur via la méthode post $_POST[] = array() et isset($_POST['n'importe quel nom de variable'])==false. Toutefois il existe un autre cas pour lequel isset() peut retourner la valeur false c'est lorsque la variable testée existe et à pour valeur null. A prendre donc en considération dans son code.

wink


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums