boutons radios alimentant requete update

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 : boutons radios alimentant requete update

par jay64 » 04 sept. 2006, 17:04

ok, nickel, ça marche !
En plus c'est génial, car on peut même faire du ?valeur=$variable. Je sais, ça parait évident pour vous mais moi je débute ! :lol: et un rien m'émerveille !!! :shock:

Bien voilà, je crois que cette fois ci, je peux te féliciter Ryle, tu m'as appris beaucoup de choses aujourd'hui !!!

ET puis en plus, je tiens ma promesse ! :P

A+

Jay

par Ryle » 04 sept. 2006, 16:57

En fait, GET et POST sont les deux moyens d'envoyer des données à une page. Le GET se fait au niveau de l'url sous la forme nom=valeur, le POST quant à lui se fait généralement via un formulaire.

Pour passer des paramètres en GET, il te suffit après l'adresse de la page d'ajouter un point d'interrogation (pour spécifier que ce qui suit sont des paramètres) et d'envoyer tes couples nom=valeur, en les séparant par des "&". Ainsi si je regarde l'url de ma page de réponse :

Code : Tout sélectionner

posting.php?mode=quote&p=144803
Je peux en déduire via ce qui suit le "?" que deux paramètres sont passés en GET : "mode" et "p". Le premier a pour valeur "quote" le second "144803"

Pour les récupérer on utilise la variable superglobale $_GET (qu'on appelle comme ça parce qu'on peut l'utiliser partout, même au fin fond d'une fonction, et ça pour une variable c'est super fort ;))

Cette variable est un tableau associatif qui te permet de récupérer la valeur associé à chaque élément :
echo $_GET["mode"]; // affiche "quote"
Il te suffit donc d'ajouter ?parametre=valeur lors de l'ouverture de la popup et de récupérer $_GET['parametre'] pour avoir sa valeur dans ta popup :)

(pis pour le POST on utilise $_POST.. logique :))
Bon, une toute dernière question, après ej vous assure, c'est promis, j'arrete !
T'as promis hein ?! ;)

par jay64 » 04 sept. 2006, 16:48

Bon, une toute dernière question, après ej vous assure, c'est promis, j'arrete !

En ouvrant ma popup, je voudrais faire passer en paramètre le contenu d'un champ de la page source pour le récupérer dans la requete utilisée de la page de destination.

Après avoir cherché dans le forum, j'ai bien vu qu'il existe la fonction GET mais je ne sais pas comment l'utiliser.

Que dois-je spécifier dans la page source et comment récupérer ma valeur dans la page de destination ?

Merci encore !

par Ryle » 04 sept. 2006, 16:46

Y a pas de quoi :)

C'est vrai que c'est pas toujours évident (surtout si tu veux faire du php qui génère du javascript qui génère du html et qu'il faut penser à échapper dans l'un les caractères d'échappement de l'autre ;)) mais c'est pas non plus spécialement compliqué.
Faut juste te dire que tu as le droit de faire ' " ' ou bien " ' ", mais que si tu veux obtenir " " " ou ' ' ' , il faut l'écrire " \" " ou ' \' '
(c'est clair nan ? ;))

Dans tous les cas, une bonne chose à faire est de partir comme je l'ai fait du html que tu veux obtenir :)

par jay64 » 04 sept. 2006, 16:35

ok, j'ai compris (mais c'est pas simple !!!) !

voici ce que j'ai donc eu à taper :

Code : Tout sélectionner

echo "<span class='$style'>$Nom</span>"." >>> ------ >>> "."<a href=\"javascript:popup('CompoTeamsLibre.php')\">$NbMembres membre(s)".'</a>';
Merci Ryle ! :wink:

par Ryle » 04 sept. 2006, 16:16

L'antislash, c'etait pour le lien et la partie javascript. Pour php, c'est cette partie là qui n'est pas bonne : " membre(s)"\'</a>';

Il te faut soit tout mettre dans la même chaine, soit ajouter un point "." pour concaténer les deux chaines :
" membre(s)</a>"; ou bien " membre(s)" . '</a>';
Et pour la partie javascript, le echo va générer le lien suivant :

Code : Tout sélectionner

<a href='javascript:popup('CompoTeamsLibre.php')'>
Du coup, le navigateur va penser que la valeur de href est 'javascript:popup(' et ignorera le reste :)
Pour éviter cela, il te faut donc mettre des guillemets sur l'un ou l'autre :

Code : Tout sélectionner

"javascript:popup('CompoTeamsLibre.php');" ou 'javascript:popup("CompoTeamsLibre.php");'
Le problème, c'est que PHP va de la même manière interpréter ces guillemets en pensant qu'elles lui sont destinées pour marquer la fin de la chaine (ca se voit à la couleur :)) :
echo "<a href="javascript:popup('CompoTeamsLibre.php')">";
Pour lui dire qu'il s'agit de vraie guillemets et non pas de la fin de sa chaine, il faut les échapper à l'aide de l'antislash :
echo "<a href=\"javascript:popup('CompoTeamsLibre.php')\">";

par jay64 » 04 sept. 2006, 15:58

merci, mais je t'avoue que j'ai beau le triturer dans tous les sens, je ne capte pas, je ne m'en sors pas :

Pourquoi c'est pas bon ça ? :

Code : Tout sélectionner

echo "<span class='$style'>$Nom</span>"." >>> ------ >>> "."<a href='javascript:popup('CompoTeamsLibre.php')'>"$NbMembres." membre(s)"\'</a>';

par Ryle » 04 sept. 2006, 15:45

"Parse error" c'est une erreur de syntaxe.. généralement une parenthèse, une accolade non équilibrée, une apostrophe ou une guillemet oubliée, voire un point-virgule absent.

Dans ton cas, tu as petit soucis de guillemets vers la fin de ta chaine :)

Par ailleurs, tu vas avoir un autre soucis avec ton javascript dans le code généré, vu que tu utilises des apostrophes dans des apostrophes, ca va pas lui plaire ;) (rappel : pour échapper un caractère, il suffit de mettre un \ devant :))

par jay64 » 04 sept. 2006, 15:30

allez, et encore un truc qui me pose problème !
Je ne m'en sors pas avec mes simples et doubles côtes :
Quelqu'un peut-il m'aider à trouver l'erreur :

Code : Tout sélectionner

echo "<br><input type='radio' value='". $IdTeam ."' name='IdTeam' $coche>"; echo "<span class='$style'>$Nom</span>"." >>> ------ >>> "."<a href='javascript:popup('CompoTeamsLibre.php')'>"$NbMembres." membre(s)""</a>";
actuellement, cela me retourne ça :
Parse error: parse error, unexpected T_VARIABLE, expecting ',' or ';' in /homepages/7/d169003641/htdocs/teams/ChoixTeam.php on line 131

par jay64 » 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 !!!

par Ryle » 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 :)

par jay64 » 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 ?

par Ryle » 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 :))

par jay64 » 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 !

par Ryle » 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"]."'";