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

PHP & Base de données Discussion :

recuperer les valeurs des champs d'un formulaire dynamique [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut recuperer les valeurs des champs d'un formulaire dynamique
    mon probleme est le suivant :
    j'ai un formulaire dynamique (les champs sont dynamique en se basant sur le nombre d'un compteur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
        for($i=1; $i<=$nb_tache; $i++){
        while($row_tache=mysql_fetch_array($result_tache)){
        ?>
            <input name="mtg_<?php echo $i; ?>" type="text" id="mtg_<?php echo $i; ?>" size="10" />
            <input name="pu_<?php echo $i; ?>" type="text" id="pu_<?php echo $i; ?>" size="10" />
            <input name="qt_<?php echo $i; ?>" type="text" id="qt_<?php echo $i; ?>" size="10" />
        <?php } } ?>
    pour recuperer les valeurs des champs puis les stocker dans la base de données, j'ai utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($_POST as $name => $value){
    echo 'champ "'.$name.'" valeur : "'.$value.'"<br>';
    }
    le probleme c'est que les noms des champs changent
    par exemple : champ "mtg_1" valeur : "7"

    comment faire pour faire la syntaxe basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable=$_POST['valeur_champs'];
    et aussi :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table(...) values (...)
    merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Points : 73
    Points
    73
    Par défaut
    Salut,

    si tu peux récupérer ta variable $nb_tache, tu pourrais faire une boucle de la même façon pour récupérer tes valeurs:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    for($i=1; $i<=$nb_tache; $i++) {
        $champ = 'mtg_'.$i;
        echo 'champ "'.$champ.'" valeur : "'.$_POST[$champ].'"<br>';
    } 
    ?>

  3. #3
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    le probleme mnt, la boucle "for"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
        for($i=1;$i<=$nb_tache;$i++){
        while($row_tache=mysql_fetch_array($result_tache)){
        ?>
            <input name="mtg_<?php echo $i; ?>" type="text" id="mtg_<?php echo $i; ?>" size="10" />
            <input name="pu_<?php echo $i; ?>" type="text" id="pu_<?php echo $i; ?>" size="10" />
            <input name="qt_<?php echo $i; ?>" type="text" id="qt_<?php echo $i; ?>" size="10" />
        <?php } } ?>
    je n'arrive pas a incrémenté le compteur "$i"
    il est toujours "1"
    mais moi j'ai plusieurs données

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Points : 73
    Points
    73
    Par défaut
    je n'arrive pas a incrémenté le compteur "$i"
    il est toujours "1"
    C'est peut être que tout simplement ton $nb_tache est à 1 non?

  5. #5
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    non sur la page formulaire, j'ai deja affiché la variable et ça donne un nombre supérieur à 1, mais coté formulaire il affecte toujours "1".
    c pas a cause de la boucle while????

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    Salut,

    Je suppose que tu as un ID sur tes tâches ?

    Dans ce cas, il serait plus simple de faire (du côté formulaire et traitement) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    while($rowTache = mysql_fetch_assoc($resultTache)){
        ?>
        <input name="mtg_<?php echo $rowTache['id']; ?>" type="text" id="mtg_<?php echo $rowTache['id']; ?>" size="10" />
        <input name="pu_<?php echo $rowTache['id']; ?>" type="text" id="pu_<?php echo $rowTache['id']; ?>" size="10" />
        <input name="qt_<?php echo $rowTache['id']; ?>" type="text" id="qt_<?php echo $rowTache['id']; ?>" size="10" />
        <?php
    }
    ?>

    où 'id' est le nom du champ qui identifie une tâche dans ta BDD.

    Qui plus est, la structure de ton code est "foireuse" : tu fais un while dans un for. A la première boucle du for, il aura parcouru tous les résultats trouvés étant donné que le while s'arrête une fois qu'il n'y a plus de résultat. Si tu n'as qu'un résultat, tu n'as pas besoin de faire un while.
    A vrai dire, je ne comprends même pas comment ça peut marcher à l'affichage, ou alors tous tes champs de formulaire ont le même nom ('mtg_1','pu_1' et 'qt_1').

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="mtg_<?php echo $i; ?>" type="text" id="mtg_<?php echo $i; ?>" size="10" />
    Mauvaise méthode. Tu en découvres les limites.

    Utilise plutôt un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="mtg[]" type="text" size="10" />
    Ou encore plus sympa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="rows[<?php echo $i ?>][mtg]" type="text" size="10" />
    Ensuite il te suffira de boucle sur $_POST['mtg'] dans le 1er cas ou $_POST['rows'] dans le 2nd cas.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Utilise plutôt un tableau
    Ah oui ! J'avais oublié !

    Et, si éventuellement tu te retrouves avec un grand nombre de données dans ton formulaire, toujours identiques (genre 3000 champs, 1000 de chaque), ça peut éviter l'erreur avec le max_input_vars (mais il me semble que ça dépend du serveur).

  9. #9
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    merci pour la réponse
    dans la partie formulaire ça marche

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input name="mtg[]" type="text" id="mtg[]" size="10" />
    <input name="pu[]" type="text" id="pu[]" size="10" />
    <input name="qt[]" type="text" id="qt[]" size="10" />

    maintenant, je peux récupérer toutes les données à partir de ma table.

    le problème maintenant est le suivant :
    pour récupérer ces valeurs là, à partir du formulaire et les stocker dans une autre table.

    mon programme permet de récupérer les noms des taches (mtg, pu et qt) de chaque tache, puis la valeur saisie de chaque (mtg, pu et qt) doit être stocker dans une ligne dans une autre table.

    alors je crois que la méthode $_POST['mtg'] ne va pas marcher car il y a trop de mtg et pu et aussi qt.

  10. #10
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    j'ai pu récupérer les données de cette façon :

    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
     
    foreach($_POST['mtg'] as $values){
        $mtg = $values;
         echo $mtg.'<br>';
    }
     
     
    foreach($_POST['pu'] as $value){
        $pu = $value;
        echo $pu.'<br>';
    }
     
    foreach($_POST['qt'] as $value){
        $qt = $value;
        echo $qt.'<br>';
    }
    je veux insérer chaque ligne séparément
    par exemple

    +--mtg--+--pu--+--qt--+
    +-- 1 --+-- 2 --+- 3 --+
    +-- 4 --+-- 5 --+- 6 --+

    pour l'insertion au niveau de la table, que dois-je faire.

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Utiliser la méthode sympa pour commencer.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="mtg[]" ...>
    Ici, l'index s'autoincrémente, sans rapport avec l'identifiant de ligne.
    Alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="mtg[<?php echo $rowTache['id']; ?>]" type="text" id="mtg_<?php echo $rowTache['id']; ?>" size="10" />
    name="mtg[<?php echo $rowTache['id']; ?>]" => l'index est l'identifiant unique de ligne (l'id en BdD !) !
    Il devient alors très facile de relier un résultat et la ligne concernée.

    N.B. Cette méthode est d'autant plus pratique quand il s'agit de checkbox, car dans ce cas, seul les cases cochées sont transmise.
    Dernière modification par rawsrc ; 12/06/2013 à 09h18. Motif: Balises [codeinline][/codeinline]

  13. #13
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    peut être que je me suis mal exprimé
    mon probleme mnt c'est pas au niveau formulaire, mais au niveau PHP
    je veux récupérer chaque tache (mtg, pu et qt), dans une ligne et la stocker dans la table sql
    j'ai utilisé $_POST[], mais ça marche pas

  14. #14
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    de l'aide et non pas des énigme SVP

  15. #15
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    while($row_tache = mysql_fetch_array($result_tache)){
    ?>
        <input name="mtg[<?php echo $row_tache['id']; ?>]" type="text" id="mtg_<?php echo $row_tache['id']; ?>" size="10" />
        <input name="pu[<?php echo $row_tache['id']; ?>]" type="text" id="pu_<?php echo $row_tache['id']; ?>" size="10" />
        <input name="qt[<?php echo $row_tache['id']; ?>]" type="text" id="qt_<?php echo $row_tache['id']; ?>" size="10" />
        <?php
    }
    ?>
    $row_tache['id'] est UNIQUE (c'est l'index auto-incrémenté indiqué dans la base de données) , et identifie donc la ligne de manière... unique.

    Récupération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php // tableaux de résultats
    $array_mtg = $_POST['mtg'];
    $array_pu = $_POST['pu'];
    $array_qt = $_POST['qt'];
    // -------------
    foreach ($array_mtg as $id => $val){
    	echo 'Pour la ligne '.$id.', les valeurs sont :<br />';
    	echo '- mtg : '.$array_mtg[$id].'<br />';
    	echo '- pu : '.$array_pu[$id].'<br />';
    	echo '- qt : '.$array_qt[$id].'<br />';
    }
    ?>
    $id correspond donc pour chaque ligne à l'index en base de données.
    Dernière modification par Invité ; 12/06/2013 à 11h36.

  16. #16
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    Merci bien jreaux62

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2011, 12h53
  2. Réponses: 3
    Dernier message: 11/05/2009, 20h02
  3. [AJAX] Garder les valeurs des champ d'un formulaire en mémoire
    Par joss91 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/04/2008, 09h56
  4. [XSLT] Récupérer les valeur des champs
    Par webspeak dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/11/2006, 17h17
  5. Réponses: 3
    Dernier message: 20/09/2006, 16h07

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