Récuparation de données d'un formulaire [Résolu]

Signaler
Messages postés
22
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2009
-
Messages postés
22
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2009
-
Bonjour à tous,

Je travaille sur un script et je calle à la fin. Je m'explique, je réalise pour mon site, un système de commande en ligne.
J'ai créé un formulaire à partir d'une base de donnée, avec une case ou on insere la quantité à commander.
Ensuite, je dois donc récupérer les informations envoyées. Cependant, j'ai un petit conflit, il m'affiche le prix de la quantité plutot que du compteur. Exemple: je commande 3 pièces du produit numéro 6 et il m'affiche le prix du produit numéro 3 au lieu du 6.
<? include "connexion.php";
$quantite = $_POST['quantite'];
$compteur = $_POST['compteur'];

foreach($quantite as $compteur){
$calcul=mysql_query("SELECT * FROM produit WHERE id='$compteur'");
while ($donnees2 = mysql_fetch_array($calcul) )
echo 'Récapitulatif :'.$compteur.' x '.$donnees2['prixht'];
}?>

Merci

5 réponses

Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

Pour récupérer les données transmises sous format 'tableau' via des formulaires, il faut faire comme pour les $_FILES.

Donc, dans ce cas, ça sera du genre :

$_POST['quantite'][0]
$_POST['quantite'][1]
$_POST['quantite'][2]
etc ...

Plus simplement, tu peux faire

foreach ($_POST['quantite'] as $key => $val) {
    if ($val != NULL) {
        $quantite=$val;
    }
}

En ce qui concerne le 'compteur', dans le formulaire, tu lui attribues toujours le même name bien que la valeur soit différente. Tu devrais faire en sorte que pour lui aussi, ça soit un name différent à chaque fois, avec un autre tableau par exemple.

Donc en toute logique, pour récupérer ensuite ces données, tu pourrais faire ainsi :

foreach ($_POST['quantite'] as $key => $val) {
    if ($val != NULL) {
        $quantite=$val;
       
$id=$_POST['compteur'][$key];
    }

}

Petit détail : Tu transmets à mon avis une valeur peu utile, le compteur. Tu pourrais tout aussi bien transmettre directement l'id. Exemple :

<?php
include "connexion.php";
$reponse2 = mysql_query("SELECT * FROM produit");
while ($donnees2 = mysql_fetch_array($reponse2)) { ?>
    <tr><td><?php echo $donnees2['id']; ?> 
    <td><?php echo $donnees2['nom']; ?>
    <td><?php echo $donnees2['prixht']; ?> €      
    <td>

     " name="identificateur[]" id = "identificateur[]" />
     <?php
}
mysql_close();
?>

Et ensuite, tu récupères comme suit

foreach ($_POST['quantite'] as $key => $val) {

    if ($val != NULL) {

        $quantite=$val;

       
$id=$_POST['identificateur'][$key];

    }


}

En espérant que cela te serve.

De rien (car, quand j'aide une personne ça m'aide aussi à apprendre encore plus)

Cordialement
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

Bonjour f0nzy

Le problème vient peut-être du foreach. Je ne comprends pas pourquoi tu l'utilises dans ce cas. Pour rappel, la  fonction foreach est utilisé pour boucler sur un array. Or là, il ne me semble pas que $quantite soit un array. Pire, tu copies la valeur de $quantite dans la valeur de $compteur, d'ou ton erreur d'affichage ;).

Ton code deviendrait donc (pour un seul produit)

<?php
include "connexion.php";
$quantite = $_POST['quantite'];
$compteur = $_POST['compteur']; // je présume que $compteur et l'id du produit dans ta bdd
$calcul=mysql_query("SELECT * FROM produit WHERE id='$compteur'"); // d'ou cette requête
$donnees2 = mysql_fetch_array($calcul); // et normalement, il y un id unique pour un produit !? donc un seul résultat
echo 'Récapitulatif :'.$quantite.' x '.$donnees2['prixht']; // donc finalement un seul affichage pour un produit
?>

Si par contre, tu veux réaliser un code pour gérer plusieurs produits sélectionnés/entrés dans le formulaire avec leurs quantités respectives, alors il faut procéder autrement, avec des "name" distincts pour chaque valeur du formulaire dans le cas de champ de texte.

Si j'ai mal compris ton but, pourrais-tu réexpliquer stp ?

Cordialement
Messages postés
22
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2009

En fait, oui, je dois gérer plusieurs produits. J'ai une table(produit) dans ma base de données dans laquelle j'ajoute ou je supprime des produits.
Sur la page du formulaire, j'affiche tous les produits de ma table et je rajoute un champ quantité à côté de chacun.

Le code du formulaire:
<? include "connexion.php";
$compteur = 0;
$reponse2 = mysql_query("SELECT * FROM produit");
while ($donnees2 = mysql_fetch_array($reponse2) )
  {
<tr><td><? echo $donnees2['id'];?> 
  <td><?php echo $donnees2['nom']; ?>
  <td><?php echo $donnees2['prixht']; ?> €      
        <td>

        <?php $compteur=$compteur+1;?>
        " name="compteur" id = "compteur" />
        <?
  }
  mysql_close();?>
J'ai fait un tableau avec mon champ quantité pour avoir plus facile pour récupérer mais c'est justement là que ca coince, comme tu as pu le voir. La variable compteur correspond à mon id, comme tu l' as dit.

Merci de ton interet en tout cas
Messages postés
22
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2009

Merci beaucoup, malheureusement j'ai seulement 15 minutes sur l'ordi aujourd'hui, mais j'essierais ce que tu me conseilles dés demain
Merci
Messages postés
22
Date d'inscription
mardi 16 septembre 2008
Statut
Membre
Dernière intervention
24 juillet 2009

Un grand merci TropNul