CHECKBOX à cocher suivant une boucle

[Résolu]
Signaler
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005
-
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
-
Bonjour,

j'ai déja posté à propos de ce code mais la, le problème est autre.
je voudrais faire un check dans les checkbox suivant une boucle.

j'ai une liste d'employés qui travaillent sur une machine et je souhaite modifier cette liste. pour cela, une page s'ouvre avec la liste de tous les employés de l'établissement et des checkbox en face.
je veux cocher les employés qui sont dejà associés à la machine en question.

aucun message d'erreur n'apparait mais le check n'apparait que sur le premier des employés d'une machine.

merci d'avance

voici mon code,

Tous les employes disponibles

Les employes de votre machine <?php echo $nom_machine ; ?> sont cochés


<?php
// Appel le fichier connect.php
require_once("Connect.php");

// Connexion au serveur et accès à la base
$connexion = mysql_pconnect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE, $connexion);

// Ecriture de la 1ere Requete pour sélectionner tous les fournisseurs
$employes_tous=mysql_query("SELECT * FROM Employe",$connexion);

//Ecriture de la 2ème Requete pour sélectionner tous les fournisseurs de la machine
$employes_machine=mysql_query("SELECT Employe.id_employe FROM Employe, EmployeMachine, Machine WHERE Machine.nom_machine LIKE '%$nom_machine%' AND Machine.nom_machine=EmployeMachine.nom_machine AND EmployeMachine.id_employe=Employe.id_employe",$connexion);


echo "<CENTER>\"
//.\"<CAPTION ALIGN=bottom>Table Données Principales </CAPTION>\"
.\"----
ID |NomPrénom |FonctionTéléphone |Email<TH>Check\n\";

while($machines_employes =mysql_fetch_object($employes_machines))
{
while ($tous_employes=mysql_fetch_object($employes_tous))
{
if ($tous_employes->id_employe == $machine_employes->id_employe)
{
echo '----
'.$tous_employes->id_employe.', '
.$tous_employes->nom_employe.', '
.$tous_employes->prenom_employe.', '
.$tous_employes->fonction_employe.', '
.$tous_employes->tel_employe.', '
.$tous_employes->email_employe.', '
.'id_employe.'" CHECKED>, ';
}
else
{
echo '----
'.$tous_employes->id_employe.', '
.$tous_employes->nom_employe.', '
.$tous_employes->prenom_employe.', '
.$tous_employes->fonction_employe.', '
.$tous_employes->tel_employe.', '
.$tous_employes->email_employe.', '
.'id_employe.'">, ';
}
}
}
echo "
</CENTER>\n";
?>

33 réponses

Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
c bizarre, ce doit être une faute de frappe probablement...

Enfin essaie ça si tu préfère...

$tabEmployesMachine=array();
$employes_machine=mysql_query("SELECT EmployeMachine.nom_machine, EmployeMachine.id_employe FROM EmployeMachine WHERE EmployeMachine.nom_machine LIKE '%$nom_machine%'",$connexion);
while ($ligne = mysql_fetch_array($employes_machine, MYSQL_NUM)) {
array_push($tabEmployesMachine,$$ligne[1]);
}
$employes_tous=mysql_query("SELECT * FROM Employe",$connexion);
while ($tous_employes=mysql_fetch_object($employes_tous)) {
$check='';
if (in_array($tous_employes->id_employe,$tabEmployesMachine)) {
$check=' checked="checked"';
}
echo '<TR><TD>'.$tous_employes->id_employe.'</TD>
<TD>'.$tous_employes->nom_employe.'</TD>
<TD>'.$tous_employes->prenom_employe.'</TD>
<TD>'.$tous_employes->fonction_employe.'</TD>
<TD>'.$tous_employes->tel_employe.'</TD>
<TD>'.$tous_employes->email_employe.'</TD>
<TD>id_employe.'"'.$check.' /></TD></TR>';
}
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Pourtant ça doit être àa peu près ça...
Au passage, auu lieu de , écrit plutôt , mais le pb ne vient pas de là.
Je pense que ça vient plutôt de ta boucle ou de ton if...
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

ben oui en fait je ne pense pas en etre loin mais je ne sais pas pourquoi, quand il y a plusieurs employes sur une machine, il ne coche pas le deuxième. j'ai tourné le truc et je ne vois pas... ca m'embete !!!
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
si tu ne mets pas le else {....}, que ce passe-t-il ?
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

la meme chose sauf qu'il manque tous les autres employes...
il n'y a donc que le premier employe de cocher à cahque fois ... le problème vient donc de l'intérieur du if ???
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Je pense qu'il doit être possible de ne faire qu'une seule requête.
Sinon, peuessaie simplement d'afficher le résultat de tes requêtes :
echo '';
while($machines_employes=mysql_fetch_object($employes_machines)) {
print_r($machines_employes);
while ($tous_employes=mysql_fetch_object($employes_tous)) {
print_r($tous_employes);
}
}
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

Bonjour,

faire une seule requete : honnetement, je calle !

j'ai affiché le résultat comme tu me l'as conseillé... et voila le résultat. le deuxième employé se retrouve à la fin... c'est pour cela qu'il ne doit pas etre pris en compte...
mais je ne sais pas non plus comment faire la...

merci de m'aider...

voila le résultat des print_r

stdClass Object
(
[id_employe] => 1
)
stdClass Object
(
[id_employe] => 1
[nom_employe] => Blouin
[prenom_employe] => Gérard
[fonction_employe] => gestionnaire
[tel_employe] => 02.33.79.44.15
[email_employe] => gblouin@ch-sthilaire-harcouet.
)
stdClass Object
(
[id_employe] => 2
[nom_employe] => Sauvaget
[prenom_employe] => Frédéric
[fonction_employe] => gestionnaire
[tel_employe] => 02.33.79.44.16
[email_employe] => fsauvaget@ch-sthilaire-harcoue
)
stdClass Object
(
[id_employe] => 3
[nom_employe] => Vauttier
[prenom_employe] => David
[fonction_employe] => informaticien
[tel_employe] => 02.33.79.44.01
[email_employe] => mvauttier@ch-sthilaire-harcoue
)
stdClass Object
(
[id_employe] => 4
[nom_employe] => Challois
[prenom_employe] => Micheline
[fonction_employe] => responsable RH
[tel_employe] => 02.33.79.44.10
[email_employe] => mchallois@ch-sthilaire-harcoue
)
stdClass Object
(
[id_employe] => 2
)
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Je ne suis pas sur, mais peut-être qu'un GROUP BY te permettrai de ne faire qu'une requête :

SELECT Employe.id_employe, Employe.nom_employe, Employe.prenom_employe, Employe.fonction_employe, Employe.tel_employe, Employe.email_employe, Machine.nom_machine
FROM Employe, EmployeMachine, Machine
WHERE Machine.nom_machine LIKE '%$nom_machine%'
AND Machine.nom_machine=EmployeMachine.nom_machine
- AND EmployeMachine.id_employe=Employe.id_employe - Peut-être faut-il enlever cette condition, puisque tu la testes ensuite avec le if...
GROUP BY Machine.nom_machine

Enfin, il faut essayer...
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

si j'enlève la condition EmployeMachine.id_employe=Employe.id_employe, la case cochée est toujours la première ! donc ca ne va pas...

le group by ne fonctionne pas mieux... mais je ne comprends pas pourquoi une seule requete. qu'est-ce que tu veux faire exactement avec cette requete unique ?
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Logiquement, avec une seule requête sur les 3 tables en même temps
(1 jointure entre Machine et EmployeMachine, et un pdt cartésien entre EmployeMachine et Employe),
tu dois pouvoir récupérer toutes les infos qui t'intéresse :

---------------
Machine 1
| Employé1
| Employé2
| Employé3
| ...
---------------
Machine 2
| Employé1
| Employé2
| Employé3
| ...
---------------
Machine 3
...

Et à chaque ligne, tu testes
if ($resRequeteEmploye->id_employe == $resRequeteMachineEmploye->id_employe)
et en fonction, tu coches (ou pas), comme tu à déjà fait...

C'est bizarre que ça ne change rien...
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Si ça ne te semble pas plus simple, on peut continuer à chercher une solution avec 2 requêtes...
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

ben en fait, j'ai deux requetes qui fonctionnent bien (je les ai testé avec MySQL et ma base):
-l'une qui correspond à ton $resRequeteMachineEmploye
-l'autre à ton $resRequeteEmploye
et je compare les deux... je trouve que cela revient au même mais je peux me tromper... ???

je trouve ca simple de comparer les deux résultats de requêtes et je pense que nos idées se rejoignent. (ton if est bien à l'intérieur de boucle, je me trompe ?)

essayons de chercher avec deux requetes, je suis plus à l'aise. en fait je ne vois pas du tout comment faire autrement.

// Ecriture de la 1ere Requete pour sélectionner tous les employes
$employes_tous=mysql_query("SELECT * FROM Employe",$connexion);

//Ecriture de la 2ème Requete pour sélectionner tous les employes de la machine
$employes_machine=mysql_query("SELECT Employe.id_employe FROM Employe, EmployeMachine, Machine WHERE Machine.nom_machine LIKE '%$nom_machine%' AND Machine.nom_machine=EmployeMachine.nom_machine AND EmployeMachine.id_employe=Employe.id_employe GROUP BY Machine.nom_machine",$connexion);

// traitement des infos (désolée je n'ai pas changé encore les MAJ du HTML
while($machine_employes=mysql_fetch_object($employes_machine))
{
while ($tous_employes=mysql_fetch_object($employes_tous))
{
if ($tous_employes->id_employe == $machine_employes->id_employe)
{
echo '<TR><TD>'.$tous_employes->id_employe.'</TD><TD>'
.$tous_employes->nom_employe.'</TD><TD>'
.$tous_employes->prenom_employe.'</TD><TD>'
.$tous_employes->fonction_employe.'</TD><TD>'
.$tous_employes->tel_employe.'</TD><TD>'
.$tous_employes->email_employe.'</TD><TD>'
.'id_employe.'" CHECKED></TD></TR>';
}

else if ($tous_employes->id_employe != $machine_employes->id_employe)
{
echo '<TR><TD>'.$tous_employes->id_employe.'</TD><TD>'
.$tous_employes->nom_employe.'</TD><TD>'
.$tous_employes->prenom_employe.'</TD><TD>'
.$tous_employes->fonction_employe.'</TD><TD>'
.$tous_employes->tel_employe.'</TD><TD>'
.$tous_employes->email_employe.'</TD><TD>'
.'id_employe.'"></TD></TR>';
}
}
}
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Oui, le "if" que j'avais mis, c'était celui de la boucle...

Ok, essaie ça :

// Ecriture de la 1ere Requete pour sélectionner tous les employes
$employes_tous=mysql_query("SELECT * FROM Employe",$connexion);

//Ecriture de la 2ème Requete pour sélectionner tous les employes de la machine
$employes_machine=mysql_query("SELECT EmployeMachine.id_employe FROM EmployeMachine, Machine WHERE Machine.nom_machine LIKE '%$nom_machine%' AND Machine.nom_machine=EmployeMachine.nom_machine ",$connexion);

// traitement des infos (désolée je n'ai pas changé encore les MAJ du HTML
while($machine_employes=mysql_fetch_object($employes_machine)) {
while ($tous_employes=mysql_fetch_object($employes_tous)) {
$check='';
if ($tous_employes->id_employe == $machine_employes->id_employe) {
$check=' checked="checked"';
}
echo '<TR><TD>'.$tous_employes->id_employe.'</TD>
<TD>'.$tous_employes->nom_employe.'</TD>
<TD>'.$tous_employes->prenom_employe.'</TD>
<TD>'.$tous_employes->fonction_employe.'</TD>
<TD>'.$tous_employes->tel_employe.'</TD>
<TD>'.$tous_employes->email_employe.'</TD>
<TD>id_employe.'".$check.' /></TD></TR>';
}
}
}
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
En fait, comme on met une condition pour relier EmployeMachine et Employe dans la boucle, il ne faut pas mettre de jointure dans la requête.
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

ca coche uniquement le premier...
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
rrr
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

ca ne coche rien pardon !!!
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

bon alors la je comprends plus... ca me recoche la premier avec

.'id_employe.' " '.$check.' /></TD></TR>';

j'ai mis des espaces pour qu'on voit mieux... pourtant ca m'inspirait bien (;
Messages postés
51
Date d'inscription
lundi 1 août 2005
Statut
Membre
Dernière intervention
17 octobre 2005

bon alors la je comprends plus... ca me recoche la premier avec

.'id_employe.' " '.$check.' /></TD></TR>';

j'ai mis des espaces pour qu'on voit mieux... pourtant ca m'inspirait bien (;
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
Je sais pas bien quoi te dire, on ne doit pas être loin de la solution pourtant !
Essaie peut-être ça pour débugger :

while($machine_employes=mysql_fetch_object($employes_machine)) {
echo '---
';
while ($tous_employes=mysql_fetch_object($employes_tous)) {
echo 'idEmploye : '.$tous_employes->id_employe.' - idMachineEmploye : '.$machine_employes->id_employe.'
';
$check='';
if ($tous_employes->id_employe == $machine_employes->id_employe) {
$check=' checked="checked"';
}