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.
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>'; |
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.
:ccool:
:D