case a cocher dans un formulaire

hdi
Petit nouveau ! | 4 Messages

22 sept. 2010, 16:25

bonjour,

je dispose d'une page php contenant un formulaire permettant de réaliser une sélection de joueur selon leur catégorie (jeunes ou seniors)
j 'aimerais à l'ouverture de celle ci que l'utilisateur coche la case jeune ou seniors - et qu'on impose a une variable grace à un if ou autre
que les champs des select liste soient remplis par les noms des jeunes ou seniors selon la case coché


en gros je sais que c'est possible en faisant 2 pages php la premiere choisir jeune ou seniors et valider vers la 2 page du formulaire

Mais Moi j'aimerais que cela s'éffectue seulement dans une page.

merci pour vos conseils et vos remarques

ViPHP
AB
ViPHP | 5818 Messages

22 sept. 2010, 23:31

Tu peux faire un truc comme ça :
<?php
if (isset($_POST["envoyer"]))
{
	//Région
	print_r('sélection = ' .$_POST["selection"]);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript">
<!--
function Affiche_liste(id_form,id_select)
{
		var form_id = document.getElementById(id_form);
		var form_select = document.getElementById(id_select);
		
		if(form_id && form_select)
		{
				var tab = new Array();
				
				//cherche les balises select inlues dans l'id id_form (= categorie dans cet exemple)
                                 tab = form_id.getElementsByTagName('select');
				
				for (i=0; i < tab.length; i++) 		
					{
						/* on regarde si l'id est celui qu'on recherche */
						if (tab[i].id == id_select)
							{
								// Met le select en disable à false et le fait afficher
								tab[i].disabled = false;
								tab[i].style.display = 'inline';
							}
							else
							{
								// Met le select en disable à true et le cache
								tab[i].disabled = true;
								tab[i].style.display = 'none';
							}
					}
				// Affiche le formulaire
				form_id.style.display = "block";
		}
}
-->
</script>
<style type="text/css">
.categorie {
display:none;
}
</style>
</head>

<body>

<p>
juniors <input type="radio" name = "categorie" value = "juniors" onclick = "Affiche_liste(this.name,this.value)" /> seniors <input type="radio" name = "categorie" value = "seniors" onclick = "Affiche_liste(this.name,this.value)" />
</p>

<div>
<form action = "#" method = "post" class = "categorie" id = "categorie" >
	
    <select name = "selection" id = "juniors" >
       
       <option value = "0">«Choisissez»</option>
       <option value = "junior1">junior1</option>
       <option value = "junior2">junior2</option>
           
    </select>
       
       
    <select name = "selection" id = "seniors">
       
       <option value = "0">«Choisissez»</option>
       <option value = "senior1">senior1</option>
       <option value = "senior2">senior2</option>
       <option value = "senior3">senior3</option>
           
    </select>
       
   <input name = "envoyer" value = "envoyer" type = "submit"/>
   
  
</form>
</div>

</body>
</html>
Modifié en dernier par AB le 23 sept. 2010, 00:33, modifié 1 fois.

hdi
Petit nouveau ! | 4 Messages

23 sept. 2010, 00:06

super ca marche je te remercie d'avance
A+

ViPHP
AB
ViPHP | 5818 Messages

23 sept. 2010, 00:50

Après vérification ça ne fonctionne pas sous IE6 (comme souvent). J'ai indiqué la cause dans les commentaires html du code :wink:

Une modif pour que ça fonctionne aussi avec IE6 :
<?php
if (isset($_POST["envoyer"]))
{
        //Région
        print_r('sélection = ' .$_POST["selection"]);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript">
<!--
function Affiche_liste(id_form,id_select)
{
                var form_id = document.getElementById(id_form);
                var form_select = document.getElementById(id_select);
               
                if(form_id && form_select)
                {
                                var tab = new Array();
                               
                                //cherche les balises select inlues dans l'id id_form (= categorie dans cet exemple)
                                tab = form_id.getElementsByTagName('select');
                               
                                for (i=0; i < tab.length; i++)         
                                        {
                                                /* on regarde si l'id est celui qu'on recherche */
                                                if (tab[i].id == id_select)
                                                        {
                                                                // Met le select en disable à false et le fait afficher
                                                                tab[i].disabled = false;
                                                                tab[i].style.display = 'inline';
                                                        }
                                                        else
                                                        {
                                                                // Met le select en disable à true et le cache
                                                                tab[i].disabled = true;
                                                                tab[i].style.display = 'none';
                                                        }
                                        }
                                // Affiche le formulaire
                                form_id.style.display = "block";
                }
}
-->
</script>
<style type="text/css">
#select form {
display:none;
}
</style>
</head>

<body>

<p>
juniors <input type="radio" name = "choix_option" value = "juniors" class = "categorie" onclick = "Affiche_liste(this.className,this.value)" /> 

seniors <input type="radio" name = "choix_option" value = "seniors" class = "categorie" onclick = "Affiche_liste(this.className,this.value)" />
</p>


<!-- bug sous IE6 : form_id.getElementsByTagName ne fonctionne plus car l'ancêtre perd la boule si une balise name a la même valeur que l'id qui spécifie la zone de recherche (ici = form_id = categorie)
<p>
juniors <input type="radio" name = "categorie" value = "juniors" onclick = "Affiche_liste(this.name,this.value)" /> 

seniors <input type="radio" name = "categorie" value = "seniors" onclick = "Affiche_liste(this.name,this.value)" />
</p>
-->

<div id = "select">
<form action = "#" method = "post" id = "categorie" >
     <p> 
    <select name = "selection" id = "juniors">
       
       <option value = "0">«Choisissez»</option>
       <option value = "junior1">junior1</option>
       <option value = "junior2">junior2</option>
           
    </select>
       
       
    <select name = "selection" id = "seniors">
       
       <option value = "0">«Choisissez»</option>
       <option value = "senior1">senior1</option>
       <option value = "senior2">senior2</option>
       <option value = "senior3">senior3</option>
           
    </select>
       
   <input name = "envoyer" value = "envoyer" type = "submit"/>
   </p>
 
</form>
</div>

</body>
</html>

hdi
Petit nouveau ! | 4 Messages

23 sept. 2010, 10:07

dans mon cas çà pourrait être plus simple car
l'utilisateur doit choisir entre jeune et senior
sachant que dans

<div>
<?php echo "Joueur $i"?>
<select name="Joueur<?php echo $i; ?>" size="0" tabindex="1" >
<?php
foreach ($source as $value) { ?>
<option value="<?php echo $value; ?>"> <?php echo "$value <br />\n"; ?> </option>
<?php }
?>
</select>
</div>
et il suffirait de faire un test if source = jeune ou senior
car les variables jeunes ou seniors sont des ARRAY

mais ce simple test me contrarie...

ViPHP
AB
ViPHP | 5818 Messages

23 sept. 2010, 19:11

Ben alors si tu veux que les deux listes apparaissent au chargement de ta page, tu fais deux formulaires distincts qui te renverrons soit $_POST['junior'] soit $_POST['seniors'] donc il te suffit de tester l'existence de ces variables avec un simple isset.

Par contre si tu as d'autres valeurs à renvoyer en même temps que cette sélection il ne faut faire qu'un formulaire et là tu seras embêté si le joueur fais une sélection dans un sélect puis change d'avis et en fait une seconde dans l'autre. La solution que je t'ai donnée répond à ce problème.

Ce qu'il y a "d'un peu" compliqué dans le code, c'est le javascript et étant donné qu'il est fait... Il ne te reste plus qu'à lister le nom des joueurs dans les champs "options" avec deux boucles php.

Maintenant , comme je le disais plus haut, s'il n'y a que cette sélection à retourner dans le formulaire et aucune autre donnée, tu peux faire deux formulaires distincts.

ViPHP
AB
ViPHP | 5818 Messages

23 sept. 2010, 19:27

J'y pense, tu peux aussi afficher les deux sélections et ne permettre la sélection de l'une d'entre elle qu'après avoir coché sur un bouton pour éviter les erreurs. Dans ce cas il y a peu de modif à faire dans le code que je t'ai donné :
<?php
if (isset($_POST["envoyer"]))
{
        //Région
        print_r('sélection = ' .$_POST["selection"]);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript">
<!--
function Affiche_liste(id_form,id_select)
{
                var form_id = document.getElementById(id_form);
                var form_select = document.getElementById(id_select);
               
                if(form_id && form_select)
                {
                                var tab = new Array();
                               
                                //cherche les balises select inlues dans l'id id_form (= categorie dans cet exemple)
                                tab = form_id.getElementsByTagName('select');
                               
                                for (i=0; i < tab.length; i++)         
                                        {
                                                /* on regarde si l'id est celui qu'on recherche */
                                                if (tab[i].id == id_select)
                                                        {
                                                                // Met le select en disable à false et le fait afficher
                                                                tab[i].disabled = false;
                                                                //tab[i].style.display = 'inline';
                                                        }
                                                        else
                                                        {
                                                                // Met le select en disable à true et le cache
                                                                tab[i].disabled = true;
                                                                //tab[i].style.display = 'none';
                                                        }
                                        }
                                // Affiche le formulaire
                                //form_id.style.display = "block";
                }
}
-->
</script>
<style type="text/css">
#select form {
display:block;
}
</style>
</head>

<body>

<p>
juniors <input type="radio" name = "choix_option" value = "juniors" class = "categorie" onclick = "Affiche_liste(this.className,this.value)" /> 

seniors <input type="radio" name = "choix_option" value = "seniors" class = "categorie" onclick = "Affiche_liste(this.className,this.value)" />
</p>


<div id = "select">
<form action = "#" method = "post" id = "categorie" >
     <p> 
    <select name = "selection" id = "juniors" disabled="disabled">
       
       <option value = "0">«Choisissez»</option>
       <option value = "junior1">junior1</option>
       <option value = "junior2">junior2</option>
           
    </select>
       
       
    <select name = "selection" id = "seniors" disabled="disabled">
       
       <option value = "0">«Choisissez»</option>
       <option value = "senior1">senior1</option>
       <option value = "senior2">senior2</option>
       <option value = "senior3">senior3</option>
           
    </select>
       
   <input name = "envoyer" value = "envoyer" type = "submit"/>
   </p>
 
</form>
</div>

</body>
</html>

hdi
Petit nouveau ! | 4 Messages

23 sept. 2010, 19:37

C'est ca maintenant je vais essayer de l'adapter sur le mien

Peux t on cacher les champs non utiliser au lieu qu'ils soient grisées

merci

ViPHP
AB
ViPHP | 5818 Messages

23 sept. 2010, 19:47

C'est ca maintenant je vais essayer de l'adapter sur le mien

Peux t on cacher les champs non utiliser au lieu qu'ils soient grisées

merci
:?: Ben c'est ma première formule ! -> php-avance/case-cocher-dans-formulaire- ... ml#p337266