Problème dans ma boucle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème dans ma boucle

par albat » 13 févr. 2009, 15:41

Lorsque tu avais posté ton premier message, tu étais connecté en tant qu'invité.
Tu ne peux donc le marquer [Résolu]. ;)

par Bisevac » 13 févr. 2009, 15:33

Désolé d'avoir oublié de mettre le [Resolu], prochaine je tacherais de le mettre, pareil j'ai oublié que l'on été déconnecté au bout de x minutes d'inactivité c'est pour celà que mon dernier message été posté en tant qu'invité :wink:

par albat » 13 févr. 2009, 15:26

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

par Bisevac » 13 févr. 2009, 15:07

Merci ça fonctionne niquel ! :wink:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Albat90 » 13 févr. 2009, 12:40

Ok, merci pour ceci :)

Donc, si nous récapitulons, tu veux faire une liaison entre ton entité PERSONNE et CONTRATS_PERSONNES. Ensuite, tu veux afficher dans un tableau
| Nom | Prenom | Jours restant |
| Jean | Pierres | 52 |

Cependant, dans ton entité CONTRATS_PERSONNES, tu ne possède pas l'information jour_restant. Par contre tu possède Nbrejours et jours_utilises.

Donc je pense que ton code devrait ressembler à ceci :
$personne_sql = "SELECT P.Num_perso, Nom, Prenom, (Nbrejours - Jours_Utilises) as Nbrestant
FROM PERSONNE P, CONTRATS_PERSONNES C
WHERE P.Num_perso = C.Num_perso
AND Archive = 0
ORDER BY Nom ASC";
$personne_query = mysql_query($personne_sql) or die (mysql_error());

echo '<table>
                <tr>
                    <td>Nom</td>
                    <td>Prenom</td>
                    <td>Jour restant</td>
                </tr>';
While($personne = mysql_fetch_array($personne_query)){
echo '<tr>
            <td>'.$personne['Nom'].'</td>
            <td>'.$personne['Prenom'].'</td>
            <td>'.$personne['Nbrestant'].'</td>
        </tr>';
}
echo '</table>';
Voila, cependant fais attention, il semblerait qu'il y a des redondance d'information dans ta base :)

Tiens nous au courant :)

Albat90 ;)

par Bisevac » 13 févr. 2009, 12:19

Voilà mon MLD

PERSONNE (Num_perso, Nom, Prenom, Datenaiss, Service, Archives)
CONTRATS (Numcontrat, Typecontrat)
CONTRATS_PERSONNES (Numcontrat_perso, Date_debutcontr, Date_fincontr, Affichage, Jours_utilises Nbrejours, #Num_perso, #Numcontrat)
TYPE_CONGES (Numtype_conges, Typeconges)
CONGES (Numconges, Date_debut, Date_fin, Heure, Numuti, Poste, Date_enr, journee, #Num_perso, #Numtype_conges)
SERVICE (Numservice, Typeservice, #Num_perso)

par Albat90 » 13 févr. 2009, 12:12

Tu peux mettre le modèle relationnel de ta base?
En gros, peux tu nous indiquer la structure de ta base :

personne (num_pers, nom_pers, prenom_pers, ... , clé_etrangère#)
contrats_personnes(clé_primaire, champ1, champ2, ..., clé_etragère#)

Je pense qu'on pourra t'aider d'avantage si l'on connais la structure de ta table :)

Albat90 ;)

par Bisevac » 13 févr. 2009, 11:57

j'ai essayer de modifier array en assoc et ça ne change rien, en fait je ne saisis pas trop la différence entre les deux !

Ensuite j'ai essayé avec ta requête

Code : Tout sélectionner

$resultat = mysql_query("SELECT * FROM personne, contrats_personnes where personne.Num_perso=contrats_personnes.Num_perso AND archives=0 ORDER BY NOM");
Il ne me mets que 2 salariés sur les 4, ensuite dans la colonne jours restant, il me prends en compte que

Code : Tout sélectionner

$renvoi['Jours_total']
il a l'air de zappé la soustraction, en plus il ne s'agit pas des bons 'jours totals', ceux sont des 2 autres salariés.

par Albat90 » 13 févr. 2009, 11:43

Bonjour Bisevac,

Je ne comprend pas trop ta boucle,
Enfin, je ne comprend pas pourquoi tu fais ça :shock:

Pourquoi tu ne passe pas directement par un fetch_array?
while($renvoi = mysql_fetch_array($resultat))  
{
$rest=$renvoi['Jours_total']-$renvoi['Jours_utilises'];
}
Car tu fais ton query, jusque là c'est bon. Je n'ai jamais fais le test en utilisant ta méthode mais je me demande si avec 2 fetch d'un coup (même si un est array et l'autre assoc), le curseur avance peut être de deux occurences?

Ensuite j'ai remarqué dans ton code que tu utilise l'index de ton assoc comme identifiant pour tes salariés, n'as-tu pas de clé primaire dans ta table? Car ton assoc se base sur une requète qui tri par nom ASC. Donc tout sera changé si un nouveau employé est inséré au milieu ou alors si un employé est supprimé non?

J'espère pouvoir t'aider :)

PS : Je viens de regarder encore une fois ton message et quand je regarde ta requète, tu l'effectue sur 2 entités, mais tu ne fais aucun liaison entre les deux?

Code : Tout sélectionner

$resultat = mysql_query("SELECT * FROM personne, contrats_personnes where archives=0 ORDER BY NOM");
Du genre :

Code : Tout sélectionner

$resultat = mysql_query("SELECT * FROM personne, contrats_personnes WHERE personne.num_emp = contrats_personnes.num_emp AND archives=0 ORDER BY NOM");
Je pense qu'une grande partie de ton erreur peut venir de là :)

Albat90 ;)

Problème dans ma boucle

par Bisevac » 13 févr. 2009, 10:57

Bonjour,

J'ai un problème d'affichage dans mon tableau dû certainement à ma boucle, en effet dans celui-ci Dans ma première, ceux sont les salariés et dans une autre colonne colonne nombre de jours restant.

Quand je n'avais pas encore rentré de code pour inséré mes nombres de jours restants tout s'afficher normalement. Mais depuis, mes salariés sont afficher 2 fois chacun, et dans ma colonne jours restant, il ne me mets pour la 1ère ligne, le nombre jour restant en tête dans ma bdd, et dans ma 2nd ligne, le nombre de jours restant en seconde position et ceux pour chacun de mes salariés. Je pense que j'ai certainement une erreur dans ma boucle, mais je n'arrive pas à le voir.

Voici ma requête :

Code : Tout sélectionner

$resultat = mysql_query("SELECT * FROM personne, contrats_personnes where archives=0 ORDER BY NOM");
Ma boucle :

Code : Tout sélectionner

while($boucle = mysql_fetch_assoc($resultat)) { $renvoi=mysql_fetch_array($resultat); $rest=$renvoi['Jours_total']-$renvoi['Jours_utilises'];

Code : Tout sélectionner

?> <p> <tr> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"><b><center><?php echo $boucle["Nom"]; ?></center></font></div></td> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"><b><center><?php echo $boucle["Prenom"]; ?></center></font></div></td> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"><b><center><?php echo $boucle["Service"]; ?></center></font></div></td> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"><b><center><?php echo $rest;?></center></font></div></td> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"width="5%"><b><center><a href="fiche/fiche.php?index=<?php echo $boucle['Num_perso'];?>" title="Fiche"><center><img src="image/fiche.png" border=0></center></a></font></div></td> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"width="5%"><b><center><a href="modifier/modifier.php?index=<?php echo $boucle['Num_perso'];?>" title="Modifier"><center><img src="image/update.png" border=0></center></a></font></div></td> <td bgcolor="<?php echo($couleur); ?>" width="5%"><div id="font"><font color="<?php echo($couleur2); ?>"width="5%"><b><center><a href="archiver/insertarchives.php?index=<?php echo $boucle['Num_perso'] ;?>" onclick="return(confirm('Voulez-vous vraiment archiver cette personne ?'));" title="Archiver"><center><img src="image/archiver.png" border=0></center></a></font></div></td> <tr> <?php } ?>
Merci d'avance pour votre aide. :wink: