Doublons dans base

Fermé
claudio38 Messages postés 41 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 8 octobre 2008 - 8 janv. 2006 à 19:15
 IDNoires - 9 janv. 2006 à 11:47
Bonsoir,

j'ai une bdd avec remplissage via un formulaire php
avec notamment de 2 champs dans ma bdd essentiel nommé msg_id qui s'incrémente de 1 à chaque enregistrement (définit en auto incrément dans mysql) et un 2nd appelé num qui lui aussi s'ajoute de 1 à chaque enregistrement, mon problème est l'apparition de doublons sur le champ num
voilà une partie de mon script

<form method='post' action='registre2.php' name='registre'>
<?php

// Cette requête permet de récupérer le dernier numéro entré et de lui ajouter 1 -- remplacer text par hidden pour cacher le numéro

$req1="SELECT num FROM `registre2` ORDER BY msg_ID desc limit 1";
$res = mysql_query ($req1);

while($val=mysql_fetch_array($res,$bdd))
{
$num = $val['num'];
$num++;
echo "<INPUT name=\"num\" maxlength=\"8\" type=\"text\"";
echo " size=\"8\" align=\"right\" value=\"$num\">";
}

?>

<input type='submit' value='Enregistrer' name='op1'">

Ce script peut être appelé par plusieurs personnes à la fois et donc chacune se voit retournée le même numéro

Auriez-vous une idée pour éviter ce désagrément ?

Par avance merci

1 réponse

Plusieurs choses :

- si tu ne veux pas plusieurs fois le même numéro pour différentes personnes, tu dois le réserver. c-a-d après ton select tu incrémentes ta base de numéro de 1 (update registre2 set num = num+1)
Inconvénient : si ton utilisateur ne soumet pas le formulaire tu perds le numéro affecté.

- si tu as besoin d'avoir des numéros qui se suivent là ça devient plus compliqué car il est très dur de gérer les accès concurrentiels. tu devrais donné les numéros à posteriori du formulaire.

- tu fais un while pour ton fetch array alors que tu as une requête qui ne te renvoie qu'un seul enregistrement (LIMIT 1) c'est pas nécessaire
0