IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

tableau array compréhension


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 97
    Points
    97
    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.
    Donnes un poisson à un homme tu le nourris un jour, apprends lui à pécher tu le nourris toute sa vie.

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 107
    Points : 118
    Points
    118
    Par défaut
    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

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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)

  4. #4
    Membre régulier Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 97
    Points
    97
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>';
    Donnes un poisson à un homme tu le nourris un jour, apprends lui à pécher tu le nourris toute sa vie.

  5. #5
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Si j'ai bien compris, peut-être qu'en ajoutant ceci :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre régulier Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Points : 97
    Points
    97
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (isset($_POST['tabequipe'])) {
        $tab_equipe=$_POST['tabequipe'];
    }else{
        $tab_equipe=array();
    }
    et dans le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.


    Donnes un poisson à un homme tu le nourris un jour, apprends lui à pécher tu le nourris toute sa vie.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/04/2016, 00h52
  2. [Tableaux] Trier un tableau [array]
    Par clemsouz dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2006, 13h33
  3. [Tableaux] Problème de valeur dans un tableau (array)
    Par Flushovsky dans le forum Langage
    Réponses: 15
    Dernier message: 24/03/2006, 13h56
  4. Tableau(Array) sans taill
    Par krfa1 dans le forum ASP
    Réponses: 4
    Dernier message: 21/09/2005, 22h31
  5. tableau array
    Par laclac dans le forum Langage
    Réponses: 8
    Dernier message: 01/09/2005, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo