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. salut
    je reviens vous remercier pour votre aide , ca a marcher.
    Merci beaucoup et bonne soirée
    1. De rien, c'est un plaisir !
  2. ah d'accord je vais essayer et demain matin je vous tiens au courant
    Merci beaucoup et bonne nuit
    A demain
    1. 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).
    2. 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.
    3. 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'].
    4. 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']."'";
        
    5. merci j'essaye ce soir et je vous tiendrais au courant merci beaucoup
      1. 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'];
      2. 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 ?
      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. 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.
      5. 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 ?
      6. 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
          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. 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'";