Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 18/05/2007, 02h23   #1
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Par défaut [SQL] Récupération de la valeur d'une liste déroulante issue d'une requête

Bonsoir,

Je suis tout nouveau sur ce forum, il m'a été conseillé par mon maitre de stage. Celui-ci estime ce forum et les personnes qui y sont présentes à l'écoute ...

Bref, j'aurais besoins d'aide dans le cadre de mon projet ! ! !

En fait, mon problème est au niveau d'une liste déroulante. Cette liste déroulante est formée à partir des champs d'une table. Lorsque l'utilisateur sélectionne un des choix de la liste je doit afficher de nouvelles données issues de ma base, donc d'une requête.

Mon problème est que je n'arrive pas à récupérer la valeur de la liste déroulante pour l'inclure dans la requête appropriées.

Voici mon code PHP en question :

Dans un premier temps, je crée ma liste déroulante avec les éléments nécessaires...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
echo '<form method="post" action="affichagedonnees.php">';		 
    echo '<select name="recordlignee" size="1">';
		echo '<option value ="1"> - </option>';
                        // Mise en place de la liste déroulante avec les champs ma table
		        $données = 'SELECT NomLignee FROM TbLigIdentite';
		        $res = mysql_query($données);
		        while($val=mysql_fetch_array($res)) {
                         echo '<option value="'.$val["NomLignee"].'">'.$val["NomLignee"].'</option>\n';}		
	        echo '</select>';  	
       echo '<p class="bouton"><input type= "submit" value="Afficher Résultat" /></p>';      
echo '</form>';
Ensuite, j'exploite le choix du l'utilisateur pour gérer mon affichage à savoir :

- si l'option " - " est choisie dans la liste déroulante je rentre mon if et j'affiche et mes données (cela fonctionne).

- si l'utilisateur choisie un autre choix je dois afficher un autre type de données

Voici la deuxième partie du code :

Code :
1
2
3
4
5
 
 
else if ($_POST['recordlignee'] == $val["NomLignee"] )
	{			
		$selecte = 'SELECT CatalogueLig,BreederLig,MainteneurLig,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig FROM TbLigIdentite WHERE NomLignee = '.$val["NomLignee"].'';
C'est ici que je bloke je n'arrive pas à récuperer la valeur ou le choix de l'utilisateur pour l'exploiter dans ma nouvelle requête.

Si vous avez une solution je suis preneur ...

MERCI POUR VOTRE AIDE !

A bientot !
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 06h12   #2
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
C'est pas du tout ce que j'aurais fait comme code, bien que je ne soit pas une référence, je voie bien que bien plus propre est possible.

Voila de quoi t'inspirer pour coder mieux :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?
// Préparation des données
$donnees = 'SELECT `NomLignee` FROM `TbLigIdentite`';
$resDonnees = mysql_query($donnees);
// Un conseil, nomme tes variables de manières plus explicative
?>
<form method="post" action="affichagedonnees.php">
  <select name="recordlignee" size="1">
    <option value ="1"> - </option>
<?php while ( $resDonnees = mysql_fetch_array($resDonnees)): ?>
    <option value="<?php $val["NomLignee"]; ?>"><?php $val["NomLignee"]; ?></option>
<?php endwhile; ?>
  </select>
  <p class="bouton"><input type= "submit" value="Afficher Résultat" /></p>
</form>
<!--
Si il te dis que l'usage intensif de <?php ?> ralentie largement l'execution du script tu peux lui répondre que c'est pour cela que tu voudrais qu'il t'explique la bufferisation de sortie.
-->
En préparant tes données dans "l'en-tête" de ton script, tu laisse le champs libre à ton graphiste qui pourra tranquillement modifier le HTML. Note que c'est aussi pour cette raison que j'ai opté pour while (): et endwhile; car le graphiste sera plus à l'aise (et toi aussi).
Au fait c'est mysql_fetch_assoc() qu'il est préférable d'utiliser.

Quant à la seconde partie, c'est déplorable que quelqu'un ai probablement payé pour qu'on t'apprenne à coder aussi peu sécurisé et difficile à débugger :
Code :
$selecte = 'SELECT CatalogueLig,BreederLig,MainteneurLig,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig FROM TbLigIdentite WHERE NomLignee = '.$val["NomLignee"].'';
Devrait être au moins :
Code :
1
2
$selecte = 'SELECT CatalogueLig,BreederLig,MainteneurLig,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig FROM TbLigIdentite WHERE NomLignee = "'.mysql_escape_string($val["NomLignee"]).'"';
mysql_query($selecte) or die(mysql_error()."\n".$selecte)
Si tu ajoute le "or die ... " entre mysql_query() et le point-virgule qui suit, tu verras ton erreur SQL (oubli de guillements autours d'une chaîne de caractères).
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 16h37   #3
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Bonjour,

Je me suis inspiré de ta proposition, j'ai finis par réussir à récupérer le résultat voulu, sauf que maintenant j'ai un problème au niveau de l'affichage.

Ma requête SQL semble fonctionnez, je l'ai testée, mais après je comprend pas le pourquoi du comment " CA MARCHE PAS" !

Bref, je fait part de la partie de code qui semble ne pas fonctionner. Je veux simplement afficher le résultat de la requête SQL.

Code :
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
 
<?php
 
$req = mysql_query('select CatalogueLig,BreederLig,MainteneurLig,NomLignee,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig from tbligidentite where nomlignee = '.$_GET['recordlignee'].'');
 
 
 
 
			echo '<table bgcolor="#FFFFFF" align="center">'."\n";
	        //affichage
	        echo '<tr>';
	        echo '<td bgcolor="#669999"><b><u>Catalogue</u></b></td>';
	        echo '<td bgcolor="#669999"><b><u>Breeder</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Mainteneur</u></b></td>';
	        echo '<td bgcolor="#669999"><b><u>Nom Lignée</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Nom Extérieur</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Origine Génétique</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Famille Origine</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>UCF Lignée</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>UCM Lignée</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Recurrent</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Dénomination Officielle</u></b></td>' ;
			echo '</tr>'."\n";
 
			// affichage des résultats 
			while($data = mysql_fetch_array($req)) {
	        echo '<tr>';
	       echo '<tr>';
	        echo '<td bgcolor="#CCCCCC">'.$data["CatalogueLig"].'</td>';
	        echo '<td bgcolor="#CCCCCC">'.$data["BreederLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["MainteneurLig"].'</td>';
	        echo '<td bgcolor="#CCCCCC">'.$data["NomLignee"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["NomExtLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["OrigGenetiqueLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["FamOrigineLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["UCFLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["UCMLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["RecurrentLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$data["DenomOffLig"].'</td>';
			echo '</tr>'."\n";
			echo '</tr>'."\n";
			}
	    echo '</table>'."\n";
 
	}
?>
Si Quelqu'un peut m'aider encore une fois ...

MERCI BEAUCOUP

Je précise, j'ai rien à l'affichage !
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 17h57   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Es-tu sur que tu aies quoi que ce soit dans la réponse? Parce que ton affichage se passe dans le while() donc si tu n'as aucun résultat, le mysql_fetch_assoc() retourne false des le début et ne t'affiches pas du tout tes résultats puisqu'il n'yen a pas.

Quand tu dis que tu n'as rien, tu as quand meme les titres de ton tableau non?
Et fais attention tu fais un echo "\n" dans ton html, pour aller a la ligne c'est <br/> et tu n'en as pas besoin vu que tu es dans un <table> de toute facon.

EDIT: tu as aussi une accolade de trop a la fin mais c'est peut etre le reste d'un copier coller!
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 20h00   #5
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Non c'est bon j'ai trouvé ! Merci pour les critiques et l'aide quand même !

Je met la source :

Code :
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
 
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'masdb';
 
	// connection à la DB
	$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
	mysql_select_db($db) or die ('Erreur :'.mysql_error());	
 
	//Filtre toutes les lignées!	
    echo '<form method="get" action="affichagedonnees.php">';
	echo '<p><FONT face="Arial" size="1"><strong><u> Atteindre Une Lignée :</u></strong></font><a></p><p>';		 
    echo '<select name="recordlignee" size="1">';
		echo '<option value="-"> - </option>';
		$données = 'SELECT NomLignee FROM TbLigIdentite';
		$res = mysql_query($données);
		while($val=mysql_fetch_array($res)) {
		echo '<option value="'.$val["NomLignee"].'">'.$val["NomLignee"].'</option>\n';}
		echo $val;
	echo '</select>';  
	echo '</p>'; 
	echo '<p class="bouton"><input type= "submit" value="Afficher Résultat" /></p>';      
	echo '</form>';
 
 
	if($_GET['recordlignee'] == "-"){
 
	// Affichage de toutes les lignées
 
	// requête SQL qui compte le nombre total d'enregistrement dans la table et qui
	//récupère tous les enregistrements
	$select = 'SELECT 		CatalogueLig,BreederLig,MainteneurLig,NomLignee,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig FROM TbLigIdentite';
	$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($result);
 
	if($total) {
	    // debut du tableau
			echo '<table bgcolor="#FFFFFF" align="center">'."\n";
	        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
	        echo '<tr>';
	        echo '<td bgcolor="#669999"><b><u>Catalogue</u></b></td>';
	        echo '<td bgcolor="#669999"><b><u>Breeder</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Mainteneur</u></b></td>';
	        echo '<td bgcolor="#669999"><b><u>Nom Lignée</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Nom Extérieur</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Origine Génétique</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Famille Origine</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>UCF Lignée</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>UCM Lignée</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Recurrent</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Dénomination Officielle</u></b></td>' ;
			echo '</tr>'."\n";
 
	    // lecture et affichage des résultats 
	    while($row = mysql_fetch_array($result)) {
	        echo '<tr>';
	        echo '<td bgcolor="#CCCCCC">'.$row["CatalogueLig"].'</td>';
	        echo '<td bgcolor="#CCCCCC">'.$row["BreederLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["MainteneurLig"].'</td>';
	        echo '<td bgcolor="#CCCCCC">'.$row["NomLignee"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["NomExtLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["OrigGenetiqueLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["FamOrigineLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["UCFLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["UCMLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["RecurrentLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["DenomOffLig"].'</td>';
			echo '</tr>'."\n";
	    }
	    echo '</table>'."\n";
	    // fin du tableau.
		}
		else {echo 'Pas d\'enregistrements dans cette table...';}
 
	// on libère le résultat
	mysql_free_result($result);	
	}
 
	else 
	{	
 
		/*$req = mysql_query('select CatalogueLig,BreederLig,MainteneurLig,NomLignee,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig from tbligidentite where nomlignee = '.$_GET['recordlignee'].'');*/
 
		// requête SQL qui compte le nombre total d'enregistrement dans la table et qui
	//récupère tous les enregistrements
	$select = 'select CatalogueLig,BreederLig,MainteneurLig,NomLignee,NomExtLig,OrigGenetiqueLig,FamOrigineLig,UCFLig,UCMLig,RecurrentLig,DenomOffLig from tbligidentite where nomlignee = "'.$_GET['recordlignee'].'"';
	$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($result);
 
	if($total) {
	    // debut du tableau
			echo '<table bgcolor="#FFFFFF" align="center">'."\n";
	        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
	        echo '<tr>';
	        echo '<td bgcolor="#669999"><b><u>Catalogue</u></b></td>';
	        echo '<td bgcolor="#669999"><b><u>Breeder</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Mainteneur</u></b></td>';
	        echo '<td bgcolor="#669999"><b><u>Nom Lignée</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Nom Extérieur</u></b></td>';
			echo '<td bgcolor="#669999"><b><u>Origine Génétique</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Famille Origine</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>UCF Lignée</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>UCM Lignée</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Recurrent</u></b></td>' ;
			echo '<td bgcolor="#669999"><b><u>Dénomination Officielle</u></b></td>' ;
			echo '</tr>'."\n";
 
	    // lecture et affichage des résultats 
	    while($row = mysql_fetch_array($result)) {
	        echo '<tr>';
	        echo '<td bgcolor="#CCCCCC">'.$row["CatalogueLig"].'</td>';
	        echo '<td bgcolor="#CCCCCC">'.$row["BreederLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["MainteneurLig"].'</td>';
	        echo '<td bgcolor="#CCCCCC">'.$row["NomLignee"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["NomExtLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["OrigGenetiqueLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["FamOrigineLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["UCFLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["UCMLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["RecurrentLig"].'</td>';
			echo '<td bgcolor="#CCCCCC">'.$row["DenomOffLig"].'</td>';
			echo '</tr>'."\n";
	    }
	    echo '</table>'."\n";
	    // fin du tableau.
		}
		else {echo 'Pas d\'enregistrements dans cette table...';}
 
	// on libère le résultat
	mysql_free_result($result);	
	}
 
 
 
?>
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 20h17   #6
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Si nomLignee contient une chaine de caracteres dans la base de donnees, c'est normal que cela ne fonctionne pas : cf la derniere partie de ma premiere reponse.

(Je me suis donne du mal a ecrire une reponse claire pour t'aider, je te suggere pour la derniere fois de lire au moins la seconde partie d'avance merci)
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 20h49   #7
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Re bonsoir,

Je viens de prendre en compte tes modifications is_null, et cela fonctionne.

Je te remercie du temps que tu as passé sur ce bout de code qui pour moi parait insurmontable.

Bref si, je continue mon chemin, et si j'ai d'autres questions, je n'hésiterai pas ...

MERCI

Bonne soirée
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2007, 11h33   #8
Inscrit
 
Avatar de is_null
 
Inscription : octobre 2006
Messages : 637
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 637
Points : 690
Points : 690
Avec plaisir, bonne formation !
__________________
Q: Dois-je haïr et cogner sur Microsoft ?
R: Non, vous n'êtes pas obligé. Non pas que Microsoft n'est pas écoeurant, mais il y avait une culture hacker bien avant Microsoft et il y en aura une bien après que Microsoft aura été de l'histoire ancienne. Toute énergie dépensée à haïr Microsoft serait mieux employée par vos compétences et votre passion. Écrivez du bon code, cela brisera suffisamment Microsoft sans polluer votre karma.
Comment devenir un hacker ? par Eric Steven Raymond
is_null 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 02h39.


 
 
 
 
Partenaires

Hébergement Web