Récuparation de données d'un formulaire

Résolu
f0nzy Messages postés 22 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 24 juillet 2009 - 25 nov. 2008 à 16:28
f0nzy Messages postés 22 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 24 juillet 2009 - 1 déc. 2008 à 09:52
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

cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
27 nov. 2008 à 07:40
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
3
cs_TropNul Messages postés 340 Date d'inscription dimanche 18 septembre 2005 Statut Membre Dernière intervention 22 octobre 2009
25 nov. 2008 à 18:22
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
0
f0nzy Messages postés 22 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 24 juillet 2009
26 nov. 2008 à 12:00
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
0
f0nzy Messages postés 22 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 24 juillet 2009
27 nov. 2008 à 17:34
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0nzy Messages postés 22 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 24 juillet 2009
1 déc. 2008 à 09:52
Un grand merci TropNul
0
Rejoignez-nous