Recuperer des valeurs de champs ajoutés dynamiquement.

Julien547
Invité n'ayant pas de compte PHPfrance

29 août 2014, 13:41

Bonjour à vous tous,
Je viens à vous car j'ai un petit soucis...

J'ai cette page qui permet d'ajouter (cloner) des champs. Je l'ai trouvé sur Internet cela fonctionne très bien :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>formulaire multichamp</title>
<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript">
$(document).ready(function () {
 
    $(".supprimerArticle").hide();
 
    $(".ajoutArticle").click(function (){
        var form = $(this).closest('form');
        var articleList = form.find('.article');
        // Le nombre d'articles déjà présents
        var n = articleList.length;
        // Le premier article que l'on va cloner
        var firstArticle = $(articleList[0]);
        // Le dernier article de la liste
        var lastArticle = $(articleList[n-1]);
        // Un article cloné
        var clonedArticle = firstArticle.clone();
 
        // Pour chaque input clonés
        clonedArticle.find(':input').each(function() {
            // On vide la valeur
            $(this)
                .filter(':text').val('').end()
            // On change le nom en ajoutant le numero
            $(this).attr('name', $(this).attr('name')+n)
        })
 
        // On l'ajoute au dom après les autres
        clonedArticle.insertAfter(lastArticle).hide().fadeIn('slow');
 
        // On ajoute le le lien de suppression
        $(".supprimerArticle").fadeIn("fast");
 
    });
 
 
    $(".supprimerArticle").click(function (){
        var article = $(".article:last");
        article.remove();
 
        // S'il y a moins de 2 articles (autrement dit un seul) on cache le bouton supprimer.
        if ( $(".article").length < 2 ) { $(".supprimerArticle").fadeOut("fast"); }
 
    });
 
 
});
</script>
</head>
 
<body>

<form method="post" action="result.php">
    <input type="text" name="pseudo" />
    <div class="article"><br /><br />
       <table width="230" border="0" cellspacing="0" cellpadding="0">
         <tr>
           <td>Produit</td>
           <td><select name="produit[]">
             <option value="1">Orange</option>
             <option value="2">Pomme</option>
             <option value="3">Tomates</option>
             <option value="4">Ananas</option>
             <option value="5">Prune</option>
           </select></td>
         </tr>
         <tr>
           <td>&nbsp;</td>
           <td>&nbsp;</td>
         </tr>
         <tr>
           <td>Quantité</td>
           <td><input type="text" name="qtt[]" class="titre"/></td>
         </tr>
       </table>
       <br />
  </div>
 
    <div id="ajoutSupprimerArticle">
       <a href="javascript:;" title="Ajouter un article" class="ajoutArticle" rel="article">Cloner</a>
       <a href="javascript:;" title="Supprimer un article" class="supprimerArticle" rel="article">Décloner</a>
    </div>
    <input type="submit" name="test" value="Envoyer" />
</form>

</body>
</html>

J'arrive à ajouter autant de "paires" de champs que je veux mais je n'arrive pas à récupérer les valeurs "paires"
Exemple :
3 tomates (id =3) Donc : 3 => 3
10 prunes (id=5) Donc 10 => 5

J'ai essayé :
foreach($_POST['produit'] as $key => $val)
{
    echo($_POST['produit'][$key]);
    // Ou bien :
       echo " Valeur  : ".($val)."<br />";
}
Cela ne fonctionne pas.
Et d'autres trouvés sur Internet... mais rien :-(

Auriez vous une idée ?

Merci de votre aide
Julien

Julien547
Invité n'ayant pas de compte PHPfrance

29 août 2014, 13:54

J'ai trouvé :-)

Il suffit de faire :
 $i=0;
foreach($_POST['produit'] as $_POST['qtt'][$val] => $val)
{
    echo($_POST['produit'][$i]);
    // Ou bien :
       echo " Valeur  : ".$_POST['qtt'][$i]."<br />";
	   
	   $i++;
}
Je ne sais pas si le code est propre... Mais il semble fonctionner...
Je vais quand même refaire des tests

Merci ;-)

Julien547
Invité n'ayant pas de compte PHPfrance

29 août 2014, 14:02

Désolé je me suis emporté :-)

Plutôt ceci :
 $i=0;
foreach($_POST['produit'] as $_POST['qtt'][] => $val)
{
    echo($_POST['produit'][$i]);
    echo " Valeur  : ".$_POST['qtt'][$i]."<br />";
	   
	   $i++;
}
Jais vérifié dans tous les sens...

Merci ;-)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 août 2014, 21:51

salut,


en fait non.
<?php
foreach($_POST['produit'] as $key => $val){
//$val => le produit courant;
//$_POST['qtt'][$key] => la quantitée associée
}
Avec ton code tu fais quelque chose d’incertain avec la variable $_POST.

@+
Il en faut peu pour être heureux ......