Insertion des données MySQL

Résolu/Fermé
hassene_23 Messages postés 4 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009 - 13 nov. 2009 à 16:41
hassene_23 Messages postés 4 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009 - 13 nov. 2009 à 21:58
Bonjour,
j'ai un formulaire d'insertion dont le résultat est dans la même page;on cliquant sur le bouton l'insertion marche mais le problème lorsque j'actualise la page le dernier enregistrement se rajoute une autre fois;
voilà mon script si vous pouvez m'aidez svp:
<table width="935" border="0" align="center" bordercolor="#999999" bgcolor="#D0E4F4">
  <tr>
    <td height="53"><form id="form1" name="form1" method="post" action="">
 
      <strong>Marque:</strong>
      <label>
      <input name="lib" type="text" id="lib" />
      </label>
        <label> </label>
        <label>
        <input type="submit" name="Submit" value="Add" />
        </label>
    </form>    </td>
  </tr>
</table>
 <?php 
 
 
 include ("../conn.php");
 $lib=$_POST['lib'];
  
 
 $requet="INSERT INTO `marque` (`ID_MARQUE`,`LIB_MARQUE`) VALUES ('','$lib');";
  mysql_query($requet,$connexion) or die("Ecriture impossible"); 


 ?> 
<table align="left" border="0" width="1070" >
<tr>
<td width="218" bgcolor="#6699FF"><div align="center"><em><strong>ID</strong></em></div></td><td width="842" bgcolor="#6699FF"><div align="center"><em><strong>Libellé</strong></em></div></td>
</tr>

   <?php 
  $requete=" SELECT  * 
  FROM marque  
	     
;";
 
  $resultat=mysql_query($requete,$connexion);
  $color = 0; 
	
 while($tri=mysql_fetch_row($resultat)) {
	 
	 $color % 2 ? $bgcolor = '#eeeeee' : $bgcolor = '#cccccc';
		 echo '<tr bgcolor="'.$bgcolor.'">';
	
		   echo "<td>".$tri[1]."</td>";
	       echo "<td align='center'>".$tri[0]."</td>";
 
 
		 echo"</tr>";
 $color++;  
	 }
 

 ?> 
</table>


A voir également:

5 réponses

Bonjour

Si ton script est exécuté deux fois avec les mêmes données, c'est normal qu'il fasse deux fois la même chose :)

Pour éviter ça, tu peux vérifier si les données ne sont pas déjà enregistrées, par exemple.

Personnellement, j'utilise une autre technique. Chaque fois que j'affiche un formulaire, je crée un identifiant unique (uniqid() en php) que je mets dans un champ hidden du formulaire et dont je garde une copie dans une variable de session.
Quand je reçois le formulaire, je vérifie si la valeur du champ hidden correspond bien à celle de la variable de session. Si c'est OK, je traite le formulaire et j'efface la variable de session.
Si on réactualise la page, je reçois à nouveau la même valeur du champ hidden, mais ma variable de session n'existe plus (ou j'en ai peut-être une nouvelle si j'ai renvoyé un formulaire, ais elle est différente)
C'est un peu long à expliquer mais ça tient en quelques lignes de programme.
0
hassene_23 Messages postés 4 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009
13 nov. 2009 à 17:18
Merci pour votre réponse, est ce que vous pouvez me donner un exemple de code de votre méthode?
0
hassene_23 Messages postés 4 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009
13 nov. 2009 à 17:37
Je pense que j'ai trouvé une solution (idéale ou non???) , J'ai créer une page qui traite le formulaire avec redirection vers la page qui affiche le résultat:
<?php 
 
 
 include ("../conn.php");
 $lib=$_POST['lib'];
  
 
 $requet="INSERT INTO `marque` (`ID_MARQUE`,`LIB_MARQUE`) VALUES ('','$lib');";
  mysql_query($requet,$connexion) or die("Ecriture impossible"); 
  header ("location:marque.php");

 ?> 
0
L'inconvénient de ta méthode, c'est que si on utilise le bouton 'revenir en arrière' du navigateur, on retrouve l'ancien formulaire et on peut le valider à nouveau : même problème

Mon code :

(ne pas oublier le session_start(); au début pour avoir les sessions)

// traitement du formulaire reçu
// on vérifie que c'est le bon formulaire
if (isset($_SESSION['uniqid']) && isset($_POST|'uniqid']) &&  ($_SESSION['uniqid'])==$_POST|'uniqid'])) {
  unset($_SESSION['uniqid']); // on détruit la variable de session pour ne pas ré-utiliser le même formulaire
  ... reste du traitement
}
// envoi du formulaire
  echo '<form etc...
  $_SESSION['uniqid']=uniqid();
  echo '<input type="hidden" value="'.$_SESSION['uniqid'].'" />';
...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hassene_23 Messages postés 4 Date d'inscription vendredi 13 novembre 2009 Statut Membre Dernière intervention 13 novembre 2009
13 nov. 2009 à 21:58
Merci bien je vais essayer ta méthode
0