éviter enregistrement multiple dans mysql

Résolu/Fermé
Flohti Messages postés 162 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 7 février 2010 - 14 janv. 2008 à 10:13
 msi79 - 16 oct. 2011 à 21:33
Bonjour à tous,

j'ai un gros problème, j'ai une table qui me sert à compter des entrées pour générer un numero en fonction des précédents enregistrement.

en gros, je demande de compter les entrées faîtes dans cette table dans la journée par un utilisateur, là-dessus, je n'ai aucun problème.

le problème arrive au moment d'enregistrer mes données, mon enregistrement se fait plusieurs fois^^ (les mêmes).

du coup cela fausse mon compte des entrées pour la suite.



Par exemple, la première fois de la journée, il n'y a pas de problème : je ne compte aucune entrée, ensuite j'enregistre.
Puis, je recompte pour la deuxième fois, et là aléatoirement je peux avoir 2, 3, 4, ... entrées, mais comment faire... ?

Je ne veux pas avoir à supprimer ensuite les entrées identique, je voudrais juste que ça enregistre normalement une seule fois.


Je vous donne ma requête, desfois que ça vienne de là^^ :

mysql_query("INSERT INTO en_cours VALUES('$id', '$numerocom', '$date', 'attente')");
A voir également:

11 réponses

Flohti Messages postés 162 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 7 février 2010 15
14 janv. 2008 à 18:44
Ce system est en fait un systeme de commande, ce qui fait aussi qu'il m'affiche, par la suite, plusieurs fois la même commande^^

TRES TRES GROS PROBLEME !!!

Merci à vous
0
CHAP26 Messages postés 35 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 16 octobre 2011 11
14 janv. 2008 à 23:59
Bonjour,

Pourrais-tu réexpliquer ton problème car je ne suis pas sûr d'avoir bien compris.

Tu entre un 1er enregistrement avec 1, puis le deuxième avec 2, etc...

Ou alors tu entre un 1er enregistrement avec 1, puis le deuxième peut être 3 et dans ce cas là le troisième enregistrement doit s'incrémenter à partir de 3.

Réexplique pour que je sois sûr.

Autrement en attendant quelques pistes :
autoincrémenter la champs id de ta base
Requête permettant de sélectionner le dernier id :
SELECT LAST_INSERT_ID() FROM table ou
ORDER BY id DESC LIMIT 0,1

Cordialement

David
0
Flohti Messages postés 162 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 7 février 2010 15
15 janv. 2008 à 09:34
Salut CHAP26,

En fait ce n'est pas tout à fait ça, je n'ai pas d'autoincrément sur cette table, id est en réalité ma variable session qui identifie un utilisateur.

J'enregistre donc un id qui peut être à n'importe quel moment 103, 5062, 56 (ou d'autre, si tu vois ce que je veux dire).

Mon problème est que ma requête d'enregistrement, on va dire, s'exécute plusieurs fois. Puisque je me retrouve à avoir 4 enregistrements identiques.

Pour être très très précis :
- Je commence par compter les enregistrements qui ont été fait sous un identifiant dans la journée.
- Je génère ensuite automatiquement un numéro de commande du type 2 aa mm jj id +le numéro de l'entrée. J'explique ce point :
° aa = année avec deux chiffres (en ce moment : 08)
° mm = mois en cours (pareil : 01)
° jj = le jour (donc aujourd'hui : 15)
° id = ma variable de session sur quatre chiffres (exemple pour 103 : 0103)
° et ensuite le numéro de l'entrée dans la journée (et c'est la le gros problème : le premier, aucun, mais le deuxième peut être n'importe quoi suivant le nombre de fois qu'il m'a enregistré le premier.
ça donne un truc du genre : 2 08 01 15 0103 01 (génération automatique d'un numéro de commande forcément unique qui en plus contient certaines informations).

Mon petit script de génération de ce numéro :
_________________________________________________________
// je met mon id sur quatre chiffres :
if ($_SESSION['id'] < 10) {
$ident = '000' . $_SESSION['id']; }
elseif ($_SESSION['id'] < 100) {
$ident = '00' . $_SESSION['id']; }
elseif ($_SESSION['id'] < 1000) {
$ident = '0' . $_SESSION['id']; }
else { $ident = $_SESSION['id']; }

// je prépare la partie date de mon numéro :
$jour = date('d'); $mois = date('m'); $an = date('y');

// pour le compte des entrée de la journée :
$time = mktime(0, 0, 0, $mois, $jour, $an);

// je compte donc les entrée de la journée pour cet id :
mysql_connect("****", "****", "****");
mysql_select_db("****");
$compte = mysql_query("SELECT COUNT(*) AS nombre FROM en_cours WHERE id='$id' AND date>'$time'");
$combien = mysql_fetch_array($compte);
$combien = $combien['nombre'] + 1;

// ma dernière partie, pour l'avoir sur deux chiffres :
if ($combien < 10) { $combien = '0' . $combien; }
else {}

// et enfin je monte mon numéro unique de commande :
$numerocom = '2 ' . $an . ' ' . $mois . ' ' . $jour . ' ' . $ident . ' ' . $combien; $ht = ''; $tva = '';

// sur la fin la partie enregistrement :
mysql_query("UPDATE devis SET numerocom='$numerocom' WHERE numero='$numero' AND id='$id'");
mysql_query("INSERT INTO en_cours VALUES('$id', '$numerocom', '$total', '$numcom', '$date', 'attente')");

_________________________________________________________

J'espère avoir réussi à être des plus explicite possible afin que tout le monde comprenne (des fois qu'un plus débutant que moi ai la solution^^).

Je vous remercie tous (surtout toi CHAP26) de vous pencher dessus, ce truc est plutôt embêtant :
même si je reprennais la dernière entrée pour générer, au moment d'afficher les commandes du client, il y a plusieurs fois la même commande (...).

Voilou voili voilà.
0
CHAP26 Messages postés 35 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 16 octobre 2011 11
15 janv. 2008 à 10:24
Re,

Ton numéro de commande arrive correctement dans ta table (2 08 01 15 0103 01), si je comprend bien.

En exécutant seulement une fois ton code, tu te retrouves avec 4 enregistrements ?

Si oui, essayes de regarder si ta requête insert into ne se trouve pas dans une boucle de type for, do while ou while.

Sinon donne moi la structure de tes tables que je fasse un essai.

Cordialement

David
0

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

Posez votre question
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
15 janv. 2008 à 10:28
salut,

si c'est identifiant tu devrais peut être commencer par ajouter une contrainte d'unicité sur le champ de ta table, non ?

ça ne résout pas le problème actuel (quoique…) mais ce sera plus sûr en production.

0
Flohti Messages postés 162 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 7 février 2010 15
15 janv. 2008 à 10:34
oh p..... mais quel c.., tu as raison, j'ai même pas regardé cette con.....

et beh voui, je suis effectivement dans une boucle^^. sniff.

je suis désolé les gars, je m'incline humblement.

Merci David.

Ben ça fonctionne maintenant quoi, j'y ai pensé hier soir, mais j'avais pas mon pc, et puis ce matin, ben...

des fois il y a des trucs^^

Ben résolu quoi.
0
CHAP26 Messages postés 35 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 16 octobre 2011 11
15 janv. 2008 à 10:57
for ($coup_de_fouet=1; $coup_de_fouet<=100; $coup_de_fouet++) {
echo 'Flohti vient de dire Aïïïïïïe'.<br />;
}

T'as de la chance aujourd'hui je suis de bonne humeur et j'ai arrêté le compteur à 100 ;-)))))))))))))))))))))))

Bonne continuation

David
0
Flohti Messages postés 162 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 7 février 2010 15
15 janv. 2008 à 11:05
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe
Flohti vient de dire Aïïïïïïe...

lol, excuse moi encore, bonne journée.
0
moi j'ai le meme problème . j'ai pas mi de boucle . mais je remarque dans myql que mes enregistrement sont repetés plusieurs fois
0
CHAP26 Messages postés 35 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 16 octobre 2011 11
16 oct. 2011 à 20:15
Wahouuuu un post de 2008 :-)))

Peux-tu donner un ptit bout de code pour essayer de comprendre ?

Cordialement

David
0
voici mon code :
<?php
$date = date("d-m-Y");
$heure = date("H:i");
echo 'Nous sommes le '.$date.' et il est '.$heure;
?>
<?php
if (isset($_POST["valider"])) {
    //$matricule=trim($_POST["matricule"])
    $questionnaire=trim($_POST["questionnaire"]);
    $region=trim($_POST["region"]);
	$departement=trim($_POST["departement"]);
	$sousprefecture=trim($_POST["sousprefecture"]);
	$secteur=trim($_POST["secteur"]);
	$village=trim($_POST["village"]);
	$nom=trim($_POST["nom"]);
	$zone=trim($_POST["zone"]);
	$pere=trim($_POST["pere"]);
	$mere=trim($_POST["mere"]);
	$doc=trim($_POST["doc"]);
	$ndoc=trim($_POST["ndoc"]);
	$autredoc=trim($_POST["autredoc"]);
	$datarriv=trim($_POST["datarriv"]);
	$postale=trim($_POST["postale"]);
	$tel=trim($_POST["tel"]);
	$cel=trim($_POST["cel"]);
	$nom_rep=trim($_POST["nom_rep"]);
	$tel_rep=trim($_POST["tel_rep"]);
	$cel_rep=trim($_POST["cel_rep"]);
	//$age=trim($_POST["age"]);
	//$agent_sid=trim($_POST["agent_sid"]);
	//$tuteur_sid=trim($_POST["tuteur_sid"]);
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	$agentcol=trim($_POST["agentcol"]);
    $chef=trim($_POST["chef"]);
	$agentcod=trim($_POST["agentcod"]);
	$operateur=trim($_POST["operateur"]);
	$agentval=trim($_POST["agentval"]);
	$agentcor=trim($_POST["agentcor"]);
	//$dateagenttrim($_POST["dateagent"]);
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	$regionf=trim($_POST["regionf"]);
    $departementf=trim($_POST["departementf"]);
	$prefecturef=trim($_POST["prefecturef"]);
	$communef=trim($_POST["communef"]);
	$statutav=trim($_POST["statutav"]);
	$villagef=trim($_POST["villagef"]);
	$autrestatav=trim($_POST["autrestatav"]);
	$npiecef=trim($_POST["npiecef"]);
	$npers_av=trim($_POST["npers_av"]);
	$statut_av=trim($_POST["statut_av"]);
	$autre_av=trim($_POST["autre_av"]);
	$ndoc=trim($_POST["ndoc"]);
	$autredoc=trim($_POST["autredoc"]);
	$npiece_ap=trim($_POST["npiece_ap"]);
	$npers_ap=trim($_POST["npers_ap"]);
	$santef=trim($_POST["santef"]);
	$nbrepdgif=trim($_POST["nbrepdgif"]);
	$problemef=trim($_POST["problemef"]);
	$autreproblemef=trim($_POST["autreproblemef"]);
	$enceintef=trim($_POST["enceintef"]);
	$pkquitte=trim($_POST["pkquitte"]);
	$autrepkquitte=trim($_POST["autrepkquitte"]);
	$priorite1=trim($_POST["priorite1"]);
	$priorite2=trim($_POST["priorite2"]);
	$priorite3=trim($_POST["priorite3"]);
	$autrepriorite=trim($_POST["autrepriorite"]);
	$acceptef=trim($_POST["acceptef"]);
	$conditionf=trim($_POST["conditionf"]);
	$ret=trim($_POST["ret"]);
	$incitationf=trim($_POST["incitationf"]);
	$autre_ret=trim($_POST["autre_ret"]);
	$structuref=trim($_POST["structuref"]);
	$autre_strut=trim($_POST["autre_strut"]);
	$piececours=trim($_POST["piececours"]);
	$ouipreciser=trim($_POST["ouipreciser"]);
	$expirationf=trim($_POST["expirationf"]);
	$docadm=trim($_POST["docadm"]);
	$extraitf=trim($_POST["extraitf"]);
	$preciser_ext=trim($_POST["preciser_ext"]);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	if (empty($questionnaire)) {
		$msg="<font color=red>Veuillez saisir  le numero du questionnaire!!!!!!!!!</font>";
	}
	else {
			
			mysql_connect("localhost","root","") or die("erreur de connexion");
			mysql_select_db("nosvictimes") or die("Erreur de selection de la BD");
			
$sql = "INSERT INTO agent(id_agent,agentcol,chef,agentcod,operateur,agentval,agentcor,dateagent) 
VALUES('','".$agentcol."','".$chef."','".$agentcod."','".$operateur."','".$agentval."','".$agentcor."','')";
		
		//on insère les informations du formulaire dans la table  
 mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo 'Les informations sur les agents ont été ajoutées dans la base de données.</br>';
$agent_sid= mysql_insert_id();

$sql = "INSERT INTO info(id_info,regionf,departementf,prefecturef,communef,villagef,statutav,autrestatav,npiecef,npers_av,statut_av,autre_av,npiece_ap,npers_ap,santef,nbrepdgif,problemef,autreproblemef,enceintef,pkquitte,autrepkquitte,priorite1,priorite2,priorite3,autrepriorite,acceptef,conditionf,ret,incitationf,autre_ret,structuref,autre_strut,piececours,ouipreciser,expirationf,docadm,extraitf,preciser_ext) VALUES('','".$regionf."','".$departementf."','".$prefecturef."','".$communef."','".$villagef."','".$statutav."','".$autrestatav."','".$npiecef."','".$npers_av."','".$statut_av."','".$autre_av."','".$npiece_ap."','".$npers_ap."','".$santef."','".$nbrepdgif."','".$problemef."','".$autreproblemef."','".$enceintef."','".$pkquitte."','".$autrepkquitte."','".$priorite1."','".$priorite2."','".$priorite3."','".$autrepriorite."','".$acceptef."','".$conditionf."','".$ret."','".$incitationf."','".$autre_ret."','".$structuref."','".$autre_strut."','".$piececours."','".$ouipreciser."','".$expirationf."','".$docadm."','".$extraitf."','".$preciser_ext."')";
		
	// on insère les informations du formulaire dans la table  
 mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
echo 'Les informations supplémentaire sur la victime  ont été ajoutées dans la base de données.</br>';
$info_sid = mysql_insert_id();
  
  
$sql="INSERT INTO victime(matricule,questionnaire,region,departement,sousprefecture,secteur,village,zone,nom,pere,mere,doc,ndoc,autredoc,datarriv,postale,tel,cel,nom_rep,tel_rep,cel_rep,agent_sid,info_sid) VALUES('','".$questionnaire."','".$region."','".$departement."','".$sousprefecture."','".$secteur."','".$village."','".$zone."','".$nom."','".$pere."','".$mere."','".$doc."','".$ndoc."','".$autredoc."','".$datarriv."','".$postale."','".$tel."','".$cel."','".$nom_rep."','".$tel_rep."','".$cel_rep."','".$agent_sid."','".$info_sid."')";
// on insère les informations du formulaire dans la table
 mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  
echo 'Les informations sur les victimes ont été ajoutées dans la base de données.</br>';
 
  } 		
}
?>
0