IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Recuperer identifiant auto-incrementable comme index de parcours [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut Recuperer identifiant auto-incrementable comme index de parcours
    Bonjour tout le monde,
    Je developpe une application en php et je me trouve confronté à un problème.
    En fait, j'ai un formulaire de 2 champs de saisie en dessous desquels j'affiche les elements enregistrés dans un tableau.
    Lorsque je clique sur une ligne de ce tableau, ces elements se reaffichent dans mon formulaire, on pourra alors modifier ou supprimer cet enregistrement.
    Mon probleme est que ne sachant comment utiliser l'identifiant automatique que je n'affiche pas d'ailleurs, j'utilise le libellé comme condition pour le faire.
    Cela n'est pas correct, car le libellé n'est pas unique.
    Aidez moi s'il vous plait.

    Au besoin, je vous envoie le code complet.
    Merci

  2. #2
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Tu peux mettre le code effectivement ça sera peut être plus clair, parce que là tel quel, je dirai de récupérer l'identifiant de tes lignes en base et de les mettre en valeur de tes lignes sur ta page pour t'en servir sur ton formulaire...

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Au besoin, je vous envoie le code complet.
    peut être pas tout mais les éléments approprié volontier

  4. #4
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Code des boutons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <?php
    include('connect.inc.php');
    ?><?php	  
    if(isset($_POST['submit'])) //Si le formulaire a été soumis
    {
    $lib=$_POST['txtlib'];
    $salaire=$_POST['txtsalaire'];
     switch($_POST['submit'])
     {
     case 'Ajouter':
     $erreurs=array();
     //Vérification et validation des valeurs champs
     if(empty($_POST['txtlib']))
            {$erreurs[]='Veuillez saisir le libellé de la fonction';}
     else{
          $lib=$_POST['txtlib'];
    	 }
     if(empty($_POST['txtsalaire']))
     {$erreurs[]='Veuillez saisir le salaire correspondant à cette fonction';}
    	  else {
    	  if(is_numeric($_POST['txtsalaire']))
           $salaire=$_POST['txtsalaire'];
          else 
          $erreurs[]='Veuillez saisir des caractères numériques pour le salaire';
       	     }
     if(!empty($erreurs))
     {
      foreach($erreurs as $msg)
      {
       echo "- $msg<br />\n";
      }
     }
     else{
          //include('connect.inc.php');
    	  mysql_open();
    	  $insertfonction="INSERT INTO fonction(designation, salaire) VALUES('$lib','$salaire')";
    	  $resultfonction=@mysql_query($insertfonction);
    	  mysql_close();
    	  $lib='';
    	  $salaire='';
    	  }
    	  break;
     
     case'Modifier':
     if(empty($_POST['txtlib'])) 
     echo'<font style="color:white;">Veuillez double-cliquer sur la ligne fonction à modifier</font>';
     else{
     if(empty($_POST['txtsalaire']))
     {$erreurs[]='Veuillez saisir le salaire correspondant à cette fonction';}
    	  else {
    	  if(is_numeric($_POST['txtsalaire']))
           $salaire=$_POST['txtsalaire'];
          else 
          $erreurs[]='Veuillez saisir des caractères numériques pour le salaire';
       	     }
     if(!empty($erreurs))
     {
      foreach($erreurs as $msg)
      {
       echo "- $msg<br />\n";
      }
     }
     else{
     
     mysql_open();
    $strupdade="UPDATE fonction SET designation='$lib', salaire='$salaire' WHERE designation='$lib'";
     $resultat=mysql_query($strupdade);
          mysql_close();
    	  $lib='';
    	  $salaire='';
    	  }
    	 }
    	  break;
    	  case'Supprimer':
     if(empty($_POST['txtlib'])) 
     echo'<font style="color:white;">Veuillez double-cliquer sur la ligne fonction à supprimer</font>';
     else{
     mysql_open();
    	  $suppr="DELETE FROM fonction WHERE designation='$lib'";
    	  $result=mysql_query($suppr);
          mysql_close();
    	  $lib='';
    	  $salaire='';
    	  }
    	  break;
    	  case'Annuler':
    	  $lib='';
    	  $salaire='';
    	  break;
     
    	  default:
    	  break;	
    	 }
    }
    ?>
    Code du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <form action="fonction.php" method="POST" >
    <table width="51%">
      <tr><td><fieldset>
      <legend><span class="Style2">FONCTION </span></legend>
    	<table width="512" height="125" border="0" >
               <tr>
                     <td width="235" height="24"><span class="Style2">Désignation :</span></td>
                 <td width="267"><input type="text" name="txtlib" id="libel" size="40" maxlength="60" value="<?php echo $lib; ?>" /></td>
               </tr>
               <tr>
                      <td height="30"><span class="Style2">Salaire correspondant :</span></td>
                      <td><input type="text" name="txtsalaire" id="sal" size="20" maxlength="60" value="<?php echo $salaire; ?>" />FCFA</td>
               </tr>
    		   <tr>
    		          <td height="26">&nbsp;</td>
    		         <td><div>
    		       <input type="submit" name="submit" value="Ajouter" /><input type="submit" name="submit" value="Modifier" /><input type="submit" name="submit" value="Supprimer" /><input type="submit" name="submit" value="Annuler" />
    		     </div></td>
    	      </tr>
    	</table>
      </fieldset></td></tr>
      </table>
    </form>
    Code d'affichage du tableau en dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
    	     $link1 = "{$_SERVER['PHP_SELF']} ?tri=codefonction";
             $link2 = "{$_SERVER['PHP_SELF']} ?tri=designation";
    	 //vérifie si l'ordre de tri a été défini
    	 if (isset($_GET['tri']))
    	 {
    	   //Détermine comment seront triés les résultats de la requête.
    	   switch ($_GET['tri'])
    	   {
    	     case 'codefonction':
    	                   $order_by = 'codefonction ASC';
    			   $link1 = "{$_SERVER['PHP_SELF']}?tri=lnd";
    			   break;
    	     case 'lnd':
    	                   $order_by = 'codefonction DESC';
    			   $link1 = "{$_SERVER['PHP_SELF']}?tri=codefonction";
    			    break;
    	      case 'designation':
    	                   $order_by = 'designation ASC';
    			   $link2 = "{$_SERVER['PHP_SELF']}?tri=fnd";
    			   break;
    	      case 'fnd':
    	                    $order_by = 'designation DESC';
    			    $link2 = "{$_SERVER['PHP_SELF']}?tri=designation";
    			    break;
     
    	      default:
    			    $order_by = 'codefonction DESC';
    			    break;
    	     }
    		   $tri = $_GET['tri'];
             }
    		 else
    		 {
              $order_by = 'codefonction DESC';
              $tri = 'rdd';
             }
    		 mysql_open();
             $strselect="SELECT * FROM fonction ORDER BY $order_by ";
             $result = @mysql_query($strselect);
             echo '<table id="matable" align="left" cellspacing="1" cellpadding="5" border="0" width="60%">
    		  <tr bgcolor="#CCCC99">
    		  	<td align="left"><b><a href="'.$link2.'">Désignation</a></b></td>
    			<td align="left"><b>Salaire correspondant</b></td>
    		  </tr>';
    		$bg='#eeeeee';
    		while($row=mysql_fetch_array($result, MYSQL_ASSOC))
    		  {
    		   $bg=($bg=='#eeeeee'? '#ffffff' : '#eeeeee');
    		   echo '<tr bgcolor="'.$bg.'">
    					   <td align="left">'. $row['designation'] .'</td>
    					   <td align="left">' . $row['salaire'] . '</td>
    				 </tr>';
    	      }
    		   echo '</table>';
    		   mysql_close();
    		?>
    Code JS pour afficher les elements d'une ligne dans le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script type="text/javascript">
    function afficheLigne(tableau)
    {
    	for(var i=1; i<document.getElementById(tableau).getElementsByTagName('tr').length; i++)
    	{
    		document.getElementById(tableau).getElementsByTagName('tr')[i].onclick=function()
    			{
    				document.getElementById('libel').value=this.getElementsByTagName('td')[0].firstChild.data;
    				document.getElementById('sal').value=this.getElementsByTagName('td')[1].firstChild.data;
    			}
    	}
    }
    </script>
    Merci de bien vouloir m'aider

  5. #5
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strselect="SELECT * FROM fonction ORDER BY $order_by ";
    Ici tu récupères toutes les données de ta table, donc ton identifiant avec.
    Ensuite de deux choses l'une, soit ça n'est pas problématique que l'utilisateur voit cet identifiant unique, à ce moment là tu rajoute une colonne dans ta table avec l'identifiant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo '<tr bgcolor="'.$bg.'">
     <td align="left">'. $row['identifiant_unique'] .'</td>
     <td align="left">'. $row['designation'] .'</td>
     <td align="left">' . $row['salaire'] . '</td>
    </tr>';
    Et ensuite tu changes ton js en accord avec ça, de même que tu fais l'update sur l'identifiant plutôt que sur ton label.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strupdade="UPDATE fonction SET designation='$lib', salaire='$salaire' WHERE identifiant_unique='$identifiantformulaire'";

    Après si ça ne doit pas être affiché tu dois pouvoir utiliser un truc de type <input type="hidden" ...>
    Mais dans tous les cas la valeur sera affichée dans le code source de la page (mais je pense que tu n'as pas le choix).

  6. #6
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    [QUOTE=Linio;4321906]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strselect="SELECT * FROM fonction ORDER BY $order_by ";
    Ici tu récupères toutes les données de ta table, donc ton identifiant avec.
    Ensuite de deux choses l'une, soit ça n'est pas problématique que l'utilisateur voit cet identifiant unique, à ce moment là tu rajoute une colonne dans ta table avec l'identifiant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo '<tr bgcolor="'.$bg.'">
     <td align="left">'. $row['identifiant_unique'] .'</td>
     <td align="left">'. $row['designation'] .'</td>
     <td align="left">' . $row['salaire'] . '</td>
    </tr>';
    Je sais que ce sera plus facile pour moi de le faire ainsi, mais
    c'est justement ce que je veux eviter, afficher l'identifiant.

  7. #7
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Tu ne veux même pas qu'il apparaisse dans le code de ta page?

    Parce que si c'est ça, ça risque d'être un tout petit peu compliqué quand même... Il faut bien que tu pioches tes informations quelque part...

    Le mieux est d'utiliser alors des sessions.
    Tu associes le numéro de ligne à l'identifiant "réel" dans ta base, et ensuite à l'exécution, selon le numéro de ligne tu récupères quelque chose du style $_SESSION['maligne'] qui te renvoie l'identifiant réel.

    Transparent pour l'utilisateur.

  8. #8
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Linio Voir le message
    Tu ne veux même pas qu'il apparaisse dans le code de ta page?
    Je ne comprends pas très bein ce que tu veux dire par là.
    Mais il me semble que ta solution avec <input type="hidden"...> pourrait faire mon affaire.
    Peux tu m'aider à l'appliquer?

  9. #9
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    De deux choses l'une.
    Soit tu ne veux simplement pas que ça apparaisse "visuellement" sur ta page, mais si l'utilisateur va voir le code source de ta page, il aura accès à cette information.
    Soit tu ne veux avoir l'information nulle part (à ce moment là je pense que passer par les sessions peut régler ton problème).

    Pour le reste c'est plus du HTML que du PHP, en fait il faut que tu crée une balise qui contienne tes données mais qui n'apparaisse pas dans ta page, je sais au sein d'un formulaire qu'on peut utiliser l'input de type hidden. Il apparait dans le code source mais pas dans la page. Le problème est que tu n'utilises pas de formulaire, donc j'avoue que je ne sais pas le comportement que cela peut avoir, tu dois pouvoir essayer de l'utiliser quand même vu qu'en JS tu parcours le DOM ça ne changera pas grand chose, mais j'avoue qu'en terme de propreté de code ça ne doit pas être idéal.

  10. #10
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Linio Voir le message
    De deux choses l'une.
    Soit tu ne veux simplement pas que ça apparaisse "visuellement" sur ta page, mais si l'utilisateur va voir le code source de ta page, il aura accès à cette information.
    Soit tu ne veux avoir l'information nulle part (à ce moment là je pense que passer par les sessions peut régler ton problème).
    Ce que je veux eviter c'est juste l'affichage dans le tableau et rien d'autre
    on pourra le retrouver dans le code source, peu importe!
    S'il te plait fais une illustation du champ hidden dans mon code

  11. #11
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr>
    			<td><input type="hidden" name="id" value="5"/></td>
    			<td>Titre</td>
    			<td>25</td>
    		</tr>
    Je pense plus simplement que tu dois pouvoir aussi attribuer l'attribut "value" à n'importe quelle balise en html (à confirmer) ça éviterait le recours à des balises inutiles.

  12. #12
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Linio Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr>
    			<td><input type="hidden" name="id" value="5"/></td>
    			<td>Titre</td>
    			<td>25</td>
    		</tr>
    Je pense plus simplement que tu dois pouvoir aussi attribuer l'attribut "value" à n'importe quelle balise en html (à confirmer) ça éviterait le recours à des balises inutiles.
    Excuse moi je vois bien le code que tu me donnes mais je ne comprends vraiment pas comment utiliser le hidden dans mon code et mettre ma condition de modification/suppression sur l'identifiant.

  13. #13
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    C'est toi qui a fait le code précédent ?
    Parce que concrètement c'est pas plus compliqué.

    En gros c'est dans ton js que tu dois faire la petite pirouette (bon moi je suis très mauvais en javascript donc du haut de mes connaissances), en gros tu vas injecter dans ton formulaire le libellé, la valeur, et aussi l'identifiant.

    Donc ton formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="fonction.php" method="POST" >
    [...]
    <input type="text" name="identifiant" id="identifiant" value="<?php echo $identifiant; ?>" />
    [...]
    </form>
    Ensuite dans ta liste, tu rajoutes l'identifiant, comme tu peux afin qu'il ne soit pas visible, donc soit avec un input hidden :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo '<tr bgcolor="'.$bg.'">
     <td align="left"><input type="hidden" name="identifiant" value="'. $row['identifiant'] .'"/></td>
     <td align="left">'. $row['designation'] .'</td>
     <td align="left">' . $row['salaire'] . '</td>
    </tr>';
    Soit tu dois pouvoir le mettre simplement en value (ça doit être plus propre je pense, mais là encore, à confirmer par les pros du DOM html)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo '<tr bgcolor="'.$bg.'">
     <td align="left" name="identifiant" value="'. $row['identifiant']>'. $row['designation'] .'</td>
     <td align="left">' . $row['salaire'] . '</td>
    </tr>';
    Ensuite le JS qui fait la bascule quand tu cliques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    	document.getElementById('libel').value=this.getElementsByTagName('td')[0].firstChild.data;
     
    document.getElementById('identifiant').value=this.getElementsByTagName('td')[0].value;
    				document.getElementById('sal').value=this.getElementsByTagName('td')[1].firstChild.data;
     
    </script>
    Enfin bon y'a pas mal à retravailler, mais en gros il faut changer pratiquement tout ton code si tu ne te base plus sur le même champ.

  14. #14
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 44
    Points
    44
    Par défaut
    C'est bon, ça marche!
    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Insertion d'un identifiant auto-incrementé dans une autre table
    Par knebhi dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 30/07/2009, 11h25
  2. auto increment avec sql server comme avec mysql
    Par skystef dans le forum Accès aux données
    Réponses: 6
    Dernier message: 21/09/2007, 08h22
  3. [SQL] Récupèrer un identifiant pour l'auto incrementer
    Par klr54000 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 21/04/2007, 15h34
  4. Réponses: 6
    Dernier message: 18/12/2006, 11h16
  5. [MySQL] valeur obligatoire de l'identifiant en auto-increment??
    Par zamoto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/05/2006, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo