Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 16/02/2011, 13h40   #1
Membre du Club
 
Avatar de alain78
 
Homme Alain
Développeur informatique
Inscription : mai 2008
Messages : 117
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 59
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 117
Points : 55
Points : 55
Par défaut tableau array compréhension

Bonjour,

Je n'arrive pas à comprendre le fonctionnement d'un tableau array entre 2 formulaires.
Voici mon problème.

Dans un script:
dans un premier formulaire (F1), l'utilisateur saisit une ou plusieurs valeurs dans 2 listes distinctes (2 SELECT). Il valide son choix par un bouton submit. L'action du formulaire est '{$_SERVER['PHP_SELF']}'.

Les valeurs (multiples) de chaque SELECT constituent donc un tableau (T1 et T2) qui est transféré dans un second tableau (T3) puis affiché dans un second formulaire (F2). Je précise que T3 est nécessaire car il es la résultante de la combinaison entre T1 et T2 soit T1 x T2 car chaque valeur de T1 est associé à toutes les valeurs de T2.

L'utilisateur a la possibilité de recommencer un nouveau choix dans F1 pour ajouter ses nouveaux choix au tableau T3 ce qui met à jour le formlaire F2.

Tout se passe bien sauf que F2 n'affiche que le dernier choix de l'utilisateur.

Je ne comprend pas si le tableau T3 est 'vidé' chaque fois que le formulaire F1 est validé et renvoie donc en $_SERVER['PHP_SELF'].

J'ai essayé de passer le tableau T en POST via un champ hidden, cela ne marche pas .

Avez vous une idée ?

Merci en tout cas pour votre aide éventuelle.
alain78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 13h49   #2
Membre régulier
 
Étudiant
Inscription : mars 2007
Messages : 107
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2007
Messages : 107
Points : 93
Points : 93
Bonjour,

Rien qu'en lisant votre message, j'en ai mal à la tete. Je pense qu'un bout de code sera bien plus parlant qu'une explication écrite.

D'ailleurs simple précision, l'action d'un formulaire peut être laissé vide ce qui revient à la même chose que $_SERVER['PHP_SELF']

Zenklys
Zenklys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 13h56   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
Citation:
Envoyé par Zenklys Voir le message
D'ailleurs simple précision, l'action d'un formulaire peut être laissé vide ce qui revient à la même chose que $_SERVER['PHP_SELF']
Zenklys
non PHP_SELF c'est le nom du script, qui peu être diffèrent de l'adresse (rewriting)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h13   #4
Membre du Club
 
Avatar de alain78
 
Homme Alain
Développeur informatique
Inscription : mai 2008
Messages : 117
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 59
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 117
Points : 55
Points : 55
Par défaut Extrait simplifié du code

Voici le code allégé mais l'essentiel est là.

Le problème peut se résumer à mettre à jour une liste déroulante à partie d'éléments sélectionnés par l'utilisateur dans 2 autres listes déroulantes.

Merci à vous

PS: les 2 tableaux $tab_utilisateurs et $tab_compétences sont crées par ailleurs

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
// FORMULAIRE 1 (saisie utilisateur)
 
    echo "<form method='POST' action='{$_SERVER['PHP_SELF']}' >";
 
    echo "<select name='acteur' size=10>";
    foreach ($tab_utilisateurs as $key=>$value){
	echo "<option value=$key>{$tab_utilisateurs[$key][nom]}</option>";
    }
    echo '</select>';
 
 
    echo "<select name='missions[]' size=20 multiple='multiple' >";
    foreach ($tab_competences as $key=>$value){
	echo "<option value=$key>{$tab_competences[$key][libelle]}</option>";
    }
    echo '</select>';
 
// fonction personnelle qui crée un bouton INPUT en le nommant 'plus'
    bouton_plus2('plus');
 
    echo "</form>";
 
 
// creation du tableau qui fusionne les choix du formulaire 1
 
    if (isset($_POST['plus'])) {
 
	//c_ref_nom_entite est une fonction personnelle qui restitue le nom d'un objet à partir de sa référence 
        $nom_acteur=c_ref_nom_entite('utilisateur',$_POST['acteur']);
 
 
    	    $Col1_Array = $_POST['missions'];
            foreach($Col1_Array as $ref_mission){
    	        $nom_mission=$tab_competences[$ref_mission][libelle];
	        $tab_equipe[]=array(
	        	"nom_acteur"=>$nom_acteur,
	                "ref_acteur"=>$_POST['acteur'],
	                "nom_mission"=>$nom_mission,
	                "ref_mission"=>$ref_mission);
            }
    } 
 
//AFFICHAGE des choix cumulés de l'utilisateur
 
	asort($tab_equipe);
    	echo "<select name='temp' READONLY size=15 >";
 
    	foreach ($tab_equipe as $key=>$value){
    		$ttmission="....." . $tab_equipe[$key][nom_mission];
 		echo "<option value=$key>$ttmission</option>";
    	}
 
 	echo '</select>';
alain78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 16h26   #5
Membre chevronné
 
Avatar de micetf
 
Homme Fred
Professeur des Ecoles
Inscription : mai 2009
Messages : 503
Détails du profil
Informations personnelles :
Nom : Homme Fred
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Professeur des Ecoles
Secteur : Enseignement

Informations forums :
Inscription : mai 2009
Messages : 503
Points : 701
Points : 701
Si j'ai bien compris, peut-être qu'en ajoutant ceci :
Code PHP :
1
2
3
4
5
 
foreach ($tab_equipe as $key=>$value){
  $data=serialize($value);
  echo "<input type='hidden' name='tabequipe[$key]' value='$data'>";
}
dans ton formulaire.
Et en plaçant,
Code PHP :
1
2
3
4
$tab_equipe=array();
if (isset($_POST['tabequipe'])) { 
 $tab_equipe=unserialize($_POST['tabequipe']);
}
au début de ton script,
tu devrais parvenir à propager tes choix.
Fred
micetf est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 17h58   #6
Membre du Club
 
Avatar de alain78
 
Homme Alain
Développeur informatique
Inscription : mai 2008
Messages : 117
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 59
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 117
Points : 55
Points : 55
Par défaut Modification de la proposition

Merci micetf

Ta proposition ne fonctionne pas car un message d'erreur informe que le premier argument attendu pour unserialize est une chaine. Le script lui envoie un nombre.

Par contre j'ai creusé ta proposition et j'ai solutionné le problème.

Voici ce qu'il fallait écrire.

en tête du script:

Code :
1
2
3
4
5
6
 
if (isset($_POST['tabequipe'])) {
    $tab_equipe=$_POST['tabequipe'];
}else{
    $tab_equipe=array();
}
et dans le formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11
 
foreach ($tab_equipe as $key=>$value){
  echo "<input type='hidden' name='tabequipe[$key][nom_acteur]'
  value=\"{$tab_equipe[$key][nom_acteur]}\">";
  echo "<input type='hidden' name='tabequipe[$key][ref_acteur]'
  value='{$tab_equipe[$key][ref_acteur]}'>";
  echo "<input type='hidden' name='tabequipe[$key][nom_mission]'
  value=\"{$tab_equipe[$key][nom_mission]}\">";
  echo "<input type='hidden' name='tabequipe[$key][ref_mission]'
  value='{$tab_equipe[$key][ref_mission]}'>";
}
Dans la bouche du formulaire je dois échapper les chaines 'nom_acteur' et 'nom_mission' sinon elles sont tronquées au niveau de l'apostrophe s'il y a.

Donc merci à toi micetf.
Je vais pouvoir optimiser mon code, soulager les ressources et améliorer l'interface utilisateur.


alain78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h50.


 
 
 
 
Partenaires

Hébergement Web