Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/05/2011, 21h31   #1
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
Par défaut Menu déroulant dynamique et automatique

Bonjour,
J'ai un formulaire où j'affiche les âges des utilisateurs et leurs noms...

Voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
include"bd_db/connection.php";
 
include"bd_db/selection.php";
 
	$req=  " select bd_age,bd_nom FROM $table_db  ";
	$rep =  mysql_query($req, $cnx) or die( mysql_error() ) ;
 
	while($row=mysql_fetch_row($rep)){
		$var_age=$row[0];
		$var_nom=$row[1];
 
	echo "<tr><td>$var_age</td><td>$var_nom</td></tr>"  ;
		 			}	
 
 
				 ?>
Ça fonctionne...

Je vais mettre un menu déroulant au lieu d'afficher tous les ages dans la table...
Donc ce menu déroulant va prendre les infos dans la bdd MySql.

J’arrive afficher les valeurs dans mon menu.

Voici mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<select name="age_menu" id="age_menu" onchange="submit()">
        <?php
            echo "<option selected=\"selected\" value='null'>Choissiez une option</option>"; 
 
 
			$res =   " select bd_age FROM $table_db  ";
			$rep_menu =  mysql_query($res, $cnx) or die( mysql_error() ) ;
 
 
 
            while($affiche_contenu = mysql_fetch_assoc($rep_menu)) {
                echo '<option value="'.$affiche_contenu['bd_age'].'">'.$affiche_contenu['bd_age'].'</option>';
            }
        ?>
    </select>
1er question : comment je peux regrouper les informations::rolleyes:
Exemple
Citation:
+---------+-------------+----------+
| ID | bd_age | bd_nom |
+---------+-------------+----------+
| 1 | 5 ans | nathalie |
| 2 | 5 ans | alice |
| 3 | 2 ans | nathalie |
| 4 | 2 ans | john |
| 5 | 10 ans | gilles |
+---------+-------------+----------+
En fait avec le code actuel, les options de mon menu sont 2 fois "5 ans", 2 fois "2 ans" et une fois "10 ans". Comment je peux afficher seulement 3 options au lieu de 5 options (sans répéter) ?:rolleyes:



2e question : comment je peux afficher les résultats de ce menu, par exemple : lorsque l'on sélecte 5 ans, il faut que j'affiche Nathalie et Alice...:rolleyes:
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 21h39   #2
Membre régulier
 
Avatar de 2h15Crew
 
Homme Valentin
Étudiant
Inscription : mai 2011
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Valentin
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 79
Points : 97
Points : 97
Utilise un distinct dans ta requête pour ne sélectionner qu'une occurrence de chaque age.

Du genre :

Code :
1
2
3
 
SELECT DISTINCT Colonne
FROM Table
2h15Crew est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 21h40   #3
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Utilise DISTINCT dans ta requête.

Par contre, pour stocker un âge, utilise un champ SMALLINT et ne stocke que la valeur : actuellement tu stockes x fois " ans" pour rien.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 22h02   #4
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
Merci 2h15Crew et sabotage
Ça marche
Code :
$res =   " select DISTINCT bd_age FROM $table_db  ";


Bonsoir sabotage,

c'est vrais ... tu as raison
Code :
echo '<option value="'.$affiche_contenu['bd_age'].'">'.$affiche_contenu['bd_age'].'ans</option>';
Est ce que vous avez la solution pour ma 2e question ?
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 22h15   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code :
1
2
3
 
$an = ($affiche_contenu['bd_age'] == 1) ? ' an' : ' ans';
echo '<option value="'.$affiche_contenu['bd_age'].'">'.$affiche_contenu['bd_age'].$an.'</option>';
Pour le résultat, tu as juste à faire une requête avec le critère selectionné
Code :
'select bd_nom FROM table WHERE bd_age = ' . intval($_POST['age_menu']);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 17h24   #6
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
Bonjour Sabotage,

Merci pour le variable $an que je n'ai pas pu penser...

Pour le critère de sélection j'ai essayé de trouver la solution sans te demander, mais...
ce que j'ai fait à partir de ton code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
 			$cherche_menu =   " select bd_nom FROM $table_db WHERE bd_age = " . intval($_POST['age_menu']);
			$rep_cherche_menu =  mysql_query($cherche_menu, $cnx) or die( mysql_error() ) ;
 
			while($row_menu=mysql_fetch_row($rep_cherche_menu)){
				$var_nom=$row_menu[0];
 
				echo "<table><tr><td>$var_nom</td><td></tr></table>"  ;
		 										}	
 
 
  ?>
mais je ne sais pas s'il faut mettre un bouton soumettre et envoyer tout cela dans une autre page pour afficher les résultats ?
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 19h53   #7
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
alors, j'ai mis mon code dans 2e page et ça marche lorsqu’on sélectionne un article dans 1er écran, et on click sur le bouton envoyer pour afficher les résultats dans la 2e page

Voici le code et merci...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
	//connection au serveur
	include"bd_db/connection.php";
	//sélection de la base de données et table
	include"bd_db/selection_test.php";
 
		$var_age_menu=$_POST["age_menu"];
					$var_age_menu= htmlspecialchars($var_age_menu, ENT_QUOTES);
 
 
 			$cherche_menu =   " select bd_nom FROM $table_db WHERE bd_age = " . intval($_POST['age_menu']);
			$rep_cherche_menu =  mysql_query($cherche_menu, $cnx) or die( mysql_error() ) ;
 
			while($row_menu=mysql_fetch_row($rep_cherche_menu)){
				$var_nom=$row_menu[0];
 
				echo "<table><tr><td>$var_nom</td><td></tr></table>"  ;
		 										}	
 
?>

j'ai une question*: comment je peux afficher les informations dans 1er (le même) écran où il y a le menu déroulant lorsqu’un article a été sélectionné par l"utilisateur sans cliquer sur un bouton "Envoyer" ?
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 14h16   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Utilise du Javascript.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 16h24   #9
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
merci sabotage,

Javascript ? c'est compliqué...

voila la solution sans javascript :

Code :
<select name="age_menu" id="age_menu" onChange="location.href='?age='+this.value;">
( plus loin)

Code :
1
2
3
4
5
6
7
8
$age=0+@$_GET['age'];
$cherche_option_menu =   " select bd_nom,bd_age FROM $table_db WHERE bd_age =".$age;
 
$rep_cherche_option_menu =  mysql_query($cherche_option_menu, $cnx) or die( mysql_error() ) ;
 
	while($row_menu=mysql_fetch_row($rep_cherche_option_menu)){
		$var_nom=$row_menu[0];
		echo "<table><tr><td>$var_nom</td><td></tr></table>"  ;
Meerci et bonne journée...
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 17h01   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
c'est du javascript ce que tu nous montres
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 16h39   #11
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
C'est vrai Sabotage mais un p'tit (tout petit) script :
Code :
onChange="location.href='?age='+this.value;">
J'ai un problème ... Lorsque je change le critère de mon affichage :
Code :
1
2
3
 
 
select bd_nom,bd_age FROM $table_db WHERE bd_age ='".$_GET['age'].
Comme tu vois, dans le code ci-dessus, je fais mon sélectionne de mon bd, selon âge (dans bd_age qui a un type "smallint(6)), ça marche, mais si je veux faire la sélection, au contraire, selon le nom (dans bd_nom qui a un type "text") pour afficher les âges,
l'application affiche tous les âges sans que je sélectionne le nom dans le menu.
voici mon bd :
+----------+-------------+----------+
| ID | bd_age | bd_nom |
|type: |type: |type: |
|int(11) |smallint(6) | text |
+----------+------------+----------+
| 1 | 5 ans | nathalie |
| 2 | 5 ans | alice |
| 3 | 2 ans | nathalie |
| 4 | 2 ans | john |
| 5 | 10 ans | gilles |
+---------+-------------+----------+

Comment je peux trouver la solution ?

J'ai fais un écho

echo "echo $age";

quand c'est avec age (bd_age)
Code :
1
2
3
$age=0+@$_GET['age'];
echo "echo $age";
$cherche_option_menu =   " select bd_nom,bd_age FROM $table_db WHERE bd_age =".$age;
echo est 0... donc ça marche
mais avec le champs, bd_nom
Code :
1
2
3
$age=0+@$_GET['age'];
						echo "echo $age";
						$cherche_option_menu =   " select bd_age,bd_nom FROM $table_db WHERE bd_nom =".$age;
écho c'est encore 0 et ça ne marche pas

Comment je peux trouver la solution ?
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2011, 17h51   #12
Membre du Club
 
kiddy asp
Inscription : avril 2010
Messages : 180
Détails du profil
Informations personnelles :
Nom : kiddy asp

Informations forums :
Inscription : avril 2010
Messages : 180
Points : 49
Points : 49
j'ai trouvé...
Code :
1
2
3
 
//$cherche_option_menu =   " select bd_nom,bd_age FROM $table_db WHERE bd_age =".$age;  //une requête sur un champ numérique :
						$cherche_option_menu =   " select bd_age,bd_nom FROM $table_db WHERE bd_nom ='".$age."'";  //   requête sur un champ alphanumérique :
aspkiddy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h51.


 
 
 
 
Partenaires

Hébergement Web