Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3015 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  $_POST et récupération d'une valeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

$_POST et récupération d'une valeur

n°1982745
edaz51
Posté le 10-04-2010 à 10:34:11  profilanswer
 

Bonjour,
 
Mieux qu'un long discours :
 
http://imgur.com/X1ybW.jpg
 
Depuis p3.php (s'agissant d'une classe), je parviens bien à récupérer la valeur de $POST['val'] envoyé à partir de p1.php (méthode POST).
Lorsque j'effectue une inclusion de ma classe depuis p4.php, la valeur de $POST['val'] depuis p3.php n'est plus récupérable.
 
Comment puis-je corriger cela sans passer par des variables de session ?
 
Merci pour votre entraide.

Message cité 1 fois
Message édité par edaz51 le 10-04-2010 à 10:34:29
mood
Publicité
Posté le 10-04-2010 à 10:34:11  profilanswer
 

n°1982756
deuspi
Posté le 10-04-2010 à 11:55:37  profilanswer
 

edaz51 a écrit :

Bonjour,
 
Mieux qu'un long discours :
 
http://imgur.com/X1ybW.jpg
 
Depuis p3.php (s'agissant d'une classe), je parviens bien à récupérer la valeur de $POST['val'] envoyé à partir de p1.php (méthode POST).
Lorsque j'effectue une inclusion de ma classe depuis p4.php, la valeur de $POST['val'] depuis p3.php n'est plus récupérable.
 
Comment puis-je corriger cela sans passer par des variables de session ?
 
Merci pour votre entraide.


Salut,
 
La variable $_POST est renseignée à partir des champs d'un formulaire envoyé avec la méthode "post".
Dans p1.php tu as un formulaire avec un champ "val", que tu postes vers p2.php, donc tu récupères $_POST['val'] dans p2.php
Dans p2.php tu as un formulaire je suppose, mais je ne sais pas ce qu'il contient. C'est dans le formulaire de p2.php qu'il faut éventuellement que tu remettes un champ "val" pour qu'il soit à nouveau posté vers p4.php
 
Maintenant je trouve pas que ça aide beaucoup à la compréhension tous ces p1 p2 p3 p4
Tu veux pas poster du code plutôt ?
 
Bon courage

n°1982782
edaz51
Posté le 10-04-2010 à 14:37:27  profilanswer
 

Salut deuspi et merci d'avoir répondu.
 

deuspi a écrit :


La variable $_POST est renseignée à partir des champs d'un formulaire envoyé avec la méthode "post".


C'est exact.
 

deuspi a écrit :

Dans p1.php tu as un formulaire avec un champ "val", que tu postes vers p2.php, donc tu récupères $_POST['val'] dans p2.php


Je récupère "val" dans p3.php et non dans p2.php. "val" correspond au nom d'une base de données. Je suis sous contrainte et je n'ai pas d'autres choix que passer ma valeur avec la méthode post. p3.php est une classe avec un ensemble de fonctions liées au traitement des données (dont la connexion à la base).
 

deuspi a écrit :

Dans p2.php tu as un formulaire je suppose, mais je ne sais pas ce qu'il contient.


p2.php affiche un tableau avec des cases à cocher (checkbox). Les données affichées dans ce tableau sont issues d'un select depuis une BDR (utilisation des fonctions sous p3.php et tout fonctionne)

Code :
  1. $db_name = addslashes($_POST['val']);

--> me retourne bien sous p3.php le nom de ma base de données.
 

deuspi a écrit :

C'est dans le formulaire de p2.php qu'il faut éventuellement que tu remettes un champ "val" pour qu'il soit à nouveau posté vers p4.php


p4.php parse les valeurs "checkées", récupère l'id de l'enregistrement en BD et  effectue un traitement en BD (d'où l'inclusion de p4.php). Et là, le code dans p4.php ne parvient plus à se connecter car mon

Code :
  1. $db_name = addslashes($_POST['val']);

ne me retourne plus rien.

Message cité 1 fois
Message édité par edaz51 le 10-04-2010 à 14:38:08
n°1982812
deuspi
Posté le 10-04-2010 à 17:42:40  profilanswer
 

edaz51 a écrit :


Je récupère "val" dans p3.php et non dans p2.php.


Tu fais partir un formulaire contenant un champ "val" vers p2.php, d'après ton schéma. Ensuite depuis p2 tu fais un include de p3, pas de problème.

edaz51 a écrit :


p2.php affiche un tableau avec des cases à cocher (checkbox). Les données affichées dans ce tableau sont issues d'un select depuis une BDR (utilisation des fonctions sous p3.php et tout fonctionne)

Code :
  1. $db_name = addslashes($_POST['val']);

--> me retourne bien sous p3.php le nom de ma base de données.


Après tu génères un 2e formulaire (depuis p2 donc) et ce formulaire tu le fais partir vers p4. Mais ce 2e formulaire ne contient pas le champ "val" donc il ne sera pas posté. Donc, impossible de le récupérer depuis p4 puisqu'il ne fait pas partie des infos postées.
Ce qu'il faut que tu fasses, c'est modifier le 2e formulaire, celui qui se trouve dans p2, pour ajouter un champ caché "val" auquel tu donneras la valeur de POST['val']. De cette manière tu pourras "faire suivre" ta valeur vers le formulaire suivant.
En somme, un truc dans ce style :

Code :
  1. echo '<input type="hidden" name="val" value="' . $_POST['val'] . '"/>';


J'espère que ça t'aidera...
Bon courage

n°1982827
edaz51
Posté le 10-04-2010 à 18:56:38  profilanswer
 

Merci deuspi. Tes explications sont claires et précises.
 
Je vais tester cette solution.

n°1982908
edaz51
Posté le 11-04-2010 à 11:08:10  profilanswer
 

Super cela fonctionne. Encore merci deuspi

n°1982925
edaz51
Posté le 11-04-2010 à 12:50:15  profilanswer
 

Il y a toutefois quelque chose que je ne comprends pas.
J'étudie un code source et dans plusieurs pages, le code fait appel à une variable globale.  
 
Exemple : $GLOBALS['InstallPath']
 
Je me dis que c'est certainement la solution. Par contre je ne parviens pas à déterminer la déclaration de cette variable dans ce code source.
 
Lorsque je la déclare en p1.php

Code :
  1. $InstallPath = 'path/';

.
 
Je ne la retrouve en p4.php avec un print_r($GLOBALS);


Message édité par edaz51 le 11-04-2010 à 12:51:38
n°1982954
esox_ch
Posté le 11-04-2010 à 16:13:57  profilanswer
 

Tu dois inclure le fichier où tu la déclares.
À part ça, se baser lourdement sur des variables est un signe d'un design mal conçu..
Plus tu t'appuies dessus, plus tu vas obtenir des effets de bord difficilement traçables.
C'est vraiment quelque chose à utiliser dans les cas extrêmement.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1982958
edaz51
Posté le 11-04-2010 à 16:24:28  profilanswer
 

Merci esox_ch, mais quand le fichier php commence par :
 
include_once $GLOBALS['InstallPath'].'utilit/incl.php';
 
Ici,  la variable InstallPath contenant le path est certes déclarée dans un fichier mais celui-ci n'est pas inclu. Pourtant, incl.php est bien lu.


Message édité par edaz51 le 11-04-2010 à 16:25:21
n°1982959
esox_ch
Posté le 11-04-2010 à 16:37:27  profilanswer
 

Tu sais que ce que tu veux faire, se fait généralement en utilisant __FILE__ ?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 11-04-2010 à 16:37:27  profilanswer
 

n°1982974
edaz51
Posté le 11-04-2010 à 17:21:35  profilanswer
 

Oui effectivement. Je vais essayer de travailler avec le répertoire courant dirname(__FILE__)
J'essayais juste de comprendre comment était utilisé $GLOBALS

Message cité 1 fois
Message édité par edaz51 le 11-04-2010 à 19:57:31
n°1983042
deuspi
Posté le 11-04-2010 à 23:20:01  profilanswer
 

edaz51 a écrit :

J'essayais juste de comprendre comment était utilisé $GLOBALS


Salut,
 
Le mieux est de se référer à la doc, voir ici : http://fr2.php.net/manual/fr/reser [...] lobals.php
Il y est expliqué qu'une variable déclarée à l'extérieur d'une fonction sera considérée comme globale, et de ce fait sera remontée dans le tableau $GLOBALS.
L'utilisation de $GLOBALS['InstallPath'] revient dans la plupart des cas à écrire $InstallPath directement.
 
Dans ton exemple, tu nous expliques que le code fait appel à cette variable pour inclure un autre fichier (incl.php)
Je pense que les fichiers qui font appel à cette variable ne peuvent pas être appelés directement par le navigateur. Ils doivent d'abord être eux-mêmes inclus par un autre fichier, en amont, qui lui par contre doit connaître cette fameuse variable.
 
Maintenant comme le dit esox_ch, l'utilisation de variables globales est une pratique déconseillée. Et il me semble que tu es tombé pile dans l'un des travers de cette technique : tu ne retrouves plus l'endroit où a été déclaré la variable, ou la façon dont tel ou tel fichier peut la connaître.
 
A part ça j'ai l'impression en te lisant que tu fais une petite confusion entre ce qui se passe côté client, côté serveur, et le flux d'exécution du code PHP : tu dis que tu déclares ta variable dans p1 mais que tu ne la retrouves pas dans p4, mais si je me réfère à ton schéma initial, le script p4 ne fait pas d'include du script p1. Le script p4 est exécuté directement par le serveur et donc ne connaît pas ce qui a pu être déclaré en p1.
 
Bon courage

n°1983110
edaz51
Posté le 12-04-2010 à 09:50:03  profilanswer
 

Merci deuspi pour toutes ces précisions et d'avoir pris du temps pour répondre.
Si j'ai bien compris, la variable $InstallPath est bien déclarée quelque part et avec des includes successifs, on parvient à retrouver son contenu.
Et esox_ch souligne cet effet de bord en terme de lisibilité du code.

n°1983280
stef_dober​mann
Personne n'est parfait ...
Posté le 12-04-2010 à 16:18:21  profilanswer
 

si  $GLOBALS['InstallPath'] vaux rien == ''
PHP va inclure 'utilit/incl.php'
 
donc la variable n'a peut-être pas besoin d'être déclaré.
 
il faut aussi chercher du côté de configuration de PHP ;)


---------------
Tout à commencé par un rêve...
n°1983346
edaz51
Posté le 12-04-2010 à 20:31:13  profilanswer
 

Pourquoi ne pas alors travailler en relatif et écrire './utilit/incl.php' ?

n°1983401
deuspi
Posté le 12-04-2010 à 23:15:26  profilanswer
 

edaz51 a écrit :

Pourquoi ne pas alors travailler en relatif et écrire './utilit/incl.php' ?


Ben en fait comme le proposait déjà esox_ch, il vaut même mieux utiliser carrément la constante __FILE__
Voici le lien vers la doc qui explique ceci : http://fr.php.net/manual/fr/langua [...] efined.php
En gros la constante __FILE__ te renvoie le chemin complet du fichier courant. Donc la technique c'est :

Code :
  1. include dirname(__FILE__) . '/utilit/incl.php';


En relatif tu risques d'avoir des problèmes car tu ne sais pas forcément à quoi correspond le répertoire "." : ce ne sera pas le répertoire du fichier courant mais le répertoire du fichier qui a été appelé par le navigateur. Si t'as des fichiers qui peuvent être appelés à différents niveaux de l'arborescence ça devient carrément ingérable.

n°1983711
stef_dober​mann
Personne n'est parfait ...
Posté le 13-04-2010 à 17:17:29  profilanswer
 

edaz51 a écrit :

Pourquoi ne pas alors travailler en relatif et écrire './utilit/incl.php' ?


 
il faut demander ça au gars qui l'a fait ;)


---------------
Tout à commencé par un rêve...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  $_POST et récupération d'une valeur

 

Sujets relatifs
define et $_POST[MYSQL] Lister valeur supérieure ou égale à 8 caractères
probleme d'assignation de valeur avec un tableau dans une classeAjout d'une valeur dans un tableau dans un tableau
Valeur des textbox[RESOLU] Récupération valeur bouton radio et textarea - formulaire
[PHP] Valeur par défaut lors du rechargement d'un formulaireRecupération données dans fichiers d'un répertoire
Lancer un script shell (ksh) si une requete retourne une valeur 
Plus de sujets relatifs à : $_POST et récupération d'une valeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR