boutons radios alimentant requete update

Eléphant du PHP | 331 Messages

01 sept. 2006, 15:27

Bonjour à tous.

J'ai un mini formulaire dynamique dont le code est le suivant :
<?php 
  
mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
$query_ListeTeamsLibres = "SELECT IdTeam, Nom, NbMembres FROM prono_TeamLibre ORDER BY prono_TeamLibre.Nom";
$ListeTeamsLibres = mysql_query($query_ListeTeamsLibres, $connexion_bdd_mysql) or die(mysql_error());
$nb = mysql_num_rows($ListeTeamsLibres);
$tableau_equipes = array(); 
       
         
        // affichage des boutons radios 
        echo ("<form method='post'>"); 

       	while ($ligne_ListeTeams=mysql_fetch_array($ListeTeamsLibres))
		{ extract($ligne_ListeTeams);
         
            echo "<br><input type='radio' value='". $IdTeam ."' name='IdTeam'>";
			echo $Nom." (".$NbMembres." membres)"; 
        } 

        // Validation et fermeture du formulaire
        echo "<br/><br/><input type='submit' name='submit' value='Rejoindre cette team !'>"; 
        echo "</form>";  
		
?>
A la validation de ce formulaire, je voudrais simplement récupérer la valeur de $IdTeam pour l'intégrer dans une requete update qui mettra à jour une de mes tables.

Le problème, c'est que je ne maitrise pas le POST, et je ne sais donc pas comment m'y prendre.

Merci d'avance :!:

Jay

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

01 sept. 2006, 15:34

Post fonctionne de la même manière que Get, il s'agit simplement d'un tableau associatif contenant les noms des champs et les valeurs associées :)

Ce petit morceau de code te permet de voir ce que contient ton $_POST, pour te donner une idée des index et valeurs que tu peux y récupérer :
<?php
echo '<pre>';
print_r($_POST);
echo '</pre>';
?>

Eléphant du PHP | 331 Messages

01 sept. 2006, 16:17

Il doit me manquer un truc car avec ça :
<?php 
  
mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
$query_ListeTeamsLibres = "SELECT IdTeam, Nom, NbMembres FROM prono_TeamLibre ORDER BY prono_TeamLibre.Nom";
$ListeTeamsLibres = mysql_query($query_ListeTeamsLibres, $connexion_bdd_mysql) or die(mysql_error());
$nb = mysql_num_rows($ListeTeamsLibres);
$tableau_equipes = array(); 
       
         
        // affichage des boutons radios 
        echo ("<form method='post'>"); 

       	while ($ligne_ListeTeams=mysql_fetch_array($ListeTeamsLibres))
		{ extract($ligne_ListeTeams);
         
            echo "<br><input type='radio' value='". $ListeTeamsLibres['IdTeam'] ."' name='IdTeam'>";
			echo $Nom." (".$NbMembres." membres)"; 
        } 

        // Validation et fermeture du formulaire
        echo "<br/><br/><input type='submit' name='submit' value='Rejoindre cette team !'>"; 
        echo "</form>";  
		
?>
<?php 
echo '<pre>'; 
print_r($_POST); 
echo '</pre>'; 
?> 
Je vois bien autant de boutons radios correcement renseignés et correspondant au bon nombre d'enregistrements de mon recordset mais par contre mon tableau associatif ne contiant rien. J'ai simplement : Array ()

Une idée ?

Eléphant du PHP | 331 Messages

01 sept. 2006, 16:57

oups ... :roll:

... et si j'appuyais sur le bouton valider ? Voilà qui est mieux !
Par contre, je ne met pas encore le tag Résolu car je pense bientot avoir une autre question ...

Eléphant du PHP | 331 Messages

02 sept. 2006, 12:52

c'est donc bien ce qu'il me semblait, il me reste bien un petit soucis que voici:
J'ai maintenant le code suivant :
<?php 

mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);

//on liste toutes les teams libres pour les afficher dans les boutons radio
$query_ListeTeamsLibres = "SELECT IdTeam, Nom, NbMembres FROM prono_TeamLibre ORDER BY prono_TeamLibre.Nom";
$ListeTeamsLibres = mysql_query($query_ListeTeamsLibres, $connexion_bdd_mysql) or die(mysql_error());
$nb = mysql_num_rows($ListeTeamsLibres);
$tableau_equipes = array(); 

//recup de la team du joueur connecté
$query_JoueurConnecte = "SELECT IdTeamLibre FROM prono_Voteur WHERE (((prono_Voteur.IdVoteur)=$userdata[user_id]))";
$JoueurConnecte = mysql_query($query_JoueurConnecte, $connexion_bdd_mysql) or die(mysql_error());
while ($ligne_JoueurConnecte=mysql_fetch_array($JoueurConnecte))
		{ extract($ligne_JoueurConnecte);  
		$IDTL= $IdTeamLibre;
        }
			// affichage des boutons radios 
			echo ("<form method='POST' action='ChoixTeamLibre.php'>"); 
			
			while ($ligne_ListeTeams=mysql_fetch_array($ListeTeamsLibres))
			{ extract($ligne_ListeTeams);
			
					if ( $IdTeam == $IDTL )
					{
					$style = "Style1";
					}
					else 
					{
					$style = "";
					}
				 
				echo "<br><input type='radio' value='". $IdTeam ."' name='IdTeam'>";
				echo "<span class='$style'>$Nom</span>"." >>> ------ >>> ".$NbMembres." membre(s)"; 
			}
			
		 

        // Validation et fermeture du formulaire
        echo "<br/><br/><input type='submit' name='submit' value='Rejoindre cette team !'>"; 
        echo "</form>";  
		

//on affecte la bonne team au joueur connecté
$requete_maj_TeamLibre = "UPDATE prono_Voteur SET prono_Voteur.IdTeamLibre = '$_POST[IdTeam]' WHERE (((prono_Voteur.IdVoteur)=('$userdata[user_id]')))";
$maj_TeamLibre = mysql_query($requete_maj_TeamLibre, $connexion_bdd_mysql) or die(mysql_error());

//identification de chaque équipe libre
$query_TeamsLibres = "SELECT IdTeam, Nom FROM prono_TeamLibre ORDER BY prono_TeamLibre.IdTeam";
$TeamsLibres = mysql_query($query_TeamsLibres, $connexion_bdd_mysql) or die(mysql_error());
$NbTeamsLibres = mysql_num_rows($TeamsLibres);
       

	while ($ligne_TeamsLibres=mysql_fetch_array($TeamsLibres))
	{ extract($ligne_TeamsLibres);
         
	//on compte le nb de joueurs appartenant à chaque équipe libre existante
	$query_ListeJoueurs = "SELECT IdTeamLibre, Pseudo
	FROM prono_Voteur INNER JOIN prono_TeamLibre ON prono_Voteur.IdTeamLibre=prono_TeamLibre.IdTeam
	WHERE (((prono_Voteur.IdTeamLibre)=($IdTeam)))
	ORDER BY prono_Voteur.IdTeamLibre, prono_Voteur.Pseudo";
	$ListeJoueurs = mysql_query($query_ListeJoueurs, $connexion_bdd_mysql) or die(mysql_error());
	$NbListeJoueurs = mysql_num_rows($ListeJoueurs);
	
	//echo $Nom." => ".$NbListeJoueurs." joueurs, ";
	
	//on affecte le nombre de joueurs à chaque équipe
	$requete_maj_NbJoueurs = "UPDATE prono_TeamLibre SET NbMembres = $NbListeJoueurs WHERE (((prono_TeamLibre.IdTeam)=$IdTeam))";
	$maj_NbJoueurs = mysql_query($requete_maj_NbJoueurs, $connexion_bdd_mysql) or die(mysql_error());

    } 


?> 
Ce code permet à un utilisateur de se positionner dans un groupe en ayant choisi un des boutons radios listés dynamiquement.
A la validation du formulaire, je récupère la valeur et l'intègre dans une requete update de manière à incrémenter des compteurs.
De plus, je voudrais que cela change la couleur par défaut du nouveau groupe chosir par l'utilisateur.
Actuellement, l'affichage du nombre de membres (incrémenté par la requete citée précédemment) et l'affichage en couleur du bon bouton radio ne se fait que lors du chargement de page suivant.
Comment pourrais-je faire pour que ces deux actions s'éxécutent juste après la validation du formulaire, sans que l'utilisateur n'ai rien d'autre à cliquer.

merci !

Jay

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

03 sept. 2006, 12:28

C'est normal, php interprête ton code en le lisant de haut en bas. Puisque tu lui demande d'afficher le formulaire avant de faire l'update, il va cherher en base tes données alors que celles ci n'ont pas encore modifiées par l'update plus bas :)

Remonte donc la partie enregistrement en haut de ta page, là où il faut pour qu'elle se fasse avant ton SELECT. Celui ci ramenera du coup les résultats modifiés et tes tests pour définir le style marcheront dès la première page :)

Eléphant du PHP | 331 Messages

04 sept. 2006, 08:59

nickel, ça marche, merci beaucoup !!!
C'était si simple que je ne le voyais pas ! :lol:

Eléphant du PHP | 331 Messages

04 sept. 2006, 09:39

j'ai parlé un peu trop vite, j'ai encore une question :

En ayant mis l'update en haut de code, cela marche bien quand je suis effectivement sur ma page et que manipule mon formulaire.

Par contre, il y un couac lorsque je viens sur cette page pour la première fois sans avoir encore coché un des boutons radio et validé le formulaire.
En effet, n'ayant pas de valeur par défaut, il me fait toujours mon update en mettant une valeur vide dans ma table.
Comment pourrais-je faire pour que sur le premier chargement de ma page, et que donc ma requete update s'éxecute au chragement, je puisse attribuer un bouton radio actif par défaut et donc le style qui va avec.

Merci

Eléphant du PHP | 331 Messages

04 sept. 2006, 09:53

ok, bien ça aussi, c'est réglé. Pour info, voici en fait comment je l'ai réglé :
//on affecte la bonne team au joueur connecté [u][b](uniquement lorsque le formulaire est validé)[/b][/u]
if ($_POST[submit] <> "")
{
$requete_maj_TeamLibre = "UPDATE prono_Voteur SET prono_Voteur.IdTeamLibre = '$_POST[IdTeam]' WHERE (((prono_Voteur.IdVoteur)=('$userdata[user_id]')))";
$maj_TeamLibre = mysql_query($requete_maj_TeamLibre, $connexion_bdd_mysql) or die(mysql_error());
}

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

04 sept. 2006, 10:07

C'est cool :)

Pour ton test par contre, afin d'éviter les warnings éventuels (selon la configuration de php) te disant que l'index "submit" du tableau $_POST n'est pas défini, utilise plutôt la fonction isSet() qui te confirme si oui ou non la variable existe :
if(isSet($_POST['submit']) {
 ...
}
Tu peux aussi alléger un peu ta requête de parenthèses.. elles ne sont utiles que pour séparer et ordonner des OR/AND ou distinguer des sous-requêtes :
"UPDATE prono_Voteur 
SET prono_Voteur.IdTeamLibre = '".$_POST["IdTeam"]."' 
WHERE prono_Voteur.IdVoteur='".$userdata["user_id"]."'"; 

Eléphant du PHP | 331 Messages

04 sept. 2006, 10:21

Ryle,

Merci pour ton aide! :lol:

Par contre, le test sur le submit n'est pas suffisant ! En effet, je voudrais vraiment pouvoir mettre un bouton radio actif par défaut (selon la valur d'un champ dans ma table => récupération du champ attribué par le formulaire la fois précédente).

Mais avec ce code :
				echo "<br><input type='radio' value='". $IdTeam ."' name='IdTeam'>";
				echo "<span class='$style'>$Nom</span>"." >>> ------ >>> ".$NbMembres." membre(s)"; 
je ne sais pas comment faire pour mettre un bouton actif par défaut.

Tu peux m'aider stp ?

merci bcp !

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

04 sept. 2006, 11:05

Il te suffit d'ajouter l'attribut : "checked" dans le bouton radio que tu veux cocher par défaut :)
Tu peux le faire avec une condition, de la manière que pour déterminer le style..

Au niveau syntaxe tu peux également écrire checked="checked" et j'ai déjà vu des checked="true" qui me semblent plus logiques .. le résultat est le même, mais je pense que cela fait une différence au niveau des normes xhtml (je ne sais pas quelle devrait être la syntaxe exacte, donc si jamais un expert passe il pourra nous confirmer ça... en attendant, les 3 fonctionnent :))

Eléphant du PHP | 331 Messages

04 sept. 2006, 11:41

bien c'est bien ce qu'il me semblait mais ça marche pas.
voici ce que j'ai fait:
//on liste toutes les teams libres pour les afficher dans les boutons radio
$query_ListeTeamsLibres = "SELECT IdTeam, Nom, NbMembres FROM prono_TeamLibre ORDER BY prono_TeamLibre.Nom";
$ListeTeamsLibres = mysql_query($query_ListeTeamsLibres, $connexion_bdd_mysql) or die(mysql_error());
$nb = mysql_num_rows($ListeTeamsLibres);
$tableau_equipes = array(); 

//recup de la team du joueur connecté
$query_JoueurConnecte = "SELECT IdTeamLibre FROM prono_Voteur WHERE (((prono_Voteur.IdVoteur)=$userdata[user_id]))";
$JoueurConnecte = mysql_query($query_JoueurConnecte, $connexion_bdd_mysql) or die(mysql_error());
while ($ligne_JoueurConnecte=mysql_fetch_array($JoueurConnecte))
		{ extract($ligne_JoueurConnecte);  
		$IDTL= $IdTeamLibre;
        }
			// affichage des boutons radios 
			echo ("<form method='POST' action='ChoixTeamLibre.php'>"); 
			
			while ($ligne_ListeTeams=mysql_fetch_array($ListeTeamsLibres))
			{ extract($ligne_ListeTeams);
			
					if ( $IdTeam == $IDTL )
					{
					$style = "Style1";
					$coche = "checked";
					}
					else 
					{
					$style = "";
					$coche = "";
					}
				
				echo "<br><input type='radio' value='". $IdTeam ."' name='IdTeam' checked='$coche'}>";
				echo "<span class='$style'>$Nom</span>"." >>> ------ >>> ".$NbMembres." membre(s)"; 
			}
Ce qui est bizarre, c'est que l'attribution du style fonctionne parfaitement mais pas la case à cocher. Quelque soit les cas de figure, il me coche toujours le dernier bouton radio de ma liste. Impossible de lui faire respecter mon test !
Une idée ?

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

04 sept. 2006, 12:07

Ouep :)

déjà, tu peux commencer par virer l'accolade fermante qui ne sert à rien : "'$coche'}>" ;)

ensuite, je pense que le simple fait d'avoir l'attribut ckecked (même si sa valeur est vide) suffit à cocher la case. Du coup cette valeur étant vrai partout, il les coche au fur et à mesure qu'il les lis et tu te retrouve donc avec la dernière de cochée.

Essaye avec $coche = 'checked="checked"'; et ne met rien sinon :)

Eléphant du PHP | 331 Messages

04 sept. 2006, 12:13

c'est exactement ça => l'attribut seul suffisait à checker partout !

J'avais pas pensé à mettre tout en variable mais maintenant c'est nickel !

Merci bcp !!!