Récupération d'un select multiple

Résolu/Fermé
nifa - 28 sept. 2008 à 20:16
 jojo - 2 oct. 2008 à 21:09
Bonjour,
J'ai 3 tables Mysql : une table "liste des cours", une table "liste des instructeurs en charge des cours", et une table pour faire la relation (chaque cours est associé à plusieurs instructeurs). Pour la mettre à jour mes tables, j'ai dans une page php un select multiple qui affiche pour un cours X, la liste des 6 instructeurs possibles. J'aimerais en plus que les instructeurs qui sont déjà associés à ce cours soient affichés en surbrillance. Exemple, le cours X est déjà associé aux instructeurs n° 2 et n° 4. Le select doit donc afficher les noms des 6 instructeurs, et les instructeurs 2 et 4 doivent être mis en surbrillance. Mon code est le suivant, malheureusement tous les instructeurs se mettent en surbrillance. Merci pour votre aide :

$_POST['test']=trim($_POST['test']);
if(empty($_POST['test'])) {
die("Erreur : aucun cours n'a été sélectionné. Si le problème persiste, veuillez contacter l'administrateur.");
} else {
$id_cours=$_POST['test'];
}

<select name="selecMajInstr[]" multiple="true" size="4">
<?php
$sqlInstr = " SELECT DISTINCTROW `instructeurs`.* "
. " FROM `instructeurs` "
. " LEFT JOIN `instr_de_cours`"
. " ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` "
. " ORDER BY `instructeurs`.`instructeur` ASC ";
$resultInstr = mysql_query($sqlInstr) or die('Erreur SQL : '.$sqlInstr.'<br>'.mysql_error());

while ($val = mysql_fetch_array($resultInstr)){
$instructeur=$val['instructeur'];
$id_de_cours=$val['id_de_cours'];
$select="";
if ($id_de_cours=$id_cours){
$selected="selected";
}
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>";
}
?>
</select>

27 réponses

jerome_64 Messages postés 14 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 1 octobre 2008 1
29 sept. 2008 à 01:10
bonjour,
il faudrait remplacer dans:

if ($id_de_cours=$id_cours){
$selected="selected";
}

par

if ($id_de_cours==$id_cours){
$selected="selected";
}

donc le = affectation par == comparaison
1
Bonjour et merci pour la réponse, mais avec le == aucune ligne n'est en surbrillance.

Je me demande si c'est au niveau de la requête mysql qu'il faut intervenir. Précisions supplémentaires :
la table Instructeurs contient les champs id_instr et instructeur,
la table Cours contient les champs id_cours et d'autres champs,
la table de relation instr_de_cours contient les champs id_de_cours et id_de_instr.

la requête suivante affiche la liste de tous les instructeurs :
" SELECT DISTINCTROW `instructeurs`.* FROM `instructeurs` LEFT JOIN `instr_de_cours`"
. " ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` ";

si j'aoute . " WHERE (`instr_de_cours`.`id_de_cours` = $id_cours)
la requête n'affiche que les instructeurs liés au cours X (donc ceux que j'aimerais avoir en surbrillance dans mon select).

Est-ce qu'il y a une modification à faire dans la requête mysql pour :
1) afficher la liste de tous les instructeurs
2) si `instr_de_cours`.`id_de_cours` = $id_cours
3) alors cet enregistrement sera en surbrillance

Merci beaucoup de m'aider car je suis bloquée là dessus depuis pas mal de temps...
0
Bonsoir,

Je pense avoir une piste :

1- Laisse déja le "if ($id_de_cours ==$id_cours)" en place.
2- Si aucune ligne n'est en surbrillance - c'est qu'il ne passe donc pas dans ce test - ok?.
3- tu nous a dit que "la table Instructeurs contient les champs id_instr et instructeur" et donc ne contient aucune info. sur id_cours - cette information est en faite portée par la table instr_de_cours.
4 Or, regarde, dans ton select, tu fais : "SELECT DISTINCTROW `instructeurs`.*" et donc tu récuperes seulement les infos id_instr et instructeur de la table instructeurs que tu "mappes" ensuite dans ton tableau à deux entrées.
5- Or ton tableau semble avoir 3 entrées je pense et celle qui pose problème est l'entrée 'id_de_cours' qui n'est donc jamais renseignée - elle est donc a SPACE !!.
6- donc tu ne passera jamais le test "if ($id_de_cours == $id_cours)" et tous tes champs sont en non-surbrillance...

Donc je propose ceci :

"SELECT DISTINCTROW `instructeurs`.*", 'instr_de_cours'.id_de_cours
FROM `instructeurs` LEFT JOIN `instr_de_cours`"
" ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` ";
" WHERE (`instr_de_cours`.`id_de_cours` = $id_cours) "

Ca devrait marcher normalement.

Remarque : le LEFT JOIN t'assures de récuperer tous les instructeurs - pas de problèmes.

A suivre...
Jojo.
0
Re,

Avec une toute petite correction sur l'ordre SQL ... voilà ... (erreur d'édition) :

"SELECT DISTINCTROW `instructeurs`.*, 'instr_de_cours'.id_de_cours
FROM `instructeurs` LEFT JOIN `instr_de_cours`"
" ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` "
" WHERE (`instr_de_cours`.`id_de_cours` = $id_cours) "

Note : pourquoi utilises tu le DISTINCTROW ? - je pense que ce n'est pas nécéssaire si la table instructeur est bien concue à la base car tu recupères tous les champs de cette table et quelles que soient tes PRIMAREY KEYS pour cette table : les entrées sont uniques.

Amicalement.
Jojo.
0
bouh,

Je suis pas trés consciencieux - j'ai encore oublié ceci :

D'aprés l'odre SELECT que je t'ai fourni (on récupéré trois champs), verifie bien la structure de ton tableau qui doit etre structuré ainsi et dans cet ordre pour que le 'mapping' soit cohérent :

| id_instr | instructeur | id_de_cours |

Voilà - je pense que c'est ok pour moi ce soir.
Désolé.

Amicalement.
Jojo.
0
Merci 1000x pour toutes explications. Le résultat est presque atteint : je peux enfin afficher la liste de tous les instructeurs, et ceux qui sont liés au cours X sont en surbrillance. Le seul bémol : le select affiche des doublons même si je mets DISTINCTROW. En fait le select affiche le nom de chaque $instructeur autant de fois que la condition $id_de_cours==$id_cours est remplie. Or il faudrait qu'il se limite à afficher enregistrements qui répondent également à la condition ($id_instr==$id_de_instr). Le script qui fonctionne presque :

$_POST['selecMajCourstest']=trim($_POST['selecMajCourstest']);
if(empty($_POST['selecMajCourstest'])) {
die("Erreur : aucun cours n'a été sélectionné. Si le problème persiste, veuillez contacter l'administrateur.");
} else {
$id_cours=$_POST['selecMajCourstest'];
}

<select name="selecMajInstr[]" multiple="true" size="4">
<?php
$sqlInstr = " SELECT `instructeurs`.*, `instr_de_cours`.`id_de_cours` "
. " FROM `instructeurs` LEFT JOIN `instr_de_cours` "
. " ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` "
. " ORDER BY `instructeurs`.`instructeur` ASC ";
$resultInstr = mysql_query($sqlInstr) or die('Erreur SQL : '.$sqlInstr.'<br>'.mysql_error());
while ($val = mysql_fetch_array($resultInstr)){
$instructeur=$val['instructeur'];
$id_de_cours=$val['id_de_cours'];
$selected="";
if ($id_de_cours==$id_cours){
$selected="selected";
}
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>";
}
?>
</select>

J'ai essayé d'ajouter
dans la requête: SELECT `instructeurs`.*, `instr_de_cours`.* (...)
dans la bouche while: $id_de_instr=$val['id_de_instr']; (...)
et de compléter la condition: if (($id_de_cours==$id_cours) && ($id_instr==$id_de_instr)) (...)

Mais ça ne marche pas mieux. J'en déduis que ma requête mysql est montée à l'envers ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re,

Ta requete est trés correcte - seulement on obtient une "dégénérésence" qui est tout à fait normale :

- Tu auras autant d'entrées pour un instructeur de la table instructeur qu'il a de cours dans la table instr_de_cours.

- exemple de ce que tu récupéré dans ton tableau $val aprés avoir parcouru le SELECT:
......................................................
| id_instr | instructeur | id_de_cours |
.......................................................
| 1 | Mr Lucien | 1 |
| 1 | Mr Lucien | 2 |
| 2 | Mr Raymond| 4 |
| 2 | Mr Raymond| 5 |
| 2 | Mr Raymond| 6 |
......................................................

Ok ??
Bon.

.. et là de ce que tu affiches à l'écran RéELLEMENT par echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>" :

...................................
| id_instr | instructeur |
..................................
| 1 | Mr Lucien |
| 1 | Mr Lucien |
| 2 | Mr Raymond|
| 2 | Mr Raymond|
| 2 | Mr Raymond|
..................................

--> On constate les doublons dont certains sont en surbrillance mais c'est NORMAL puisque tu veux tous les cours de chaque instructeur + ceux séléctionés par l'utilisateur en surbrillance.....donc doublons (id_instr, instructeur) et oui....surtout qu'en plus à l'écran avec ton "echo" - tu n'affiches meme pas id_de_cours à l'écran qui me semble une information pértinente (mais bon).

Donc je pense que tu veux afficher réellement ceci :

"Tu veux tous les instructeurs et ceux qui ont AU MOINS un id_cours = à celui séléctionné par l'utilisateur doivent etre affiché en surbrillance."

Si c'est ca - merci de le confirmer et je me remet au travail (:>).

A+.
Jojo
0
Re,

Ca ca devrait te convenir je pense - je n'ai pas touché à l'odre SELECT qui reste correct :
A+.
________________________________________________________________________

$_POST['selecMajCourstest']=trim($_POST['selecMajCourstest']­);
if(empty($_POST['selecMajCourstest'])) {
die("Erreur : aucun cours n'a été sélectionné. Si le problème persiste, veuillez contacter l'administrateur.");
} else {
$id_cours=$_POST['selecMajCourstest'];
}

<select name="selecMajInstr[]" multiple="true" size="4">
<?php
$sqlInstr = " SELECT `instructeurs`.*, `instr_de_cours`.`id_de_cours` "
. " FROM `instructeurs` LEFT JOIN `instr_de_cours` "
. " ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` "
. " ORDER BY `instructeurs`.`instructeur` ASC ";
$resultInstr = mysql_query($sqlInstr) or die('Erreur SQL : '.$sqlInstr.'<br>'.mysql_error());

==> cette variable devra etre définie - du meme type que $id_instr - elle est initialisée ici
$id_instr_TMP="";

while ($val = mysql_fetch_array($resultInstr)){
$instructeur=$val['instructeur'];
$id_de_cours=$val['id_de_cours'];

==> récupère id_instr stockée dans le tableau (à définir)
$id_instr=$val['id_instr'];

$selected="";
==> si id_instr courant différent de celui de l'itération précedente
if ($id_instr_TMP != $id_instr)
{
if ($id_de_cours==$id_cours){
$selected="selected";
}
==> affichage del l'enregistrement
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>";
}
}
==> sauvegarde du id_instr courant
$id_instr_TMP = $id_instr;
?>
</select>
_____________________________________________________________________________
0
Avec une correction suite à un problème d'édition :

$_POST['selecMajCourstest']=trim($_POST['selecMajCourstest']­­);
if(empty($_POST['selecMajCourstest'])) {
die("Erreur : aucun cours n'a été sélectionné. Si le problème persiste, veuillez contacter l'administrateur.");
} else {
$id_cours=$_POST['selecMajCourstest'];
}

<select name="selecMajInstr[]" multiple="true" size="4">
<?php
$sqlInstr = " SELECT `instructeurs`.*, `instr_de_cours`.`id_de_cours` "
. " FROM `instructeurs` LEFT JOIN `instr_de_cours` "
. " ON `instructeurs`.`id_instr` = `instr_de_cours`.`id_de_instr` "
. " ORDER BY `instructeurs`.`instructeur` ASC ";
$resultInstr = mysql_query($sqlInstr) or die('Erreur SQL : '.$sqlInstr.'<br>'.mysql_error());

==> cette variable devra etre définie - du meme type que $id_instr - elle est initialisée ici
$id_instr_TMP="";

while ($val = mysql_fetch_array($resultInstr)){
$instructeur=$val['instructeur'];
$id_de_cours=$val['id_de_cours'];

==> récupère id_instr stockée dans le tableau (à définir)
$id_instr=$val['id_instr'];

$selected="";
==> si id_instr courant différent de celui de l'itération précedente
if ($id_instr_TMP != $id_instr)
{
if ($id_de_cours==$id_cours){
$selected="selected";
}
==> affichage del l'enregistrement
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>";
}
==> sauvegarde du id_instr courant
$id_instr_TMP = $id_instr;
}
?>
</select>
_____________________________________________________________________________
0
Merci infiniment pour toute ton aide. Je n'ai pas trouvé la correction cf. le précédent post. Entre temps j'ai essayé le script proposé à 26h16. Hélas, j'ai toujours mes doublons.

J'ai affiché toutes les valeurs de mon select. Voici ce j'obtiens, par ex. pour $id_cours==2 :
......................................................
| id_instr | instructeur | id_de_cours |
.......................................................
| 1 | Mr Lucien | 1 |pas en surbrillance
| 1 | Mr Lucien | 2 |en subrillance
| 2 | Mr Raymond | 2 |en surbrillance
| 2 | Mr Raymond | 5 |pas en surbrillance
| 2 | Mr Raymond | 6 |pas en surbrillance
| 2 | Mr Stéphane | 2 |en surbrillance
| 2 | Mr Stéphane | 5 |pas en surbrilance
......................................................

Mes tables sont ainsi :
COURS INSTR_DE_COURS INSTRUCTEURS
id_cours (clé primaire) -----( id_de_cours (index)
id_de_instr (index) )------------------ id_de_instr (index)
0
Re,

- Laisse tomber mes derniers POST - pas bon.
- Je comprends le problème mais il est po si simple à résoudre au vu de tes besoins.

Pour ma part - je te fournirai une solution demain matin à la premiere heure - no problemo - la nuit porte conseil.

(bonne nuit et à demain).

(| -) "Bzzzzzzzz....." (o |)
0
En effet, j'ai testé les 2 derniers post. L'avant-dernier met les surbrillances mais aussi les doublons. Le dernier n'affiche pas les doublons, mais les surbrillances sont aléatoires... Bon, moi aussi je mets le cerveau au repos. Merci encore.
0
Re,

- Percuté soldat.

Tu a tout à fait compris le problème.

L'avant dernier POST : bug - pas bon.
Le dernier POST : surbrillance aléatoire car je ne me fie en fait qu'an premier enregistrement récupéré pour un institeur sans considérer les autres - surbrillance aléatoire blabla... t'a tout à fait compris.

Bah tu trouvera surement la soluce (:>).... j'en sui sure.

Merci pour tout.
Jojo.
0
Hilou !!,

J'ai résolu notre petite affaire :

- Dans la boucle principale de fetch_array : on récupère tous les instructeurs sans jointure avec la table instr_de_cours pour éviter la "dégénérescence".
- Pour un instructeur donné : On effectue ensuite un comptage NBCOURS de tous les cours associés à cet instructeur en précisant dans le WHERE du SELECT le id_cours avec la valeur choisie par l'utilisateur.
- Si NBCOURS = 1 ==> surbrillance.
- Non-surbrillance sinon dans tous les cas.
- Enfin, on affiche l'entrée unique.

Note : redéfinir ton tableau $val ainsi - il comporte maintenant seulement 2 entrées:

| id_instr | instructeur |

voili...et ca ne peut que marcher à présent (:>)... enfin l'idée est là je crois et c'est propre.
A+.
Jojo.
__________________________________________________________________________________________________

$_POST['selecMajCourstest']=trim($_POST['selecMajCourstest']­­­);
if(empty($_POST['selecMajCourstest'])) {
die("Erreur : aucun cours n'a été sélectionné. Si le problème persiste, veuillez contacter l'administrateur.");
} else {
$id_cours=$_POST['selecMajCourstest'];
}

<select name="selecMajInstr[]" multiple="true" size="4">
<?php
$sqlInstrSQL = " SELECT DISTINTROW `instructeurs`.* "
. " FROM `instructeurs` "
. " ORDER BY `instructeurs`.`instructeur` ASC ";

$resultInstrFetch = mysql_query($sqlInstrSQL) or die('Erreur SQL : table Instructeur - procédure query : code erreur : <br>'.mysql_error());

while ($val = mysql_fetch_array($resultInstrFetch) or die('Erreur SQL : table Instructeur - procédure fetch : code erreur : <br>'.mysql_error()))
{

$instructeur=$val['instructeur'];

$id_instr=$val['id_instr'];

$sqlCoursSQL = " SELECT COUNT(*) "
. " FROM `instr_de_cours` "
. " WHERE `instr_de_cours`.`id_de_instr` = $id_instr "
. " AND `instr_de_cours`.`id_de_cours` = $id_cours ";

$resultCoursCount = mysql_query($sqlCoursSQL) or die('Erreur SQL : table instr_de_cours - procédure query : code erreur : <br>'.mysql_error());
$nbCours = mysql_fetch_assoc($resultCoursCount) or die('Erreur SQL : table instr_de_cours - procédure fetch : code erreur : <br>'.mysql_error());

$selected = "";
if ($nbCours == 1)
{
$selected="selected";
}

==> affichage del l'enregistrement
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>";

}
?>
</select>
0
Problème d'édition du POST (tronqué) :

Je te remet le code :

$_POST['selecMajCourstest']=trim($_POST['selecMajCourstest']­­­);
if(empty($_POST['selecMajCourstest'])) {
die("Erreur : aucun cours n'a été sélectionné.
Si le problème persiste, veuillez contacter l'administrateur.");
} else {
$id_cours=$_POST['selecMajCourstest'];
}

<select name="selecMajInstr[]" multiple="true" size="4">
<?php
$sqlInstrSQL = " SELECT DISTINTROW `instructeurs`.* "
. " FROM `instructeurs` "
. " ORDER BY `instructeurs`.`instructeur` ASC ";

$resultInstrFetch = mysql_query($sqlInstrSQL)
or die('Erreur SQL : table Instructeur - procédure query : code erreur : <br>'.mysql_error());

while ($val = mysql_fetch_array($resultInstrFetch)
or die('Erreur SQL : table Instructeur - procédure fetch : code erreur : <br>'.mysql_error()))
{

$instructeur=$val['instructeur'];

$id_instr=$val['id_instr'];

$sqlCoursSQL = " SELECT COUNT(*) "
. " FROM `instr_de_cours` "
. " WHERE `instr_de_cours`.`id_de_instr` = $id_instr "
. " AND `instr_de_cours`.`id_de_cours` = $id_cours ";

$resultCoursCount = mysql_query($sqlCoursSQL)
or die('Erreur SQL : table instr_de_cours - procédure query : code erreur : <br>'.mysql_error());
$nbCours = mysql_fetch_assoc($resultCoursCount)
or die('Erreur SQL : table instr_de_cours - procédure fetch : code erreur : <br>'.mysql_error());


$selected = "";
if ($nbCours == 1)
{
$selected="selected";
}

==> affichage del l'enregistrement
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur."</option>";

}
?>
</select>
0
Salut, merci de ne m'avoir pas abandonnée. J'ai supprimé le distinctrow, pour que les noms s'affichent dans le select. Hélas rien ne se met en surbrillance. Je vais essayer quelques tests pour dans l'espoir de voir ce qui ne passe pas, et me documenter un peu sur les select count (il y a peut-être des variantes?).
0
Re,

- Ok pour le DISTINCTROW - erreur de ma part car ce n'est pas nécessaire puisque
les entrées sont uniques déjà sur la PK id_instr de la table Instructeurs.

Vérifie les point suivant :

1- Le tableau $val est-il bien structuré en deux champs (id_instr, instructeur) avec les bonnes tailles et les bons formats pour le 'mapping' du fetch --> tableau ?.

______________________________________________________________________________________________

Notes :

le COUNT(*) est OK - cherche pas au niveau des variantes - je connais bien cet ordre.
Le COUNT(*) doit normalement ramener 0 ou 1 et c'est tout.

Cas ou il ramène 0 :

- Si pas d'entrée dans la table instr_de_cours pour l'instructeur de la table instructeur (instructeur sans cours).
- Si pas d'entrée dans la table instr_de_cours pour le id_cours choisi par l'utilisateur.

Cas ou il ramène 1 :

- Si l'instructeur existe dans cette table et qu'il a un id_cours de type choisi par l'utilisateur.
______________________________________________________________________________________________

Enfin....

2- vérifie bien que tu n'a pas d'incohérences fonctionnelles dans cette table
(par exemple : plusieurs id_cours de même valeur pour un même instructeur
mais je crois pas si tu a bien conçue ta PK sur cette table
avec PK sur le doublet ( id_de_instr - id_de_cours)).

3- $nbCours doit être un INT - OBLIGATOIREMENT car le COUNT(*) ramène un entier - merci de le vérifier.

A ce sujet : j'ai une question : ou déclares toutes tes variables ??..

Ok - j'attends ta réponse - ca devrait marcher quand même !!??....

Jojo.
0
Renvoi à cause tronquage....

Re,

- Ok pour le DISTINCTROW - erreur de ma part car ce n'est pas nécessaire puisque
les entrées sont uniques déjà sur la PK id_instr de la table Instructeurs.

Vérifie les point suivant :

1- Le tableau $val est-il bien structuré en deux champs (id_instr, instructeur)
avec les bonnes tailles et les bons formats pour le 'mapping' du fetch --> tableau ?.

______________________________________________________________________________________________

Notes :

le COUNT(*) est OK - cherche pas au niveau des variantes - je connais bien cet ordre.
Le COUNT(*) doit normalement ramener 0 ou 1 et c'est tout.

Cas ou il ramène 0 :

- Si pas d'entrée dans la table instr_de_cours pour l'instructeur
de la table instructeur (instructeur sans cours).
- Si pas d'entrée dans la table instr_de_cours pour le id_cours choisi par l'utilisateur.

Cas ou il ramène 1 :

- Si l'instructeur existe dans cette table et qu'il a un id_cours de type choisi par l'utilisateur.
______________________________________________________________________________________________

Enfin....

2- vérifie bien que tu n'a pas d'incohérences fonctionnelles dans cette table
(par exemple : plusieurs id_cours de même valeur pour un même instructeur
mais je crois pas si tu a bien conçue ta PK sur cette table
avec PK sur le doublet ( id_de_instr - id_de_cours)).

3- $nbCours doit être un INT - OBLIGATOIREMENT car le COUNT(*) ramène un entier
- merci de le vérifier.

A ce sujet : j'ai une question : ou déclares toutes tes variables ??..

Ok - j'attends ta réponse - ca devrait marcher quand même !!....

Jojo.
0
Oui,oui je suis là, voilà quelques réponses :

Table instructeurs =>
id_instr : type INT(11), non null, auto-increment, INDEX, aucune cardinalité
instructeur : type varchar(50), non null

Table instr_de_cours =>
id_de_cours : type INT(11), non null,I NDEX, cardinalité 3
id_de_instr : type INT(11), cardinalité 3

Table courstest =>
id_cours : type INT(11), non null, auto-increment, PRIMARY, cardinalité 3
et d'autres champs de type date et varchar...
-----------------------------------

J'ai inversé le selected (renseigné au départ et vide si la condition est remplie), et tous les noms étaient en surbrillance :

$selected = "selected";
if ($nbCours == 1)
{
$selected="";
}
-------------------------------------------

J'ai essayé mis $nbCours dans le echo, et cela affiche "Array" :
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur.$nbCours"</option>";
_________________

Pour la déclaration des variables, je croyais qu'on ne le fait que si une variable est réutilisée d'une fonction à l'autre...
0
UP !

Moiselle - êtes vous là ?..
0
Message pas passé, je renvoie :

Oui,oui je suis là, voilà quelques réponses :

Table instructeurs =>
id_instr : type INT(11), non null, auto-increment, INDEX, aucune cardinalité
instructeur : type varchar(50), non null

Table instr_de_cours =>
id_de_cours : type INT(11), non null,I NDEX, cardinalité 3
id_de_instr : type INT(11), cardinalité 3

Table courstest =>
id_cours : type INT(11), non null, auto-increment, PRIMARY, cardinalité 3
et d'autres champs de type date et varchar...
-----------------------------------

J'ai inversé le selected (renseigné au départ et vide si la condition est remplie), et tous les noms étaient en surbrillance :

$selected = "selected";
if ($nbCours == 1)
{
$selected="";
}
-------------------------------------------

J'ai essayé mis $nbCours dans le echo, et cela affiche "Array" :
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur.$nbCours"</option>";
_________________

Pour la déclaration des variables, je croyais qu'on ne le fait que si une variable est réutilisée d'une fonction à l'autre...
0
Pour tester la valeur de nbCours j'ai fait comme ça :

$resultat=print_r($nbCours);
echo "<OPTION ".$selected." VALUE=".$id_instr.">".$instructeur.$resultat."</option>";

et le select affiche 1 à côté de mes 6 instructeurs.
0
Renvoi parce que on va pas y arriver ce soir (:>)

Re,

- Ok pour le DISTINCTROW - erreur de ma part car ce n'est pas nécessaire puisque
les entrées sont uniques déjà sur la PK id_instr de la table Instructeurs.

Vérifie les point suivant :

1- Le tableau $val est-il bien structuré en deux champs (id_instr, instructeur)
avec les bonnes tailles et les bons formats pour le 'mapping' du fetch --> tableau ?.

OUI/NON ??
______________________________________________________________________________________________

Notes :

le COUNT(*) est OK - cherche pas au niveau des variantes - je connais bien cet ordre.
Le COUNT(*) doit normalement ramener 0 ou 1 et c'est tout.

Cas ou il ramène 0 :

- Si pas d'entrée dans la table instr_de_cours pour l'instructeur
de la table instructeur (instructeur sans cours).
- Si pas d'entrée dans la table instr_de_cours pour le id_cours choisi par l'utilisateur.

Cas ou il ramène 1 :

- Si l'instructeur existe dans cette table et qu'il a un id_cours de type choisi par l'utilisateur.
______________________________________________________________________________________________

Enfin....

2- vérifie bien que tu n'a pas d'incohérences fonctionnelles dans cette table
(par exemple : plusieurs id_cours de même valeur pour un même instructeur
mais je crois pas si tu a bien conçue ta PK sur cette table
avec PK sur le doublet ( id_de_instr - id_de_cours)).

==> incohérences fonctionnelles = cohérence des données de la table (et pas sa structure - m'en fous !!)
==> en clair, fais une visu. sur toute les données de ta table et regarde sit tous les enreg. sont OK.

OK/KO ??

3- $nbCours doit être un INT - OBLIGATOIREMENT car le COUNT(*) ramène un entier
- merci de le vérifier.

OUI/NON ??

_____________________________________________________________________________________________

Donc stp : peux répondre aux 3 question posée pour le moment.

Jojo.
0
1. Pas sûre de bien comprendre, mais id_instr dans mysql est bien définit comme Integer et $id_instr affiche bien des entiers dans le select; iinstructeur dans mysql est bien définit comme varchar et $iinstructeur affiche bien des caractères dans le select.

2. Vérifié et pas trouvé d'incohérences fonctionnelles dans les tables.

3. $NbCours affiche 1.

Merci pour ta patience.
0
Re,

"1. Pas sûre de bien comprendre, mais id_instr dans mysql est bien définit comme Integer et $id_instr affiche bien des entiers dans le select; iinstructeur dans mysql est bien définit comme varchar et $iinstructeur affiche bien des caractères dans le select."

--> donne moi juste la structure de $val stp telle que tu l'a défini dans ton code.

"3. $NbCours affiche 1. "

--> pour quels enregistrements de la table enregistrements ?... tous??.
___________________________________________________________________________________________
"Ouais mec - après ma mort avant de r'joindre l'Ancien chuis allé faire un chtit tour
au "Troquet des blaireaux"... c'est sale et le service est déplorable - ca fait pitié
- chuis r'monté vite fait :> (Jésus Christ)"
0
re-réponse .

1. Je n'ai que ça :

while ($val = mysql_fetch_array($resultInstrFetch)
or die('Erreur SQL : table Instructeur - procédure fetch : code erreur : <br>'.mysql_error()))
{

$instructeur=$val['instructeur'];
$id_instr=$val['id_instr'];

2. Oui, 1 pour tous
0