Consulter tuple specifique au user php/sql

Résolu
Bonjour,
je réalise mon projet en php et j'ai le cas ou un employé rempli son formulaire de demande de congé, après le chef va soit l'accepter soit la refusé donc ma question est comment faire pour que l'employé puisse voir la table des formulaireConge et voir juste ces formulaire a lui a son nom (pas le reste)
dans mon application j'ai l'authentification au début
quelqu'un peut m'aider svp c'est vraiment important
voila le code de consultation mais il m'affiche tous les enregistrements:
<?php
include("connex.inc.php");
$idcom=connex("basebank","myparam");
$requete="SELECT * FROM formulaireconge";
$result=@mysql_query($requete,$idcom);
if(!$result)
{
	echo "Lecture impossible";
}
else
{
	$nbcol=mysql_num_fields($result);
	$nbcand=mysql_num_rows($result);
	
	echo "<h5> Il y a $nbcand demande(s) de congé </h5> <br> ";
		
	echo "<table border=\"1\">";
	
	echo "<th>Matricule</th> <th>Nom</th> <th>Prénom</th> <th>Direction</th> <th>Affectation</th> <th>Service</th> <th>Adresse durant le congé</th> <th>Téléphone</th> <th>Nombre de jours demandés: Ouvrables</th> <th>Date de départ</th> <th>Date de retour</th> <th>Signature de l'employé</th> <th>E-mail</th> <th>Inputter</th> <th>Authorizer</th> <th>Observation</th> <th>Signature</th> <th>Droit au congé au 21/12/2009</th> <th>Nombre de jours accordé </th> <th>Nombre de jours ouvrables</th> <th>La Direction Administrative</th> <th>Le Vice Président</th> <th>Titre de congé établi et</th> <th>Sous référence: DA/BK/BD/N°</th>";
	while($ligne=mysql_fetch_array($result,MYSQL_NUM))
	{
    echo "<tr>";
    foreach($ligne as $valeur)
	  {
      echo "<td> $valeur </td>";
		}
		echo "</tr>";
	}
	echo "</table>";
}
?>

merci pour votre aide et bonne soirée
Configuration: Windows Vista
Firefox 3.0.10

15 réponses

Résumé de la discussion

La problématique porte sur l’affichage des seules demandes de congé d’un employé connecté, en évitant les enregistrements d’autres utilisateurs dans une application PHP. La solution consiste à limiter les résultats via une jointure entre la table user et formulaireconge sur le champ matricule et à filtrer par l’identifiant de connexion stocké en session, plutôt que par $_POST. En pratique, remplacez la référence au login en POST par la variable de session et limitez les colonnes pour ne pas exposer les informations sensibles. D’autres ajustements utiles consistent à vérifier que les champs matricule et login sont bien présents et à sécuriser la requête pour éviter les injections.

Bobot (l’IA à votre service)
  1. Bonjour,

    Dans formulaire conge il doit y avoir un identifiant de l'employé (je le nomme ici id_employe).
    Récupére l'identifiant de l'employé connecté (je le nommerai ici id_user) et fais
    $requete="SELECT * FROM formulaireconge where id_employe='$id_user'";
    1. salut
      le tableau s'affiche mais vide alors que j'ai une demande au nom de ce login voila l'erreur que j'ai
      Notice: Undefined variable: login in C:\Program Files\EasyPHP 3.0\www\PFE\site_flash\consul.php on line 86
      (en gras la ligne 86 et merci pour votre aide)
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Page d'accueil employé</title>
      <link href="style.css" rel="stylesheet" type="text/css" />
      <link href="layout.css" rel="stylesheet" type="text/css" />
      <script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
      <script src="SpryAssets/SpryMenuBar.js" type="text/javascript"></script>
      <link href="SpryAssets/SpryMenuBarVertical.css" rel="stylesheet" type="text/css" />
      </head>
      <body id="page2">
      <!-- header -->
      <div class="header_tal">
        <object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="766" height="396">
          <param name="movie" value="images/header.swf" />
          <param name="quality" value="high" />
          <param name="wmode" value="opaque" />
          <param name="swfversion" value="8.0.35.0" />
          <!-- Cette balise <param> invite les utilisateurs de Flash Player en version 6.0 r65 et ultérieure à télécharger la version la plus récente de Flash Player. Supprimez-la si vous ne voulez pas que cette invite soit visible. -->
          <param name="expressinstall" value="Scripts/expressInstall.swf" />
          <!-- La balise <object> suivante est destinée aux navigateurs autres qu'IE. Supprimez-la d'IE à l'aide d'IECC. -->
          <!--[if !IE]>-->
          <object type="application/x-shockwave-flash" data="images/header.swf" width="766" height="396">
            <!--<![endif]-->
            <param name="quality" value="high" />
            <param name="wmode" value="opaque" />
            <param name="swfversion" value="8.0.35.0" />
            <param name="expressinstall" value="Scripts/expressInstall.swf" />
            <!-- Le navigateur affichera le contenu alternatif suivant pour les utilisateurs d'un lecteur Flash de version 6.0 ou de versions plus anciennes. -->
            <div>
              <h4>Le contenu de cette page nécessite une version plus récente d’Adobe Flash Player.</h4>
              <p><a href="https://get.adobe.com/flashplayer/"><img src="https://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Obtenir le lecteur Adobe Flash" width="112" height="33" /></a></p>
            </div>
            <!--[if !IE]>-->
          </object>
          <!--<![endif]-->
        </object>
      </div>
      <!-- content -->
      <div class="content_tal">
      	<div id="content" class="separate">
      		<div class="separate1">
      			<div class="cont_height">&nbsp;</div>
      			<div class="col_1 green">
      				<div class="title_green">
      				  <p><img alt="" src="images/2title1.gif" /></p>
      				  <p>&nbsp;</p>
      				  <p>&nbsp;</p>
      				  <p>&nbsp;</p>
      			  </div>
      				<div class="indent">
      				  <ul id="MenuBar1" class="MenuBarVertical">
                          <li><a href="mailto:nomCorrespondant@nomDomaine.fr">Acc&eacute;der &agrave; la boite e-mail</a></li>
                          <li><a class="MenuBarItemSubmenu" href="#">Remplir un formulaire</a>
                            <ul>
                              <li><a href="form-conge-employe.php">Demande de cong&eacute;</a></li>
                              <li><a href="form-sortie-employe.php">Demande d'autorisation de sortie</a></li>
                            </ul>
                          </li>
      <li><a href="#" class="MenuBarItemSubmenu">Aide</a>
            <ul>
                              <li><a href="doc-employe.php">Documentation</a></li>
                              <li><a href="apropos-employe.php">A propos</a></li>
                            </ul>
                          </li>
      				  </ul>
      <p>&nbsp;</p>
      				  <p><br clear="all"  />
      			      </p>
      				  <div class="indent_text"><br clear="all"  />
      					</div>
      				</div>
      			</div>
      			<div class="col_2 blue">
      				<div class="title_blue"><img alt="" src="images/2title2.gif" /></div>
      				<div class="indent">
      				  <p>&nbsp;</p>
      				  <p><strong>Application employé :</strong></p>
      <p>&nbsp;</p>
      
      <?php
      include("connex.inc.php");
      $idcom=connex("basebank","myparam");
      $requete="SELECT * FROM formulaireconge where matricule='$login'";
      $result=@mysql_query($requete,$idcom);
      if(!$result)
      {
      	echo "Lecture impossible";
      }
      else
      {
      	$nbcol=mysql_num_fields($result);
      	$nbcand=mysql_num_rows($result);
      	
      	echo "<h5> Il y a $nbcand demande(s) de congé </h5> <br> ";
      		
      	echo "<table border=\"1\">";
      	
      	echo "<th>Matricule</th> <th>Nom</th> <th>Prénom</th> <th>Direction</th> <th>Affectation</th> <th>Service</th> <th>Adresse durant le congé</th> <th>Téléphone</th> <th>Nombre de jours demandés: Ouvrables</th> <th>Date de départ</th> <th>Date de retour</th> <th>Signature de l'employé</th> <th>E-mail</th> <th>Inputter</th> <th>Authorizer</th> <th>Observation</th> <th>Signature</th> <th>Droit au congé au 21/12/2009</th> <th>Nombre de jours accordé </th> <th>Nombre de jours ouvrables</th> <th>La Direction Administrative</th> <th>Le Vice Président</th> <th>Titre de congé établi et</th> <th>Sous référence: DA/BK/BD/N°</th>";
      	while($ligne=mysql_fetch_array($result,MYSQL_NUM))
      	{
          echo "<tr>";
          foreach($ligne as $valeur)
      	  {
            echo "<td> $valeur </td>";
      		}
      		echo "</tr>";
      	}
      	echo "</table>";
      }
      ?>
      
                        <p>&nbsp;</p>
      				</div>
      			</div>
      			<div class="clear"></div>
      		</div>
      	</div>
      </div>
      <!-- footer -->
      <div id="footer"><span><a href="http://www.bestbank.com.tn">BestBank.com.tn</a> &copy; 2009 </span> All Rights Reserved</div>
      <script type="text/javascript">
      <!--
      swfobject.registerObject("FlashID");
      var MenuBar1 = new Spry.Widget.MenuBar("MenuBar1", {imgRight:"SpryAssets/SpryMenuBarRightHover.gif"});
      //-->
      </script>
      </body>
      </html>
      1. Tu modifies ta requête de la sorte :
        $requete="SELECT * FROM formulaireconge WHERE login='".$_SESSION['login']."';";
        Où quelque chose dans ce genre là en fonction de la structure de tes données.
        1. salut
          j'ai cette erreur:
          Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP 3.0\www\PFE\site_flash\consul.php on line 85
          Lecture impossible


          et la ligne 85 c'est la ligne de la requête (je l'ai copier telle qu'elle est vue que moi j'ai login aussi)
          1. Tu n'as pas oublié le session_start() au début du script ?
        2. salut
          je l'ai mise mais j'ai maintenant Lecture impossible
          voila le code:
          <?php
          include("connex.inc.php");
          $idcom=connex("basebank","myparam");
          $requete="SELECT * FROM formulaireconge WHERE login='".$_SESSION['login']."';";
          $result=@mysql_query($requete,$idcom);
          if(!$result)
          {
          	echo "Lecture impossible";
          }
          else
          {
          	$nbcol=mysql_num_fields($result);
          	$nbcand=mysql_num_rows($result);
          	
          	echo "<h5> Il y a $nbcand demande(s) de congé </h5> <br> ";
          		
          	echo "<table border=\"1\">";
          	
          	echo "<th>Matricule</th> <th>Nom</th> <th>Prénom</th> <th>Direction</th> <th>Affectation</th> <th>Service</th> <th>Adresse durant le congé</th> <th>Téléphone</th> <th>Nombre de jours demandés: Ouvrables</th> <th>Date de départ</th> <th>Date de retour</th> <th>Signature de l'employé</th> <th>E-mail</th> <th>Inputter</th> <th>Authorizer</th> <th>Observation</th> <th>Signature</th> <th>Droit au congé au 21/12/2009</th> <th>Nombre de jours accordé </th> <th>Nombre de jours ouvrables</th> <th>La Direction Administrative</th> <th>Le Vice Président</th> <th>Titre de congé établi et</th> <th>Sous référence: DA/BK/BD/N°</th>";
          	while($ligne=mysql_fetch_array($result,MYSQL_NUM))
          	{
              echo "<tr>";
              foreach($ligne as $valeur)
          	  {
                echo "<td> $valeur </td>";
          		}
          		echo "</tr>";
          	}
          	echo "</table>";
          }
          ?>
          1. Remplace
            if ( !$result ) {
               echo "Lecture impossible";
            }
            par
            if ( !$result ) {
               echo 'Lecture impossible<br />';
               echo mysql_error();
            }
            Et recopie l'erreur ici.
        3. salut
          voici l'erreur:

          Lecture impossible
          Champ 'login' inconnu dans where clause
          1. Ca veut dire que tu n'as pas de champ 'login' dans ta table...
        4. dans ma table forulaireconge j'ai
          matricule nom prenom direction affectation service adressedurantleconge telephone nbjourouvrable datedepart dateretour signatureemploye mail inputter authorizer observation signature droitconge nbjaccorde nbjouvrable directionadministrative vicepresident titredeconge sousreference etatdemande

          et dans ma table user (qui permet l'authentification):
          login nom prenom telephone mail motdepasse grade

          normalement d'apres vos conseils j'ai compris que je dois avoir un champ en commun et la j'ai pas le login comme vous dite, est ce que c'est faisable seulement sur le nom par exemple ?
          Merci beaucoup pour votre aide
          1. Dans un cas comme celui-ci, la table utilisateur devrait contenir un identifiant unique qui se retrouve dans la table congé. De plus, cela permettrait d'éviter de répéter dans la table de congés les informations concernant l'utilisateur (nom, prenom, telephone, mail).

            Le matricule qu'on trouve dans la table congé sert à quoi ?
        5. c'est un matricule (numéro) pour chaque employé et d'ailleurs il est unique pour chacun (comme id)
          je pense la solution et d'ajouter la matricule dans la table user non ?
          1. Exactement ! Et puis tu pourras enlever les nom, prenom, telephone, mail de la table congés.

            Ta requête deviendra quelque chose comme
            SELECT <les champs que tu veux> 
            FROM <table utilsateur> u JOIN <table congés> c ON u.matricule=c.matricule 
            WHERE u.login=$_POST['login'];
        6. merci j'essaye ce soir et je vous tiendrais au courant merci beaucoup
          1. salut
            bon j'ai pas supprimer le nom, prénom, car je veux que ca reste 'jespère que ca cause pas de conflit
            j'ai réaliser votre requête mais ca renvoie une erreur
            Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Program Files\EasyPHP 3.0\www\PFE\site_flash\consul.php on line 85

            code

            <?php
            include("connex.inc.php");
            $idcom=connex("basebank","myparam");
            $requete="SELECT * FROM user u JOIN formulaireconge c ON u.matricule=c.matricule WHERE u.login=$_POST['login']";
            $result=@mysql_query($requete,$idcom);
            if ( !$result ) {
               echo 'Lecture impossible<br />';
               echo mysql_error();
            }
            else
            {
            	$nbcol=mysql_num_fields($result);
            	$nbcand=mysql_num_rows($result);
            	
            	echo "<h5> Il y a $nbcand demande(s) de congé </h5> <br> ";
            		
            	echo "<table border=\"1\">";
            	
            	echo "<th>Matricule</th> <th>Nom</th> <th>Prénom</th> <th>Direction</th> <th>Affectation</th> <th>Service</th> <th>Adresse durant le congé</th> <th>Téléphone</th> <th>Nombre de jours demandés: Ouvrables</th> <th>Date de départ</th> <th>Date de retour</th> <th>Signature de l'employé</th> <th>E-mail</th> <th>Inputter</th> <th>Authorizer</th> <th>Observation</th> <th>Signature</th> <th>Droit au congé au 21/12/2009</th> <th>Nombre de jours accordé </th> <th>Nombre de jours ouvrables</th> <th>La Direction Administrative</th> <th>Le Vice Président</th> <th>Titre de congé établi et</th> <th>Sous référence: DA/BK/BD/N°</th>";
            	while($ligne=mysql_fetch_array($result,MYSQL_NUM))
            	{
                echo "<tr>";
                foreach($ligne as $valeur)
            	  {
                  echo "<td> $valeur </td>";
            		}
            		echo "</tr>";
            	}
            	echo "</table>";
            }
            ?>
            1. $requete="SELECT * FROM user u JOIN formulaireconge c ON u.matricule=c.matricule WHERE u.login='".$_POST['login']."'";
              
          2. salut
            j'ai changer la requête , j'ai eu l'affichage de la table maisvide (ne contenant pas la demande) avec cette erreur
            Notice: Undefined index: login in C:\Program Files\EasyPHP 3.0\www\PFE\site_flash\consul.php on line 85
            1. Scuz, tu récupères le login dans la session, remplace $_POST['login'] par $_SESSION['login'].
          3. ca m'affiche maintenant la liste des congés de l'utilisateur concerné mais mais j'ai un probleme c'est que le formulaire quand je l'affiche les valeurs des champs par exemple le matricule contient le login et la signature contient un champ qui lui correspond pas ,....
            est ce qu'il faut que la table user et la table formulaire congé ont le meme ordre des champs ?
            et meme si j'enleve les champs nom, prenom ,.... de la table user je vais laisser le champ mot de passe et la il sera afficher quand l'utilisateur consulte ses propres demandes.
            1. Dans la requête que je te donnais, il y avait un petit <les champs que tu veux> ou quelque chose du genre... À la place, tu es sensé(e ?) mettre les champs que tu veux récupérer, en les préfixant par le nom de la table (ou u et c pour user et congé puisque tu les définis comme alias dans le FROM). Donc tu mets u.nom, u.prenom, ... et tu ne sélectionne pas le mot de passe, ni les autres champs qui ne t'intéressent pas.
          4. oui vous m'avez donner cette requete
            SELECT <les champs que tu veux>
            FROM <table utilsateur> u JOIN <table congés> c ON u.matricule=c.matricule
            WHERE u.login=$_POST['login'];


            et moi j'ai réaliser celle la en voulant afficher tous les champs de la table formulaireconge quand matricule de la table formulaireconge est égale au matricule de la table user et biensure le login est bon

            $requete="SELECT * FROM user u JOIN formulaireconge c ON u.matricule=c.matricule WHERE u.login='".$_SESSION['login']."'";

            c'est faux ?
            1. Ce n'est pas faux, c'est imprécis et sous-optimal, à la place du '*' mets uniquement les champs dont tu as besoin en toutes lettres, en les préfixant par la table dans laquelle ils se trouvent (ex : u.login).
          5. ah d'accord je vais essayer et demain matin je vous tiens au courant
            Merci beaucoup et bonne nuit
            A demain
            1. salut
              je reviens vous remercier pour votre aide , ca a marcher.
              Merci beaucoup et bonne soirée
              1. De rien, c'est un plaisir !