Récuperer plusieurs variables dans liste déroulante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récuperer plusieurs variables dans liste déroulante

par ALphaman » 25 juin 2007, 18:36

Ah dac merci ,
Je viens d'essayer pour l'instruction continue, j'ai recherché comment l'utiliser, et ai testé cette instruction à plusieurs endroit de mon code mais soit sa fait bugger la page, soit rien ne se passe.
else
 {  
     echo'<form action="marchetest.php" method="POST">';
    $query_marche = mysql_query('SELECT id_commerce, nombre_denree, prix_denree, id_objet, nom_objet, image FROM commerce');
    $i=0;
    // Boucle affichant toutes entrées dans la bdd + liste deroulante des quantitées à choisir //
    while ($marche = mysql_fetch_array($query_marche) )
      {
	    echo'<tr><div align="center">
        <td><img src="'.$marche['image'].'" width="31" height="29" border="1"></td>
        <td>'.$marche['nom_objet'].'</td>
        <td>'.$marche['nombre_denree'].'</td>
        <td>'.$marche['prix_denree'].'</td>
        <td>';             
        $nombre = 0;       
	    $id_commerce = $marche['id_commerce']; 
		$prix = $marche['prix_denree'];
		echo'<input type="hidden" name="id_'.$marche['id_objet'].'"'; 
		echo'<input type="hidden" name="'.$prix.'"/>'; 
		echo'<select name="nbr_'.$id_commerce .'">';	
		while ($nombre <= $marche['nombre_denree'])
                {	
				       if ($nombre = 0) 
					      {					   
				            $nombre++;
		                    continue;
						  }
				   echo '<option value="'.$nombre.'">'.$nombre.'</option>'; 				  
				   $nombre++;				
				  
                }
				
		$i++;
        echo'</td></tr>';		
		$prixfinal = $_POST['nbr_'.$id_commerce .''] * $prix;
		echo''.$prixfinal.'';		      
      }
}
	   ?>
     </table>
	 <br><input type="Submit" class="submit1" value="J'achète"></form></select><br></center>
Peut être je l'utilise mal ?
Merci en tous cas

par Ryle » 25 juin 2007, 16:59

Pour ne pas traiter les 0, il te suffit dans ta boucle d'utiliser l'instruction "continue" lorsque la qté est nulle et tu passeras directement à la ligne suivante :)

Quant à la somme de tes valeurs, il te suffit simplement de les additionner au fur et à mesure dans une variable :
$total = 0;
boucle (...) {
  $total = $total + $nouvelleValeur;
  // ou
  $total += $nouvelleValeur;
}
echo $total;

par ALphaman » 25 juin 2007, 16:47

Oué j'y avais pensé mais enfaite voici le resultat aprés le post

Code : Tout sélectionner

1 0 0 0 0 0 0 16 0 0 0 0
Sachant que chaque Zero correspond à un zero dans la liste deroulante ( donc un produit non sélectionné ) .

Enfaite je ne vois pas trop comment faire pour n'avoir comme résultat que ceux sélectionné, et même si je n'ai que ceux sélectionner comment pouvoir les traiter séparemment afin d'effectuer les req necessaire dans la bdd .

Edit:

J'ai donc reussi à trouvé par exemple le prix pour chaque objet mais voici avec ce que je me retrouve
0
315
78
0
0
0
0
0
30
0
0
200
J'aurais voulus vous demander, comment puis je additionner chaque resultat ?

par Ryle » 25 juin 2007, 15:49

Pas sur d'avoir bien compris, mais il te suffit juste de traiter ceux pour lequels la quantité est différente de zéro nan ? Tu fais un simple test : si jamais la qté est supérieure à zéro tu fais ton traitement, sinon tu passes au suivant :)

par ALphaman » 25 juin 2007, 15:42

Merci j'ai tester comme sa et je recupere bien tous ce que je demande id, prix, quantité .
 echo'<form action="marchetest.php" method="POST">';
    $query_marche = mysql_query('SELECT id_commerce, nombre_denree, prix_denree, id_objet, nom_objet, image FROM commerce');
    $i=0;
    // Boucle affichant toutes entrées dans la bdd + liste deroulante des quantitées à choisir //
    while ($marche = mysql_fetch_array($query_marche) )
      {
	        echo'<tr><div align="center">
             <td><img src="'.$marche['image'].'" width="31" height="29" border="1"></td>
             <td>'.$marche['nom_objet'].'</td>
             <td>'.$marche['nombre_denree'].'</td>
             <td>'.$marche['prix_denree'].'</td>
             <td>';             
        $nombre = 0;       
		    $id_commerce = $marche['id_commerce']; 
        echo'<select name="nbr_'.$id_commerce .'">';		
        while ($nombre <= $marche['nombre_denree'])
                {
                  echo '<option value="'.$nombre.'">'.$nombre.'</option>'; 
				  $nombre++;
                }
        $i++;		
        echo'</td></tr>';
		echo ''.$_POST['nbr_'.$id_commerce .''].''; 
	  }   ?>
     </table>
	 <br><input type="Submit" class="submit1" value="J'achète"></form></select><br></center>
Mais donc comment je peu recupérer les infos bonne et non egal à zero car enfin de compte si j'affiche ce qui a eté transmis je me retrouve avec tous ce qui ne l'a pas etait ( tous ce qui n'est pas choisi ) et ce qui l'a etait .

Je me demande donc comment faire pour n'avoir que ce qui à etait demandé, afin de pouvoir l'exploiter ( pour multiplier le prix à la quantité, et faire les mises à jour necessaire dans la bdd)

Merci

par Ryle » 25 juin 2007, 13:45

euh ben en effet, tu ne pourras pas jouer avec le tableau associatif si tes id ne sont pas uniques... donc option 1, tu as un autre id qui te permet d'identifier l'objet sans équivoque et tu l'utilises, soit tu restes sur la solution sans id, et tu boucle dessus en sachant qu'ils sont dans le même ordre que celui de tes select :)

par ALphaman » 25 juin 2007, 11:44

Merci de ta réponse, mais j'ai oublier de preciser, c'est peu etre un peu farfelue, mais plusieurs meme produit ( donc meme ID ) on un prix différent cela ne marcheras pas dans ce cas non ?

par Ryle » 25 juin 2007, 11:07

Au lieu de nommer chacun de tes select "nbr_$i", donne leur tous le même nom et ajoute une paire de crochet dedans : name="quantite[]"

Ainsi, lorsque tu récupèreras les données dans $_POST, tu obtiendras un tableau $_POST['quantite'] qui contiendra une case par liste, chacune contenant la valeur sélectionnée :
for ($i=0; $i < $_POST['quantite']; $i++) {
  echo 'Produit n°'.$i.' commandé '.$_POST['quantite'][$i].' fois';
}
Tu peux également, il me semble, passer l'id du produit entre les crochets dans le nom des selects, pour obtenir un tableau associatif et savoir directement à quel produit correspond quelle quantité :)

Récuperer plusieurs variables dans liste déroulante

par ALphaman » 24 juin 2007, 17:39

Bonjour,
Je rencontre un petit problème à la conception d'un petit script.

Le bout de code que j'ai fait me retourne la quantité de plusieurs produits (situé dans un tableau ) dans differentes liste déroulantes.

Je voudrais donc selectionner plusieurs quantité de plusieurs produits par exemple 7 X1, 3 X2, 10 X4 et ensuite lors de la validation, recupérer chaque valeurs de quantité selectionner dans la liste déroulante et les multipliés au prix de chacun, mon probléme et que je ne trouve pas comment effectuer cela.

Voici le bout de code que j'ai déja fait
<?php
 $query_marche = mysql_query('SELECT nombre_denree, prix_denree, id_objet, nom_objet, image FROM commerce');
    $i=0;
	// Boucle affichant toutes entrées dans la bdd + liste deroulante des quantitées à choisir //
    while ($marche = mysql_fetch_array($query_marche) )
	  {
	    echo'<tr><div align="center">
			 <td><img src="'.$marche['image'].'" width="31" height="29" border="1"></td>
			 <td>'.$marche['nom_objet'].'</td>
			 <td>'.$marche['nombre_denree'].'</td>
			 <td>'.$marche['prix_denree'].'</td>
			 <td>';			 
	    $nombre = 0;		
        echo'<select name="nbr_'.$i.'">';
        while ($nombre <= $marche['nombre_denree'])
                {
                  echo '<option value="'.$nombre.'">'.$nombre.'</option>'; 
                  $nombre++;
                }
        $i++;
        echo'</td></tr>';
	   } ?>
     </table>
	 <br><form action="marchetest.php" method="POST">
        <input type="Submit" class="submit1" value="J'achète">
	  </form><br>
Merci :)