Vous n'êtes pas identifié(e).
Bonjour à tous,
J'aurai besoin de votre aide pour m'indiquer comment procéder pour résoudre le problème suivant:
J'ai un menu général avec plusieurs formulaires, donc plusieurs bouton submit et plusieurs actions de pages à appeler.
Mon menu comprend trois variables nom, prénom, année.
J'arrive à récupérer les valeurs de ces variables avec $_POST['Nom_Client']; par exemple pour l'action correspondant au premier formulaire "afficher client".
Mais je voudrais récupérer les mêmes données dans les autres formulaires comme pour "saisie client" ou autre que je souhaite rajouter au menu (dans ce cas la méthode $_POST['Nom_Client']; ne peut pas fonctionner.
Merci de me dire comment procéder pour récupérer les données du premier formulaire dans les formulaires suivants.
Voici mon code:
<body>
<p><font face="Arial, Helvetica, sans-serif"><strong>SELECTION DU CLIENT A AFFICHER </strong></font></p>
<form id="Recherche_Client" name="Recherche_Client" method="post" action="Affichage_Fiche_Client.php">
<p>Nom Client :
<input name="Nom_Client" type="text" id="Nom_Client" size="50" maxlength="50" />
</p>
<p>Prénom Client :
<input name="Prenom_Client" type="text" id="Prenom_Client" size="45" maxlength="45" />
</p>
<p>Année :
<input name="Annee" type="text" id="Annee" size="7" value=" 2010"maxlength="4" />
</p>
<p>
<input type="submit" name="Afficher client" value="AFFICHER CLIENT" />
</p>
</form>
<form action="SAISIE CLIENT/Saisie_Client.php" method="post" name="SAISIE CLIENT">
<input type="submit" name="Saisie client" value="SAISIE CLIENT" />
</form>
<p> </p>
</body>
</html>
Hors ligne
Salut,
Ta solution est les sessions, regarde le tuto sur le site Et qi tu a d'autre questions hesite pas
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
Oui j'avais pensé aux sessions mais en fait ce que je voudrais c'est tout simplement récupérer les valeurs des nom, prénom, année dans le second formulaire de la même page.
Est-ce possible à partir de la même page?
Si j'utilise les sessions cela voudrait dire que j'aurai d'abord une page de menu général avec un formulaire (nom, prénom, année) qui appellerait un autre menu dans lequel j'aurai différent formulaires avec différents submit de différentes pages récupérant par session les valeurs nom, prénom, année.
Est-ce que je me trompe?
Hors ligne
Saluton,
Extrait de la doc PHP
Sessions
Le support des sessions de PHP est un mécanisme pour conserver des données entre différents accès. Cela vous permet de personnaliser les applications, et d'augmenter l'attrait de votre site. Toutes les informations sur les sessions sont disponibles dans la section sessions.
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
Avant d'envisager des sessions je voudrais savoir si je peux récupérer les valeurs dans mon deuxième formulaire de la même page de manière à n'avoir qu'un seul menu et non pas deux au minimum..
Hors ligne
Apparemment non car elles dépendent de la réponse du premier formulaire, donc je ne sais pas comment les récupérer si ce n'est par $_POST.
Or $_POST ne peut pas marcher dans le second formulaire.
D'où ma question:
Est-ce possible de les récupérer ou pas?
Hors ligne
en complément aux réponses deja données, la balise input type="hidden" est une solution si tu génères à la volé le code HTML du 2è formlaire.
Les valeurs seront reprises automatiquement lors du POST du 2ème formulaire.
Tu génères le code HTML du 2è formualire en PHP ?
Hors ligne
if( !empty($_POST['champAvant']) )
{
echo '<form action="form.php" name="form2" method="post">';
echo '<input type="hidden" name="champAvant" value="'.$_POST['champAvant'].'">';
echo '</form>';
}
?>
Cordialement.
Dernière modification par xTG (22-06-2010 19:00:15)
Hors ligne
Merci.
J'ai essayé ce que vous dites en PHP. 9a fonctionne pour l'affichage.
Mais comment résoudre le problème des submit?
Je ne vois toujours pas comment.
Que deviennent les submit et les deux actions différentes pour appeler soit une page soit une autre ?
Dois-je garder les deux boutons avec les deux appels comme avant?
Merci de me dire également pourquoi utiliser le hidden, c'est une astuce?
Hors ligne
J'ai appliqué ce que vous dites mais le deuxième bouton submit ne s'affiche pas, car il semble que if( !empty($_POST['Nom_Client']) ) repond false, si je supprime ce test j'ai l'erreur:
Notice: Undefined index: Nom_Client in C:\wamp\www\TESTPHP\MICHEL\Nom_Client.php on line 27
Nom Client :
Notice: Undefined index: Prenom_Client in C:\wamp\www\TESTPHP\MICHEL\Nom_Client.php on line 29
Prénom Client :
Notice: Undefined index: Annee in C:\wamp\www\TESTPHP\MICHEL\Nom_Client.php on line 31
Annee :
ce qui prouverait qu'on ne peut pas utiliser $_POST['Nom_Client']
Voici le code :
<body>
<p><font face="Arial, Helvetica, sans-serif"><strong>SELECTION DU CLIENT A AFFICHER </strong></font></p>
<?php
echo '<form action="Affichage_Fiche_Client.php" name="Recherche_Client" method="post">';
echo 'Nom Client :<input type="text" name="Nom_Client" id="Nom_Client" size="50" maxlength="50">';
echo '<br>';
echo 'Prénom Client :<input type="text" name="Prenom_Client" id="Prenom_Client" size="45" maxlength="45">';
echo '<br>';
echo 'Année : <input name="Annee" type="text" id="Annee" size="7" value=" 2010"maxlength="4">';
echo '<br>';
echo '<input type="submit" name="Afficher client" value="AFFICHER CLIENT" >';
echo '</form>';
if( !empty($_POST['Nom_Client']) )
{
echo '<form action="SAISIE CLIENT/Saisie_Client.php" name="SAISIE CLIENT" method="post">';
echo 'Nom Client :<input type="hidden" name="Nom_Client" size="50" maxlength="50" value="'.$_POST['Nom_Client'].'">';
echo '<br>';
echo 'Prénom Client :<input type="hidden" name="Prenom_Client" size="45" maxlength="45" value="'.$_POST['Prenom_Client'].'">';
echo '<br>';
echo 'Annee :<input type="hidden" name="Annee" size="7" maxlength="4" value="'.$_POST['Annee'].'">';
echo '<input type="submit" name="Saisie client" value="SAISIE CLIENT" >';
echo '</form>';
}
Hors ligne
Le hidden c'était pour si tu souhaitais conserver la donnée d'un formulaire à un autre sans "permettre" sa modification ni son affichage. En gros la transmettre pour ensuite la retransmettre.
Sinon pour ton code il n'y a pas de raison qu'il ne fonctionne pas selon moi. Si tu postes le premier formulaire tu auras l'affichage du second avec les données du premier.
Sinon la gestion de deux formulaires sur une même page se gère grâce à l'attribut name dans la balise form. (Si je dis pas de bêtises)
Hors ligne
OK merci, mais désolé ça ne fonctionne pas avec le $_POST['Nom_Client'] dans le deuxième formulaire.
Il me semble que le $_POST['Nom_Client'] ne peut fonctionner qu'à partir du moment où on valide avec le bouton submit, sans quoi la donnée saisie dans l'input n'est toujours pas disponible.
Deuxièmement ce n'est apparemment pas récupérable dans le deuxième formulaire, ça ne peut marcher que s'il n'y a qu'un seul formulaire mais alors il y a conflit avec le menu pour avoir deux boutons (ou plus) submit.
Je ne vois donc pas comment faire mon menu avec plusieurs formulaires et donc plusieurs submit sur la même page.
Effectivement avec les sessions ça fonctionne mais ça alourdit le menu puisqu'il me faut passer par un premier menu qui permet au premier formulaire de saisir les données, puis d'appeler un deuxième formulaire avec d'autres boutons submit (autant que de traitements à réaliser (exemple affichage client, création client, mise a jour client, suppression client, etc....).
Hors ligne
Effectivement, si tu ne valides pas ton form, il ne risque pas de transmettre les infos.
Le but est de récupérer la valeur du 1er form, la stocker dans une session, et la mettre dans le 2nd form (avec un champ hidden + value = $session['tavar']
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Attends.. Tu cherches à faire de la copie de données sans recharger la page ? Je ne vois pas tellement l'intérêt vu qu'au final tu ne posteras jamais ton premier formulaire si je comprend bien...
Ensuite cela ne se fait pas en PHP sans rechargement de page, il te faut passer par javascript avec une action sur le onChange du input pour recopier son contenu dans le second formulaire.
Hors ligne
OK, vous confirmez ce que je pensais.
Il faut effectivement valider le premier formulaire qui contient les données nom, prénom, année pour pouvoir ensuite travailler sur le deuxième formulaire (quelle que soit la technique) et récupérer les données.
Ceci alourdit un peu le dialogue car il faut avoir deux pages différentes, donc deux menus, un pour saisir les données, un deuxième pour accéder aux traitements.
En fait j'essayais de voir si on pouvait faire cela avec un seul menu donc une seule page, mais apparemment vous confirmez que ce n'est pas possible. Dommage car un peu lourd.
J'ai pris acte de votre aide et j'ai utilisé deux formulaires, deux pages différentes, en utilisant les sessions, ça marche.
Mon code du premier formulaire pour saisir les données:
<body>
<p><font face="Arial, Helvetica, sans-serif"><strong>SELECTION DU CLIENT A TRAITER </strong></font></p>
<form id="Recherche_Client" name="Recherche_Client" method="post" action="Menu_General.php">
<p>Nom Client :
<input name="Nom_Client" type="text" id="Nom_Client" size="50" maxlength="50" />
</p>
<p>Prénom Client :
<input name="Prenom_Client" type="text" id="Prenom_Client" size="45" maxlength="45" />
</p>
<p>Année :
<input name="Annee" type="text" id="Annee" size="7" value=" 2010"maxlength="4" />
</p>
<p>
<input type="submit" name="Saisie client" value="VALIDER" />
</p>
</form>
</body>
</html>
Second code pour le menu de traitement:
<body>
<p class="Style2">MENU GENERAL</p>
<form id="Afficher_Client" name="Afficher_Client" method="post" action="Affichage_Fiche_Client.php">
<span class="Style1">Pour afficher un client cliquez sur </span>
<input type="submit" name="Submit" value="AFFICHER" />
</form>
<form id="Saisie_Client" name="Saisie_Client" method="post" action="SAISIE CLIENT/Saisie_Client.php">
<span class="Style1">Pour saisir une fiche client cliquez sur</span>
<input name="Saisir Client" type="submit" id="Saisir Client" value="SAISIR" />
</form>
<p class="Style1"> </p>
</body>
</html>
Merci à vous pour votre aide et merci de me dire si j'ai bien assimilé ce que vous me disiez.
Hors ligne
Tu as aussi moyen de le faire sur une seule et même page.
Un argument dans l'url avec le numéro du formulaire par exemple, ou bien un champs texte en hidden.
Et en fonction de ce numéro tu affiches l'un ou l'autre traitement.
Hors ligne
Je pense qu'on ne se comprends pas sur le traitement.
En fait on ne peut pas anticiper ce que l'utilisateur veut faire, premièrement on doit mémoriser les données client et ensuite donner la main à l'utilisateur pour qu'il choisisse le traitement, donc pas possible à mon avis de paramétrer dans l'URL l'argument de traitement.
Il faut bien deux pages à partir du moment où sur la première on ne peut pas activer les données clients et activer les traitements.
Ou alors je n'ai rien compris.....
Hors ligne
Bonjour,
Ce qu'à voulu exprimer xTG c'est qu'il est possible, en reprenant tes propres termes, de passer les choix de traitement utilisateur en paramètre URL d'une page pour effectuer tous les traitements possible sur la même page en fonction des paramètres passés. Les données clients se récupèrent via base de données au moment de la connexion de l'utilisateur sur le site et son id ou équivalent mémorisé en paramètre session pour l'avoir en référence sur l'ensemble des pages.
J'espère que cela t'aura aidé
Cordialement,
Jc
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
OUI, merci à tous. Vous m'avez bien aidé.
Je n'ai pas utilisé le paramètre en URL, car moins sécurisé, j'ai utilisé les sessions.
Mais je crois que l'incompréhension vient du fait que la même page ne peut pas à la fois valider les données du formulaire client (paramètres utiles à toutes les pages) pour les $post et permettre à l'utilisateur de faire les choix des traitements (afficher, saisir, mettre à jour, supprimer le client) par un simple click sur un bouton submit; ce qui m'a obligé de faire une autre page.
Il est clair que les données récupérables par $post ne le sont qu'à partir du moment où l'utilisateur a cliqué sur le bouton submit.
Je n'ai pas trouvé de moyen plus simple que de faire deux pages différentes, une pour saisir les paramètres, une autre pour donner le choix des traitements.
Pour moi le problème était moins un problème technique qu'un problème de logique et de conception.
J'ai finalement vu ici les limites du langage PHP et de la structure des pages.
J'ai encore beaucoup à apprendre car je suis débutant en PHP mais j'ai une certaine connaissance dans la conception des applications.
J'aurai donc sans doute encore à vous demander votre aide.
Merci encore à vous.
Hors ligne
Saluton,
Je crois surtout que tu gagnerais à ne pas te focaliser sur la notion de page. De ce point de vue, je te conseille d'étudier le patron de conception MVC (Modèle Vue Contrôleur).
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
OK merci, je regarderai.
Hors ligne
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.
Hors ligne
Ce n'est pas pour ce point que la méthode MVC est utile.
C'est pour la notion de page, tu dis actuellement que les deux formulaires ne renvoient pas à la même page et que cela pose problème pour l'interprétation vu que les deux formulaires sont liés.
Avec un MVC tu n'as pas de "pages", tu n'as qu'un contrôleur qui peut tout gérer et afficher la vue correspondante au traitement.
Hors ligne
OK donc oublions MVC puisque je travaille avec des notions de page.
pardon d'être lourd avec vous mais une fois de plus ce n'est pas un problème d'avoir plusieurs formulaires sur une même page, cela fonctionne bien avec des noms différents et des actions différentes (j'ai d'ailleurs un exemple dans mon code pour le menu du choix de traitement proposé à l'utilisateur.
Mon problème est lié au $post, dès l'instant où il faut récupérer les données je ne vois pas comment d'autres formulaires sur la même page peuvent fonctionner. Voilà en fait le problème qui m'oblige à ouvrir une seconde page contenant les actions de traitement après avoir récupéré les données par $post provenant de la première page.
Hors ligne