Formulaire en boucle

Eléphanteau du PHP | 29 Messages

11 déc. 2011, 17:16

Bonjour,



J'ai créer une petite boutique sur internet en PHP avec BDD. Lorsque les produits sont listés par une boucle, j'ajoute un bouton type "radio" et un type="submit" pour valider le choix. La il n'y a aucun problème mais très peu esthétique et l'utilisateur doit cocher le bouton radio avant de valider.
J'ai testé plusieurs méthodes, mais des que je retire le bouton type"radio" les donnés postées sont les dernières de la boucle.
Y a t il un type de bouton permettant de sélectionner dans la liste affichée par ma boucle un seul des articles.
Par avance merci.

ViPHP
ViPHP | 2287 Messages

11 déc. 2011, 18:54

Bonjour,

Ta question relève davantage du HTML que du PHP.

Tu peux gérer à ta guise l'aspect de tes boutons radios grâce à CSS et les rendre + esthétiques. Sinon, une alternative fonctionnelle (pas forcément + belle) aux boutons radio serait une liste déroulante ( <select> ).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 29 Messages

11 déc. 2011, 21:51

Merci pour la réponse mais l’esthétique n'est qu'un aspect du problème. Les boutons sont générés en boucle à chaque lecture des réponses.
En clair je fais une recherche dans ma BDD par marque. A chaque résultat conforme j'affiche la désignation et un bouton radio pour ajouter au panier. Donc les boutons sont générés en boucle.
Lorsque je génère un bouton radio je coche le bouton et j’appuie sur valider. Dans la page de réception, aucun problème, les données ont bien été postées.
J'aimerais changer le bouton radio par un autre ou il n'y a juste à cliquer mais qui transmet les données. Si je mets un bouton simple, les données transmises sont les dernières de la base de données. Même avec un bouton input type text en affichant la référence du produit il post le dernier de la liste.
Merci d'avance

ViPHP
ViPHP | 2287 Messages

11 déc. 2011, 23:24

Désolé, mais pour moi c'est moyennement clair (malgré cette nouvelle explication). Le code de ta boucle pourrait peut-être aider à mieux cerner le problème :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 29 Messages

11 déc. 2011, 23:51

Voici le code de la boucle

//extraction des données
while($row = mysql_fetch_row($result)){
$code = $row[0];
$type = $row[1];
$ref = $row[2]; 
$marque = $row[3];
$designation = $row[4];
$prix = $row[5];
$stock = $row[6];
$etat = $row[7];
$promo = $row[8];
$garantie = $row[9];
$photo = $row[10];
$div4 = $row[11];
$div5 = $row[12];
$div6 = $row[13];
$div7 = $row[14];



	if ($type1==$type) {
			
			$image=$a .$photo. $b;
			$design=substr($designation,0,40); 
			
			?>	
           	 <tr><td width="60%">
			
			<?php echo "Marque: ".$marque; ?><br />
            <?php echo "Reference: ".$ref; ?><br />
			<?php echo "Code article: ".$code; ?><br />
			<?php echo "Designation: ".$design; ?><br /><div class="prix">
			<?php echo "Prix: ".$prix; echo " Euros"; ?><br /></div>
			<?php echo "Promo: ".$promo; ?><br />
            <?php 
			if ($garantie=="1 AN") echo "Garantie: ".$garantie;
			if ($garantie=="2 ANS") echo "Garantie: ".$garantie;
			if ($garantie=="3 ANS") echo "Garantie: ".$garantie;
			
			?>      
            
            
            
            
            </td>
            <td align="center"> <div size="40"> 
            <img src="<?php echo $image?>" text-align="center" width="70%" /></div>
            </td><td>
            
            
            
            <br/>
            
            
            <br/><input type="radio" name="code1"  value="<?php echo $code; ?>">
            <br/><input type="submit" name="Submit" value="Details">
           </tr>
            
			
			
</td></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr>
            
			
			

     		
            <?php
			
	}
//fin boucle
}
Modifié en dernier par zeus le 15 déc. 2011, 13:07, modifié 1 fois.
Raison : Ajout des balises [PHP]

Eléphanteau du PHP | 29 Messages

12 déc. 2011, 00:03


ViPHP
ViPHP | 2287 Messages

12 déc. 2011, 01:46

Ok alors on va commencer par un petit rappel : Dans un formulaire (c'est à dire les champs contenus dans une même balise <form> ... </form>), chaque élément de formulaire est repéré par un attribut name="" et éventuellement une valeur (qui peut être le produit d'une action utilisateur ou d'un attribut value=""). Les paires clé/valeur sont essentielles car elles sont ce que tu récupères au niveau serveur (php) lors de la soumission du formulaire.

J'ai cru comprendre que tu souhaitais autant que possible ne pas modifier le script qui reçoit les données. Sur cette page ( http://www.cginformatique24.com/boutique.php ), au niveau de ta boucle, chaque produit s'affiche avec le code suivant (le tout dans un formulaire unique pour tous les produits) (je ne reproduis ici que la dernière cellule de chaque ligne, celle qui contient les boutons radio) :
<!-- premier produit --><td>
<br>
<br>
<input type="radio" value="TABARCH7" name="code1">
<br>
<input type="submit" value="Details" name="Submit">
</td>
<!-- second produit --><td>
<br>
<br>
<input type="radio" value="TOSHPSC1YE01W00" name="code1">
<br>
<input type="submit" value="Details" name="Submit">
</td>
Donc la réception du formulaire exploite la valeur stockée dans la variable "code1".

Effectivement, si tu ne fais qu'enlever les boutons radio sur le code actuel, il ne reste tout simplement rien de spécifique au produit à transmettre au serveur lors du clic sur "Détails", donc aucune chance que tu obtiennes les détails du bon produit...

Une solution pourrait être de mettre chaque produit dans un <form> indépendant (plutôt qu'un <form> global pour toute la liste comme tu fais actuellement), ainsi tu pourrais assurer la transmission du code produit avec un champ caché :
<input type="hidden" name="code1" value="XXXXXXX" />
... Ce qui reviendrait tout bêtement à remplacer le type "radio" par un "hidden".
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 29 Messages

13 déc. 2011, 15:35

Merci beaucoup La solution est de mettre un form dans chaque boucle, Comment n'y ai-je pas pensé.
Encore merci