IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Listes deroulantes liees [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut Listes deroulantes liees
    Bonjour,

    Voilà ça fait un long moment que je cherche a créer des listes déroulantes liée entre elle. J'ai réussi à en lier 2 mais je n'arrive absolument pas à en lier 3 ou plus entre elle pourtant en m'inspirant des différent exemples que j'ai trouvé sur les forums.

    Je vous fournis un exemple de base sur les listes que je dois lier ainsi que ce que j’ai fait en PHP avec ce que j’obtiens avec les problèmes.
    Année--->Semestre--->Semaine
    2012---->1----------->10
    2011---->2----------->39

    Creation de la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    --
    -- Base de données: `test_liste`
    --
     
    DELIMITER $$
    --
    -- Fonctions
    --
    CREATE DEFINER=`root`@`localhost` FUNCTION `semestre`(Dates Date) RETURNS tinyint(4)
        DETERMINISTIC
    BEGIN
    RETURN CEILING(MONTH(Dates)/6);
    END$$
     
    DELIMITER ;
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `mesures`
    --
     
    CREATE TABLE IF NOT EXISTS `mesures` (
      `ID_MESURE` int(11) NOT NULL AUTO_INCREMENT,
      `Date` date DEFAULT NULL,
      PRIMARY KEY (`ID_MESURE`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=9 ;
     
    --
    -- Contenu de la table `mesures`
    --
     
    INSERT INTO `mesures` (`ID_MESURE`, `Date`) VALUES
    (1, '2012-03-12'),
    (2, '2012-03-12'),
    (3, '2012-05-22'),
    (4, '2012-05-22'),
    (5, '2012-10-18'),
    (6, '2012-10-18'),
    (7, '2011-03-12'),
    (8, '2010-03-12');
    liste.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    <?php
    // Variables de connexion
    $serveur = "localhost";
    $admin   = "root";
    $mdp     = "";
    $base    = "test_liste";
    $idAnnee = isset($_POST['annee'])?$_POST['annee']:null;
    $idSemestre = isset($_POST['semestre'])?$_POST['semestre']:null;
    $idSemaine = isset($_POST['semaine'])?$_POST['semaine']:null;
     
    // Affiche le resultat si les listes sont completées et que le bouton a été cliqué
    if(isset($_POST['ok']) && isset($_POST['semaine']) && $_POST['semaine'] != "")
    {
    	$annee_selectionne = $_POST['annee'];
    	$semestre_selectionne = $_POST['semestre'];
    	$semaine_selectionne = $_POST['semaine'];
    	echo ("Vous avez sélectionné l'année $annee_selectionne et le semestre $semestre_selectionne  et la semaine n°$semaine_selectionne");
    }
     
    $connexion = mysql_pconnect($serveur, $admin, $mdp);
    if($connexion != false)
    {
    	$choixbase = mysql_select_db($base, $connexion);
    ?>
    	choisir une année
    	<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chg_annee">
    		<select name="annee" id="annee" onchange="document.forms['chg_annee'].submit();">
    			<option>- - - Choisissez une année - - -</option>
    			<?php
    					$sql1 = "SELECT DISTINCT YEAR(`date`) AS annee1 FROM `mesures` ORDER BY annee1 DESC;";
    					$rech_annee = mysql_query($sql1);
    					// Creation d'un tableau permettant de stocker les valeurs de la requete sql1
    					$Tannee = array();
    					// Initialisation d'un compteur pour les années
    					$nb_annee = 0;
    					if($rech_annee != false)
    					{
    						while($ligneAnnee = mysql_fetch_assoc($rech_annee))
    						{ 
    							array_push($Tannee, $ligneAnnee['annee1']);
    							$nb_annee++;
     
    							for($i = 0; $i < $nb_annee; $i++)
    							{
    								echo("<option value=\"$Tannee[$i]\"".((isset($idAnnee) && $idAnnee == $Tannee[$i])?" selected":null).">$Tannee[$i] </option>");
    							}
    						}
    					}
    				mysql_free_result($rech_annee);
    				?>
    		</select>
    	</form>	
    	choisir un semestre
    	<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chg_semestre">
    		<select name="semestre" id="semestre" onchange="document.forms['chg_semestre'].submit();">
    			<option>- - - Choisissez un semestre - - -</option>
    			<?php
    				if(isset($idAnnee) && $idAnnee != -1)
    				{
    					$sql2 = "SELECT DISTINCT semestre(date) AS semestre1 FROM mesures;";
    					$rech_semestre = mysql_query($sql2);
    					// Creation d'un tableau permettant de stocker les valeurs de la requete sql2
    					$Tsemestre = array();
    					// Initialisation d'un compteur pour les semestres
    					$nb_semestre = 0;
    					if($rech_semestre != false)
    					{
    						while($ligneSemestre = mysql_fetch_assoc($rech_semestre))
    						{
    							array_push($Tsemestre, $ligneSemestre['semestre1']);
    							$nb_semestre++;
     
    							for($j = 0; $j<$nb_semestre; $j++)
    							{
    								echo("<option value=\"$Tsemestre[$j]\"".((isset($idSemestre) && $idSemestre == $Tsemestre[$j])?" selected":null).">$Tsemestre[$j]</option>");
    							}
    						}
    					}
    					mysql_free_result($rech_semestre);
    				}
    				?>
    		</select>
    	</form>	
    	choisir une semaine
    	<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chg_semaine">
    		<select name="semaine" id="semaine" onchange="document.forms['chg_semaine'].submit();">
    			<option>- - - Choisissez une semaine - - -</option>
    			<?php
    				if( (isset($idAnnee) && $idAnnee != -1) && (isset($idSemestre) && $idSemestre != -1) )
    				{
    					$sql3 = "SELECT DISTINCT WEEK(`date`) AS semaine1 FROM `mesures`";
    					$rech_semaine = mysql_query($sql3);
    					// Creation d'un tableau permettant de stocker les valeurs de la requete sql3
    					$Tsemaine = array();
    					// Initialisation d'un compteur pour les semaines
    					$nb_semaine = 0;
    					if($rech_semaine != false)
    					{
    						while($ligneSemaine = mysql_fetch_assoc($rech_semaine))
    						{
    							array_push($Tsemaine, $ligneSemaine['semaine1']);
    							$nb_semaine++;
     
    							for($k = 0; $k<$nb_semaine; $k++)
    							{
    								echo("<option value=\"$Tsemaine[$k]\"".((isset($idSemaine) && $idSemaine == $Tsemaine[$k])?" selected":null).">$Tsemaine[$k]</option>");
    							}
    						}
    					}
    					mysql_free_result($rech_semaine);
    				}
    			?>
    		</select>
    	</form>	
    	<input type="submit" name="ok" id="ok" value="Envoyer" />
    <?php
    mysql_close($connexion);
    }
    ?>

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Dans ton cas j'aurais fait dans un même formulaire car pour chaque submit d'un des formulaires comme par exemple celui de l'année il n'y aura que le $_POST['annee'] qui aura été modifié et non les autres ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Merci
    Bon j'ai un peu avancé mais encore quelques problèmes.
    La liste 2 s'affiche bien quand je renseigne la 1ere liste mais les données ne correspondent pas à la donnée sélectionné dans la 1iere liste (surement un pb de requêtes) et ensuite la liste 3 ne s'affiche que lors du clic sur le bouton envoyer et idem ne correspond pas au donnée.

    Nouveau code liste.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    <?php
    	// Variables de connexion
    	$serveur = "localhost";
    	$admin   = "root";
    	$mdp     = "";
    	$base    = "test_liste";
     
    	$idAnnee = isset($_POST['annee'])?$_POST['annee']:null;
    	$idSemestre = isset($_POST['semestre'])?$_POST['semestre']:null;
    ?>
    <!DOCTYPE html>
    <html dir="ltr" lang="fr-FR">
    	<head>
    		<meta charset="utf-8" />
    		<title>Test liste</title>
    	</head>
    	<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
    		<h3>Test liste deroulante</h3>
    		<?php
    			// TRAITEMENT APRES VALIDAION DES FILTRES
    			if(isset($_POST['ok']) && isset($_POST['semaine']) && $_POST['semaine'] != "")
    			{
    				$annee_selectionne = $_POST['annee'];
    				$semestre_selectionne = $_POST['semestre'];
    				$semaine_selectionne = $_POST['semaine'];
    				echo ("Vous avez sélectionné l'année $annee_selectionne et le semestre $semestre_selectionne ainsi que la semaine n°$semaine_selectionne");
    			}
    			$connexion = mysql_pconnect($serveur, $admin, $mdp);
    			if($connexion != false)
    			{
    				$choixbase = mysql_select_db($base, $connexion);
    				// Requete permettant de retourner toutes les années de la table mesures sans doublons
    				$sql1 = "SELECT DISTINCT YEAR(`date`) AS annee1 FROM `mesures` ORDER BY annee1 DESC;";
    				$rech_annee = mysql_query($sql1);
    				// Creation d'un tableau permettant de stocker les valeurs de la requete sql1
    				$Tannee = array();
    				// Un compteur pour les années
    				$nb_annee = 0;
    				if($rech_annee != false)
    				{
    					while($ligneAnnee = mysql_fetch_assoc($rech_annee))
    					{
    						array_push($Tannee, $ligneAnnee['annee1']);
    						//On incrémente le compteur 
    						$nb_annee++;
    					}
    				}
    		?>
    		<form action="<?php $_SERVER['PHP_SELF']?>" method="post" id="chg">
    		<fieldset>
    			<legend>Identificationde la campagne</legend>
    				<select name="annee" id="annee" onchange="document.forms['chg'].submit();">
    					<option value="-1">- - - Choisissez une année - - -</option>
    					<?php
    					for($i = 0; $i < $nb_annee; $i++)
    					{
    						echo("<option value=\"$Tannee[$i]\"".((isset($idAnnee) && $idAnnee == $Tannee[$i])?" selected":"-1").">$Tannee[$i] </option>");
    					}
    					?>
    				</select>
    				<?php
    				mysql_free_result($rech_annee);
     
    				if(isset($idAnnee) && $idAnnee != -1)
    				{
    					// Requete permettant de retourner toutes les semestres de la table mesures sans doublons
    					$sql2 = "SELECT DISTINCT semestre(date) AS semestre1 FROM mesures;";
    					if($connexion != false)
    					{
    						$rech_semestre = mysql_query($sql2, $connexion);
    						// Un compteur pour les semestres 
    						$nb_semestre = 0;
    						// Creation d'un tableau permettant de stocker les valeurs de la requete sql2
    						$Tsemestre = array();
    						// On va mettre les semestres dans le tableau
    						while($ligneSemestre = mysql_fetch_assoc($rech_semestre))
    						{
    							array_push($Tsemestre, $ligneSemestre['semestre1']);
    							$nb_semestre++;
    						}
    						// Construction de la liste déroulante semestre
    						echo("<select name=\"semestre\" id=\"semestre\ onchange=\"document.forms[\'chg\'].submit();\">");
     
    						for($j = 0; $j<$nb_semestre; $j++)
    						{
    							if($j != 0)
    							{					
    								echo("<option value=\"$Tsemestre[$j]\"".((isset($idSemestre) && $idSemestre == $Tsemestre[$j])?" selected":null).">$Tsemestre[$j]</option>");
    							}
    							else
    							{
    								echo("<option value=\"-1\">- - - Choisissez un semestre - - -</option>");
    							}
    						}
    						echo("</select>");
    					}
    					// Vide la memoire
    					mysql_free_result($rech_semestre);
     
    					if(isset($idSemestre) && $idSemestre != -1)
    					{
    						// Requete permettant de retourner toutes les semaines de la table mesures sans doublons
    						$sql3 = "SELECT DISTINCT WEEK(date) AS semaine1 FROM mesures;";
    						if($connexion != false)
    						{
    							$rech_semaine = mysql_query($sql3, $connexion);
    							// Un compteur pour les semaines
    							$nb_semaine = 0;
    							// Creation d'un tableau permettant de stocker les valeurs de la requete sql3
    							$Tsemaine = array();
    							// On va mettre les semaines dans le tableau
    							while($ligneSemaine = mysql_fetch_assoc($rech_semaine))
    							{
    								array_push($Tsemaine, $ligneSemaine['semaine1']);
    								$nb_semaine++;
    							}
    							// Construction de la liste déroulante semaine
    							echo("<select name=\"semaine\" id=\"semaine\" onchange=\"document.forms[\'chg\'].submit();\">");
    							for($k = 0; $k<$nb_semaine; $k++)
    							{
    								if($k != 0)
    								{
    									echo("<option value=\"$Tsemaine[$k]\"".((isset($semaine_selectionne) && $semaine_selectionne == $Tsemaine[$k])?" selected":null).">$Tsemaine[$k]</option>");
    								}
    								else
    								{
    									echo("<option value=\"-1\">- - - Choisissez une semaine - - -</option>");
    								}
    							}
    							echo("</select>");
    						}
    					// Vide la memoire
    					mysql_free_result($rech_semaine);
    				}
    				?>
    				<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
    		</fieldset>
    		</form>
    			<?php
    				}
    			}
    			// Terminé, on ferme la connexion
    			mysql_close($connexion);
    			?>
    	</body>
    </html>

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    en fait pour les semestres tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql2 = "SELECT DISTINCT semestre(date) AS semestre1 FROM mesures;";
    dans tous les cas, il te ferra tjs une liste avec tous les semestres ...

    Il faut que tu utilises $idAnnee dans un WHERE pour cette requête
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Pour l'affichage de la troisième liste (et en regardant rapide) tu as déjà une erreur sur la déclaration ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo("<select name=\"semestre\" id=\"semestre\ onchange=\"document.forms[\'chg\'].submit();\">");
    manque un " pour semestre ...
    ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo("<select name=\"semestre\" id=\"semestre\" onchange=\"document.forms[\'chg\'].submit();\">");
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Fench Voir le message
    dans tous les cas, il te ferra tjs une liste avec tous les semestres ...
    Dans l'absolu oui mais il est possible que une année je n'ai que des mesures effectué pendant un seul semestre d'ou la non possibilité de choisir pr une année qui ne contiendrait pas de mesure de semestre 2 par exemple.

    Citation Envoyé par Fench Voir le message
    Il faut que tu utilises $idAnnee dans un WHERE pour cette requête
    Oui mais je n'arrive pas a obtenir un resultat car je travail sur differentes fonction d'une meme table :/

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Dans l'absolu oui mais il est possible que une année je n'ai que des mesures effectué pendant un seul semestre d'ou la non possibilité de choisir pr une année qui ne contiendrait pas de mesure de semestre 2 par exemple.
    pas trop compris
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Fench Voir le message
    Pour l'affichage de la troisième liste (et en regardant rapide) tu as déjà une erreur sur la déclaration ...
    Merci ca m'avais echapé ...


    Ben oui une année est toujours composé de 2 semestres mais ma table mesures est simplifié au maximum pour que je puisse faire des tests car je fais des listes déroulantes qui me permette effet de filtrer les lignes de la table mesures. Mais je veux enlever la possibilité à l'utilisateur de filtrer, si aucune mesures n'a été effectué pendant le semestre 2 de l'année 2010 et donc d'effectué l'action sur la BD qui sera différente de juste afficher ce que l'on a sélectionné
    Je ne sais pas si j'ai été très clair :/

    Bon ça y ait j'ai trouvé tous mes petits soucis du code PHP qui restaient, il me manque plus qu'à réussir à faire les requêtes avec un WHERE mais gérer les variables PHP dans une requête MySQL je ne sais pas vraiment faire:/

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ben oui une année est toujours composé de 2 semestres mais ma table mesures est simplifié au maximum pour que je puisse faire des tests car je fais des listes déroulantes qui me permette effet de filtrer les lignes de la table mesures. Mais je veux enlever la possibilité à l'utilisateur de filtrer, si aucune mesures n'a été effectué pendant le semestre 2 de l'année 2010 et donc d'effectué l'action sur la BD qui sera différente de juste afficher ce que l'on a sélectionné
    Je ne sais pas si j'ai été très clair :/
    C'est à dire que pour une année donnée, si il n'y a pas de mesures sur un des deux semestres alors il ne pourra sélectionner dans semestre et semaine ?

    C'est à dire ne rien faire en gros pour cette année ?

    Comme tu comptabilises sur $nbSemestres, tu peux tester sur le cas si < 2 alors pas d'affichage des autres listes avec un message ou alors tu désactives la liste déroulante des semestres et des semaines ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Fench Voir le message
    C'est à dire que pour une année donnée, si il n'y a pas de mesures sur un des deux semestres alors il ne pourra sélectionner dans semestre et semaine ?

    C'est à dire ne rien faire en gros pour cette année ?
    Je pense que je t'avais pas compris... Non non semestre doit obligatoirement etre disponible c'est juste les données a l'interieur de la liste qui doit correspondre a l'année selectionné si pour l'année 2010 j'ai juste une date 2010-03-21 le semestre me laisse juste la possibilité de choisir le semestre 1 vu que mars correspond au semestre 1.

    Donc c'est bien dans la requete que je dois lui demander de recuperer l'année selectionné.

  11. #11
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Tu peux me donner la structure de la table mesure ... je voudrais vérifier mon idée.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Structure de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE TABLE IF NOT EXISTS `mesures` (
      `ID_MESURE` int(11) NOT NULL AUTO_INCREMENT,
      `Date` date DEFAULT NULL,
      PRIMARY KEY (`ID_MESURE`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=9 ;
     
    --
    -- Contenu de la table `mesures`
    --
     
    INSERT INTO `mesures` (`ID_MESURE`, `Date`) VALUES
    (1, '2012-03-12'),
    (2, '2012-03-12'),
    (3, '2012-05-22'),
    (4, '2012-05-22'),
    (5, '2012-10-18'),
    (6, '2012-10-18'),
    (7, '2011-03-12'),
    (8, '2010-03-12');
    Attention cependant la fonction semestre a été creer dans la BD pour pouvoir l'utiliser.

    Le code de la fonction semestre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    delimiter //
    CREATE FUNCTION test_liste.semestre (Dates Date)
    RETURNS TINYINT
    DETERMINISTIC
    BEGIN
    RETURN CEILING(MONTH(Dates)/6);
    END//
    Le code PHP avec les erreurs corrigés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    <?php
    	// Variables de connexion
    	$serveur = "localhost";
    	$admin   = "root";
    	$mdp     = "";
    	$base    = "test_liste";
     
    	$idAnnee = isset($_POST['annee'])?$_POST['annee']:null;
    	$idSemestre = isset($_POST['semestre'])?$_POST['semestre']:null;
    ?>
    <!DOCTYPE html>
    <html dir="ltr" lang="fr-FR">
    	<head>
    		<meta charset="utf-8" />
    		<title>Test liste</title>
    	</head>
    	<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%">
    		<h3>Test liste deroulante</h3>
    		<?php
    			// TRAITEMENT APRES VALIDAION DES FILTRES
    			if(isset($_POST['ok']) && isset($_POST['semaine']) && $_POST['semaine'] != "")
    			{
    				$annee_selectionne = $_POST['annee'];
    				$semestre_selectionne = $_POST['semestre'];
    				$semaine_selectionne = $_POST['semaine'];
    				echo ("Vous avez sélectionné l'année $annee_selectionne et le semestre $semestre_selectionne ainsi que la semaine n°$semaine_selectionne");
    			}
    			$connexion = mysql_pconnect($serveur, $admin, $mdp);
    			if($connexion != false)
    			{
    				$choixbase = mysql_select_db($base, $connexion);
    				// Requete permettant de retourner toutes les années de la table mesures sans doublons
    				$sql1 = "SELECT DISTINCT YEAR(`date`) AS annee1 FROM `mesures` ORDER BY annee1 DESC;";
    				$rech_annee = mysql_query($sql1);
    				// Creation d'un tableau permettant de stocker les valeurs de la requete sql1
    				$Tannee = array();
    				// Un compteur pour les années
    				$nb_annee = 0;
    				if($rech_annee != false)
    				{
    					while($ligneAnnee = mysql_fetch_assoc($rech_annee))
    					{
     
    						array_push($Tannee, $ligneAnnee['annee1']);
    						//On incrémente le compteur 
    						$nb_annee++;
    					}
    				}
    		?>
    		<form action="<?php $_SERVER['PHP_SELF']?>" method="post" id="chg">
    		<fieldset>
    			<legend>Identificationde la campagne</legend>
    				<select name="annee" id="annee" onchange="document.forms['chg'].submit();">
    					<option value="-1">- - - Choisissez une année - - -</option>
    					<?php
    					for($i = 0; $i < $nb_annee; $i++)
    					{
    						echo("<option value=\"$Tannee[$i]\"".((isset($idAnnee) && $idAnnee == $Tannee[$i])?" selected":"-1").">$Tannee[$i] </option>");
    					}
    					?>
    				</select>
    				<?php
    				mysql_free_result($rech_annee);
     
    				if(isset($idAnnee) && $idAnnee != -1)
    				{
    					// Requete permettant de retourner toutes les semestres de la table mesures sans doublons
    					$sql2 = "SELECT DISTINCT semestre(Date) AS semestre1 FROM mesures";
    					if($connexion != false)
    					{
    						$rech_semestre = mysql_query($sql2, $connexion);
    						// Un compteur pour les semestres 
    						$nb_semestre = 0;
    						// Creation d'un tableau permettant de stocker les valeurs de la requete sql2
    						$Tsemestre = array();
    						// On va mettre les semestres dans le tableau
    						while($ligneSemestre = mysql_fetch_assoc($rech_semestre))
    						{
    							array_push($Tsemestre, $ligneSemestre['semestre1']);
    							$nb_semestre++;
    						}
    						// Construction de la liste déroulante semestre
    						echo("<select name=\"semestre\" id=\"semestre\" onchange=\"document.forms['chg'].submit();\">");
    							echo("<option value=\"-1\">- - - Choisissez un semestre - - -</option>");
    						for($j = 0; $j<$nb_semestre; $j++)
    						{					
    							echo("<option value=\"$Tsemestre[$j]\"".((isset($idSemestre) && $idSemestre == $Tsemestre[$j])?" selected":null).">$Tsemestre[$j]</option>");
    						}
    						echo("</select>");
    					}
    					// Vide la memoire
    					mysql_free_result($rech_semestre);
     
    					if(isset($idSemestre) && $idSemestre != -1)
    					{
    						// Requete permettant de retourner toutes les semaines de la table mesures sans doublons
    						$sql3 = "SELECT DISTINCT WEEK(date) AS semaine1 FROM `mesures` ORDER BY semaine1 DESC;";
    						if($connexion != false)
    						{
    							$rech_semaine = mysql_query($sql3, $connexion);
    							// Un compteur pour les semaines
    							$nb_semaine = 0;
    							// Creation d'un tableau permettant de stocker les valeurs de la requete sql3
    							$Tsemaine = array();
    							// On va mettre les semaines dans le tableau
    							while($ligneSemaine = mysql_fetch_assoc($rech_semaine))
    							{
    								array_push($Tsemaine, $ligneSemaine['semaine1']);
    								$nb_semaine++;
    							}
    							// Construction de la liste déroulante semaine
    							echo("<select name=\"semaine\" id=\"semaine\">");
    								echo("<option value=\"-1\">- - - Choisissez un semestre - - -</option>");
    								for($k = 0; $k<$nb_semaine; $k++)
    								{
    										echo("<option value=\"$Tsemaine[$k]\"".((isset($semaine_selectionne) && $semaine_selectionne == $Tsemaine[$k])?" selected":null).">$Tsemaine[$k]</option>");
    								}
    							echo("</select>");
    						}
    					// Vide la memoire
    					mysql_free_result($rech_semaine);
    				}
    				?>
    				<br /><input type="submit" name="ok" id="ok" value="Envoyer" />
    		</fieldset>
    		</form>
    			<?php
    				}
    			}
    			// Terminé, on ferme la connexion
    			mysql_close($connexion);
    			?>
    	</body>
    </html>

  13. #13
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Oui c bien ce qu'il me semblait ...

    Pour ta liste des années ya rien à dire c ok, ensuite, il faut quand même que, sur l'année choisie afficher une deuxième liste donnant les semestres où il existe des mesures.
    En utilisant ta requête telle que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql2 = "SELECT DISTINCT semestre(Date) AS semestre1 FROM mesures WHERE YEAR(`date`)=$idAnnee";
    un truc dans le genre

    Tu obtiendras une deuxième liste avec soit rien, soit 1, soit 1, 2 Non!!

    Ensuite si il existe au moins un semestre, tu peux détailler avec la semaine

    Dans le cas où c rien, il y adésactivation de la liste des semestres et des semaines.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Merci merci, c'était bien ca mais en etant trop dedans je n'arrivais pas a trouver la bonne requete...

    Encore merci de ton aide tu me debloque bien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] 4 listes deroulantes liees
    Par Jeol2007 dans le forum AJAX
    Réponses: 7
    Dernier message: 13/11/2009, 18h49
  2. Réponses: 1
    Dernier message: 02/10/2008, 18h14
  3. listes deroulantes autocomplete liees
    Par Pitou5464 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 20/07/2008, 01h15
  4. Comment attribuer un lien à une liste déroulante liée ?
    Par matgk26 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/08/2006, 16h07
  5. [langage] liste déroulante
    Par Jeh dans le forum Langage
    Réponses: 6
    Dernier message: 16/09/2003, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo