Aller au contenu

Login et mot de passe


Lea

Sujets conseillés

Bonjour,

Tout d'abord, je voulais remercier tous les hubmaster pour leur aide très précieuse et leur rapidité à répondre. Si ce forum n'existait pas, je me demande comment je ferais, moi qui débute en programmation....

Alors voilà, j'ai un problème (et oui, encore un!) avec une requête qui permet d'afficher des infos correspondant à une personne identifiée via un login et un mot de passe, voilà la requête :

SELECT mission.ID, mission.date_envoi, mission.theme, mission.besoin, mission.commentaires, mission.budget, mission.resultat, mission.suivi, mission.commentaires_suivi, mission.date_realisation, mission.infos_complement, mission.realise_par, mission.login, mission.pass FROM mission WHERE mission.login = '$clientlogin' AND mission.pass = '$clientpass'

puis dans ma page :

  <?php do { ?>
               <tr bordercolor="#FFFFFF" bgcolor="#FFFFFF">
                   <td width="99"><p><?php echo $rsdate; ?></p></td>
                   <td width="140"><p align="center"><?php echo $themet; ?></p></td>
                   <td width="41"><p align="center"><a href="detail_mission.php">1</a></p></td>
                   <td width="65"><p align="center"><?php echo $rsbudget; ?> €</p></td>
                   <td width="61"><p align="center"><a href="entrer-resultat.php">2</a></p></td>
                   <td width="86"><p align="center"><?php echo $rssuivi; ?></p></td>
               </tr>
               <tr valign="top">
                   <td height="2" colspan="6"> </td>
               </tr>
               <?php } while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique)); ?>

Au lieu d'afficher toutes les entrées de la base (il y en a 2) correspondant aux bons login et pass, j'ai juste 1 entrée répétée 2 fois...

Comprends pas d'où vient le problème....

Si quelqu'un a une idée, je le remercie par avance...

Léa

Lien vers le commentaire
Partager sur d’autres sites

Et comme ca :

<?php 
while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique))
{
Echo "<tr bordercolor='#FFFFFF' bgcolor='#FFFFFF'>
                  <td width='99'><p>$row_rsHistorique[1]</p></td>
                  <td width='140'><p align='center'>$row_rsHistorique[2]</p></td>
                  <td width='41'><p align='center'><a href='detail_mission.php'>1</a></p></td>
                  <td width='65'><p align='center'>$row_rsHistorique[5] €</p></td>
                  <td width='61'><p align='center'><a href='entrer-resultat.php'>2</a></p></td>
                  <td width='86'><p align='center'>$row_rsHistorique[7]</p></td>
              </tr>
              <tr valign='top'>
                  <td height='2' colspan='6'> </td>
              </tr>";
}
?>

Ca marche ??

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, la boucle :

do{

...

}while ()

n'est pas adaptée à la fonction mysql_fetch_array.

Préfères lui la forme contraire, sans le 'do' :

while(){

}

La différence entre les 2 est que pour la première, la boucle se fera au moins une fois, même si la condition du while est évaluée en faux, alors que dans la seconde, la boucle pourrait ne pas se faire.

Ensuite :

Dans le code que tu donnes, il n'y a pas de liens entre la variable affectée à la fonction mysql_fetch_array ($row_rsHistorique), et les variables dont tu te sers dans ton code ($rsdate,$rsbudget,..). Donc, le programme ne peut les deviner.

Dans le code donnée par Dams, il y a un lien : On affecte à $row_rsHistorique la valeur du tableau retourné par mysql_fetch_array. Donc, pour chaque ligne de ta base de données, tu auras de nouvelles valeur pour ton $row_rsHistorique. $row_rsHistorique sera toujours un 'Array', les 'clés' du tableau seront les champs retournés par la requète (mission.ID, mission.date_envoi, mission.theme, mission.besoin, ...), sans le nom des tables (soit : ID, date_envoi, theme, besoin, ...), et les valeurs seront respectivement, (pour chaque boucle while), la valeur retournée par mysql_fetch_array (je me répète, non?).

Voilà. Sinon, tu as accès à ces champs à partir des index (comme l'exemple donné par Dams ($row_rsHistorique[0],$row_rsHistorique[1],..) soit à partir des clés ($row_rsHistorique['ID'],$row_rsHistorique['date_envoi'],..)

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Non, ça ne marche toujours pas même en mettant le while au début, pourtant j'ai bien défini mes variables comme ça :

$rsdate = $row_rsHistorique['date_realisation'];
$rsbudget = $row_rsHistorique['budget'];
$rssuivi = $row_rsHistorique['suivi'];
$rstheme = $row_rsHistorique['theme'];

La requête me renvoie x fois la même ligne :?:

Lien vers le commentaire
Partager sur d’autres sites

Je pense que le problème vient de l'écriture de l'affectation des variables :

exemple :

$rsdate = $row_rsHistorique['date_realisation'];

car si j'écris

<? echo $row_rsHistorique['date_realisation']; ?>

au lieu de

<? echo $rsdate; ?>

, ça marche....

Quelque chose m'échappe :wacko:

Modifié par Lea
Lien vers le commentaire
Partager sur d’autres sites

Si la requète te renvoie X fois la même ligne, c'est parce qu'elle est X fois dans la base de données.

Si cela ne te dérange pas, et que tu veux tout de même ne l'affiche qu'une seule fois, il y a deux solutions :

- Tu enlèves le while (en laissant le mysql_fetch_array). Dans ce cas, tu auras la première ligne retournée par la fonction mysql_fetch_array, autrement dit, la première ligne retournée par la base (qui en retournera plusieurs tout de même).

- Tu demandes à Mysql de limiter le nombre de résultats en placant, à la fin de ta requète la clause LIMIT :

LIMIT 0,1 signifie "On se limite à un enregistrement à partir de l'enregistrement zéro (donc au début)".

Ta requète donnerait alors :

SELECT mission.ID, mission.date_envoi, mission.theme, mission.besoin, mission.commentaires, mission.budget, mission.resultat, mission.suivi, mission.commentaires_suivi, mission.date_realisation, mission.infos_complement, mission.realise_par, mission.login, mission.pass FROM mission WHERE mission.login = '$clientlogin' AND mission.pass = '$clientpass' LIMIT 0,1

Voilà. Je rappelle : Si la base retourne plusieurs résultats, c'est qu'il y a plusieurs enregistrement.

Anonymus.

_AT_Dams : ;)

Lien vers le commentaire
Partager sur d’autres sites

1/ Tu peux remettre la requète que tu emploies ?

2/ Tu peux remettre le code que tu utilises ?

3/ Tu peux nous mettre le schéma de la table 'mission' ?

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Si tu utilises mysql_fetch_assoc() au lieu de mysql_fetch_array(), il faut utiliser les noms des variables et non leur numéro d'ordre ;)

De plus, un "HERE_DOCUMENT" (utilisation de print <<< LABEL) permet de se libérer des contraintes de formatage du code (quotes/doubles quotes)... attention à bien mettre l'étuquette de fin "LABEL;" en tout début de ligne !

<?php 
if (mysql_num_rows($rsHistorique) != 0) {
  print "<table>";
  while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique))
  {
     print <<< HERE
        <tr bordercolor='#FFFFFF' bgcolor='#FFFFFF'>
        <td width='99'><p>$row_rsHistorique["date_envoi"]</p></td>
        <td width='140'><p align='center'>$row_rsHistorique["theme"]</p></td>
        <td width='41'><p align='center'><a href='detail_mission.php'>1</a></p></td>
        <td width='65'><p align='center'>$row_rsHistorique["budget"] €</p></td>
        <td width='61'><p align='center'><a href='entrer-resultat.php'>2</a></p></td>
        <td width='86'><p align='center'>$row_rsHistorique["suivi"]</p></td>
        </tr>
        <tr valign='top'>
        <td height='2' colspan='6'> </td>
        </tr>
HERE;
  }
  print "</table>";
}
?>

Si cela ne fonctionne toujours pas, donnes-nous le résultat de ce code:

while ($row_rsHistorique = mysql_fetch_assoc($rsHistorique))
  print_r($row_rsHistorique);

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...