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 :

Nommage dynamique de variable pour exploitation dans un formulaire [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Nommage dynamique de variable pour exploitation dans un formulaire
    Bonjour à la communauté Développez.com,

    Et bien voilà *s'allonge sur le divan*

    J'ai été pris en tant que stagiaire dans une grande entreprise pour le projet d'un grand formulaire.
    Mon temps est donc limité et la je sèche complètement sur le problème suivant que je vais essayer de décrire le plus en détail possible.

    En fait, à une étape de mon formulaire, l'utilisateur doit choisir plusieurs points dont je ne connais pas le nombre à l'avance.

    Cela se présenterai sous la forme d'un champs texte vide et de deux boutons:
    - Ajouter
    - Terminer

    A côté de chaque champs, il faudrait un bouton "Supprimer" qui permette d'enlever le champs lui correspondant.

    Seulement voila, comment faire apparaitre un champ et ce fameux bouton "Supprimer" au clic du bouton "Ajouter" et surtout comment leur assigner des noms?

    Pour se placer dans le contexte, l'utilisateur doit choisir des pièces que l'on appellera "points évalués" (pièces qu'il indiquera dans les fameux champs vides décris ci-dessus).

    Une fois que l'utilisateur a rempli les pièces sélectionnées, pour chaque pièce on lui soumettra un formulaire de 4 étapes (pour chaque pièce, les étapes seront identiques)

    En gros on aurait ces variables:
    - points évalués: PExx (exemple: PE01)
    - et diverses variables utilisées dans les étapes: PExxEe (exemple: PE01E1 pour "L'étape 1 du point évalué 01")

    Ne pratiquant pas le PHP depuis très longtemps (trois mois), je suis complètement désarçonné face à ce genre de situation.

    Comment ensuite dans ma couche métier mettre mes variables en session (exemple: $_SESSION['E01P1']) alors que je ne connais même pas leur nom à l'avance?

    Je récapitule la situation avec un petit schéma pour ceux qui auraient décroché ^^": Untitled 1.png

    Je ne sais pas du tout comment je vais m'en sortir... J'ai trouvé ce morceau de code qui devrait probablement m'être utile qui permet de concaténer le nom d'une variable, mais je ne sais pas comment l'exploiter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $test = $nbmail; // où $nbmail est un numéro
    ${'v'.$test}  = "value";
    Je pourrai encore épiloguer des pages et des pages mais déjà, si je pouvais obtenir de l'aide sur cette première étape, je serais déjà bien arrangé.

    Merci par avance à ceux qui vont se pencher sur mon problème!

    Je me tiens à votre entière disposition pour d'autres questions ou bien des précisions car je conçois que le sujet n'est pas facile à aborder brute de force comme ça

    Cordialement,
    Sayko
    Images attachées Images attachées  

  2. #2
    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
    utilise les tableaux

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Le mieux pour ton cas reste le tableau.

    Exemple :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <input type="text" name="pieces[]" value="1478" />
    <input type="text" name="pieces[]" value="85451" />
    <input type="text" name="pieces[]" value="5451" />
    <input type="text" name="pieces[]" value="8451" />
    ...

    Et la récupération au submit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    print_r( $_POST['pieces'] );
    /*
    Array
    (
        [0] => 1478
        [1] => 85451
        [2] => 5451
        [3] => 8451
        ...
    )
    */
    Il ne te reste plus qu'à parcourir ce tableau pour avoir l'ensemble des champs ajoutés, peu importe le nombre que l'utilisateur choisira.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Tout d'abord, merci beaucoup pour vos réponses éclair

    Une chose me trottait, j'aurais pas du tout à utiliser le JavaScript pour ajouter une ligne ou il y aurait un champ vide?

    Merci encore pour vos réponses

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Citation Envoyé par Sayko Voir le message
    j'aurais pas du tout à utiliser le JavaScript pour ajouter une ligne ou il y aurait un champ vide?
    Pour une meilleure ergonomie, si.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bisûnûrs, j'ai du mal m'exprimer :s Désolé, mais c'est le nombre de champs que je connais pas, et non les valeurs qu'il va y mettre (enfin si aussi mais ça, ça me pose pas de soucis)

    Et comment renommer les ID de mon array dans le cas de l'utilisation d'un tableau, car les noms de mes variables sont très importantes dans mon projet.

    Une fois ceci répondu, je me lancerai dans le code et vous tiendrai au courant de l'avancement de l'étape de mon projet

    Merci pour l'aide plus que rapide... j'en reviens toujours pas xD

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Re-bonjour

    Bon j'ai réussi à obtenir en résultat de mon formulaire un tableau de ce type:

    [0] => 'cuisine'
    [1] => 'salon'
    [2] => 'chambre'
    ...

    Maintenant je voudrais obtenir le résultat suivant:

    'PE1' => 'cuisine'
    'PE2' => 'salon'
    'PE3' => 'chambre'
    ...

    Je vais surement devoir utiliser un for avec un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '{'PE'.$i}' => pieces[$i2]
    Mais je vois vraiment pas comment me dépatouiller :s

    Merci par avance pour votre aide

    EDIT:

    Bon pour le moment j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //compte le nom de lignes dans mon tableau
    $result = count($_POST['PE']);
    $numPE = 1; //variable qui va me servir à nommer mes clés du deuxième tableau
    $selectedPE = array(); //déclaration de mon deuxième tableau... Pour le moment vide
     
    for ($i = 0; $i < $result; $i++) //tant que toutes les lignes du premier tableau n'ont pas été parcourues
    {
        ${selectedPE['selectedPE'.$numPE]} => $_POST['PE'][$i]; //<= c'est cette ligne qui me pose prolème, j'ai aucune idée de la syntaxe
        $numPE++; // on incrémente le numéro de point évalué
    }

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Trouvé !

    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
    $result = count($_POST['PE']);
    $numPE = 1;
    $selectedPE = array();
     
    for ($i = 0; $i < $result; $i++)
    {
        $selectedPE['selectedPE'.$numPE] = $_POST['PE'][$i];
        $numPE++;
    }
     
    foreach($selectedPE as $key => $element)
    {
        echo $key.' is: '.$element.'.<br />';
    }
     
    /*
    Résultat:
     
    selectedPE1 is: Cuisine.
    selectedPE2 is: Salon.
    selectedPE3 is: Chambre.
    Je ne mets pas encore le topic en résolu car il me reste encore bien des obstacles à franchir

  9. #9
    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
    fait un foreach direct sur ton tableau, pas besoin de for + count

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Si j'ai bien compris ça donne ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $numPE = 1;
    $PA = array();
     
    foreach ($_POST['PE']as $element)
    {
        $selectedPE['selectedPE'.$numPE] = $element;
        $numPE++;
    }
    En effet c'est plus propre, merci pour le tuyau

  11. #11
    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
    pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $selectedPE[$numPE][] = $element;

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Parce que j'ai impérativement besoin du préfixe "selectedPE" dans le nom de ma clé pour la suite de mon formulaire, sinon je ne me serait pas embêté à faire la conversion d'un tableau vers un autre

    Merci encore de l'intérêt que tu porte à mon sujet.

    Sinon question à part, comment on vérifie si un champs du tableau est vide alors qu'on ne connait pas le nombre de lignes dans celui-ci? (dans mon formulaire, tous les champs doivent contenir quelque chose)

  13. #13
    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
    avec array_filter

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Hum...
    En lisant ça sur php.net: Si la fonction utilisateur retourne TRUE, la valeur courante du tableau input est retournée dans le tableau résultant.

    Et en lisant plus loin qu'on pouvait l'utiliser sans fonction utilisateur, je me suis dit que je pouvait faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (array_filter(&selectedPE) == true) 
    {
    	echo 'Tableau bon';
    }
    elseif (array_filter(&selectedPE) == false)
    {
    	echo 'Tableau faux';
    }
    Mais ça ne marche pas :s

  15. #15
    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
    il filtre les valeurs vide, suffit de faire la comparaison entre le tableau original et le tableau filtré, si c'est différent c'est qu'il manque des valeurs

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Et pourrais-tu me dire comment on procède?

    Au passage, j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (array_filter($PA, 'is_null')) 
    {
    	echo 'Tableau bon';
    }
    else
    {
    	echo 'Tableau faux';
    }
    Mais cela ne fonctionne pas non plus. Il passe systématiquement dans le else

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Trouvé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $newarray = array_filter($selectedPE);
     
    if ($newarray == true) 
    {
    	echo 'Tableau bon';
    }
    else
    {
    	echo 'Tableau faux';
    }
    C'est bien comme ça?

  18. #18
    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
    mais non,

    suffit de faire la comparaison entre le tableau original et le tableau filtré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if($selectedPE === array_filter($selectedPE))
    {
        //bon
    }
    else
    {
       //pas bon
    }

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Ah ouais pas con.

    Désolé, j'ai commencé le php y'a pas très longtemps

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

Discussions similaires

  1. [AC-2000] Mémoriser une variable pour utilisation dans plusieurs procédures
    Par P'tit aviateur dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/07/2009, 10h49
  2. utilsation Variable pour insérer dans une table
    Par jamalsettat dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/06/2009, 13h54
  3. Nommage dynamique de variables dans une boucle
    Par totooo dans le forum Général Java
    Réponses: 10
    Dernier message: 28/05/2009, 09h02
  4. Variable pour répartition dans un tableau (module streaming TV)
    Par Freeetv dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 21/07/2007, 14h19
  5. Réponses: 8
    Dernier message: 27/01/2007, 13h44

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