Bonsoir,

Je suis sur un script pour pouvoir inseré ou mettre à jour des données dans une table (facture) à partir d'un fichier texte.

Suite à un précédent post j'avais le choix entre deusolution (inclure les deux traitement à la suite avec une condition dans un seul fichier ou utilisé la fonction ON DUPLICATE KEY UPDATE)

Donc j'ia choisi la première solution pour la deuxième je sias pas trop comment faire malgré des recherches.

Donc voici mon script :

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
96
97
98
 
<?php
include('includes/inc_conexion.php');
include ('includes/traitement.php');
 
set_time_limit(0);
 
//Le chemin d'acces a ton fichier sur le serveur
$fichier = fopen("facture.txt", "r");
if ($fichier) {
	//tant qu'on est pas a la fin du fichier :
	while (!feof($fichier)) {
		// On recupere toute la ligne 
		$uneLigne = fgets($fichier, 4096);
		//On met dans un tableau les différentes valeurs trouvées (ici séparées par un ';') 
		$tableauValeurs = explode(";", $uneLigne);
		//requete sur ma base facture
		$req = "SELECT COUNT(*) AS total FROM facture WHERE facture = '".(int)$tableauValeurs[0]."'";
		$rs_fact = mysql_query($req);
		$total = mysql_fetch_array($rs_fact);
 
//*****************************************************************//
//	déclaration des champs de ma table  facture                         //
//*****************************************************************//
$id_numero="";
$facture=""; // Ma clef primaire
$intitule="";
$montant="";
$session="";
$date_fact="";
$date_echeance="";
$type_fact="";
$relance="";
$l_01="";
$l_02="";
$l_03="";
$l_04="";
$annee="";
 
//***************************************************************//
 
		if ((int)$total['total'] <= 0) {
			// Ligne / Facture inexistante : Insertion
			// On crée la requete pour inserer les donner (ici il y a 14 champs donc de [0] a [13]) 
			// -> Je suppose que le 1er champ soit la clé primaire
			// -> et en autoincrement.
			// -> Je ne le mets pas : On laisse la BDD lui accorder un nouvel ID
			$sql = "INSERT INTO facture (id_numero,facture,intitule,montant,session,date_fact,date_echeance,type_fact,relance,l_01,l_02,l_03,l_04,annee) VALUES (
				'".addslashes($tableauValeurs[0])."', 
				'".addslashes($tableauValeurs[1])."', 
				'".addslashes($tableauValeurs[2])."', 
				'".addslashes($tableauValeurs[3])."', 
				'".addslashes($tableauValeurs[4])."', 
				'".addslashes($tableauValeurs[5])."', 
				'".addslashes($tableauValeurs[6])."', 
				'".addslashes($tableauValeurs[7])."', 
				'".addslashes($tableauValeurs[8])."', 
				'".addslashes($tableauValeurs[9])."', 
				'".addslashes($tableauValeurs[10])."', 
				'".addslashes($tableauValeurs[11])."',
				'".addslashes($tableauValeurs[12])."',
				'".addslashes($tableauValeurs[13])."')";
			$req = mysql_query($sql) or die(mysql_error());
 
			//vérification et envoi d'une réponse à l'utilisateur 
			if ($req) {
				echo "Ajout dans la base de données effectué avec succès";
			}
			else {
				echo "Echec dans l'ajout dans la base de données";
			}
 
		}
		else {
			// Ligne / Facture présente : Mise à jour
			// Requete de mise à jour de la facture existante
			$req = "UPDATE facture SET 
				'id_societe = ".addslashes($tableauValeurs[0])."', 
				'intitule = ".addslashes($tableauValeurs[2])."', 
				'montant = ".addslashes($tableauValeurs[3])."', 
				'session = ".addslashes($tableauValeurs[4])."', 
				'date_fact = ".addslashes($tableauValeurs[5])."', 
				'date_echeance = ".addslashes($tableauValeurs[6])."', 
				'type_fact = ".addslashes($tableauValeurs[7])."', 
				'relance = ".addslashes($tableauValeurs[8])."', 
				'l_01 = ".addslashes($tableauValeurs[9])."', 
				'l_02 = ".addslashes($tableauValeurs[10])."', 
				'l_03 = ".addslashes($tableauValeurs[11])."', 
				'l_04 = ".addslashes($tableauValeurs[12])."',
				'annee = ".addslashes($tableauValeurs[13])."'
				WHERE facture = '".(int)$tableauValeurs[1]."'";
			$req = mysql_query($sql) or die(mysql_error());
		}
 
		// la ligne est finie donc on passe a la ligne suivante (boucle)
	}
}
?>
Mais lorsque j'execute le script j'ai droit a un beau duplicata

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Duplicata du champ '0319156' pour la clef 'PRIMARY'
Normalement le script est supposer faire un udapte dans ce cas afin de mettre les elements à jour.
Deplus je veux mettre que certain champs à jours.

Je vous remercie de votre aide

Runcafre91