CHECKBOX à cocher suivant une boucle

Résolu
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005 - 10 août 2005 à 16:27
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 - 11 août 2005 à 17:26
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

arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 17:17
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>';
}
3
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
10 août 2005 à 16:44
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...
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 16:57
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 !!!
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
10 août 2005 à 17:14
si tu ne mets pas le else {....}, que ce passe-t-il ?
0

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

Posez votre question
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
10 août 2005 à 17:23
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 ???
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
10 août 2005 à 17:32
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);
}
}
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 08:40
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
)
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 10:07
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...
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 10:18
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 ?
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 10:44
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...
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 10:45
Si ça ne te semble pas plus simple, on peut continuer à chercher une solution avec 2 requêtes...
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 11:02
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>';
}
}
}
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 11:30
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>';
}
}
}
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 11:32
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.
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 11:44
ca coche uniquement le premier...
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 11:49
rrr
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 11:49
ca ne coche rien pardon !!!
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 11:56
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 (;
0
paulinett Messages postés 51 Date d'inscription lundi 1 août 2005 Statut Membre Dernière intervention 17 octobre 2005
11 août 2005 à 11:58
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 (;
0
arnal69130 Messages postés 445 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 22 mars 2007 2
11 août 2005 à 14:59
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"';
}
0
Rejoignez-nous