Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/01/2010, 11h42   #1
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
Par défaut Mise à jour à partir d'une importation de fichier texte

Bonjour,

Cela fait quelques jours que je travail sur un script de mise a jour des donnée dans une table dans mysql/php. Le script de base fonctionne correctement lors de l'insertion, je voudrais ajouter un test afin de pouvoir mettre à jour certaine ligne en cas de modifications
donc j'aurais deux cas si l'enregistrement existe donc j'udapte les mise à jour et s'il n'existe pas alors je fais un insertion

Comme tout cela se passe par un fichier je ne sais pas trop comment faire. Voici le code que j'ai commencer a réaliser

Code :
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
 
<?php
include('inc_conexion.php');
include ('traitement.php');
 
set_time_limit(0); 
 
//requete sur ma base facture
$req=("SELECT * FROM facture ORDER BY id_numero");
$requete = mysql_query( $req ) or die(mysql_error());
 
 
//Le chemin d'acces a ton fichier sur le serveur 
$fichier = fopen("../facture.txt", "r"); 
 
//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 differentes valeurs trouvés (ici séparées par un ';') 
 
$tableauValeurs = explode(";", $uneLigne); 
 
 // création d'un requete de mise à jour
 
 
 
// On crée la requete pour inserer les donner (ici il y a 14 champs donc de [0] a [13]) 
$sql="INSERT into facture 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()); 
 
 
 
// la ligne est finie donc on passe a la ligne suivante (boucle) 
} 
//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"; 
} 
 
?>
Je vous remercie de l'aide que vous pourriez m'apporter car le temps presse et je dois finaliser le tout d'ici la semaine prochaine

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 13h54   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 238
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 238
Points : 2 591
Points : 2 591
Salut

Avant tout, pourquoi mettre une facture dans un fichier txt alors qu'il faudra y insérer les données dans la Bdd après ?
Ne serait il pas mieux d'insérer la facture directement dans la Bdd ?

Si c'est une certaine contrainte qui oblige à mettre une facture dans un fichier, alors un fichier type XML serait plus approprié non ? Pour la simple raison qu'il est possible de lancer une requête (xpath) dans un xml.

Mise à part cette parenthèse ...
$tableauValeurs[0] (1,2,3 ...etc ...) sont les données, et théoriquement toujours ordonnées de la même manière, non ?
Il doit être possible de lancer un SELECT pour vérifier si le N° de facture existe déjà.
Un truc du genre :
SELECT COUNT(*) AS total FROM facture WHERE numero_facture = $tableauValeurs[0]
__________________
Win XP | WampServer 2.2 | Apache 2.2.21 | Php 5.3.8 | MySQL 5.5.16
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 14h20   #3
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
Citation:
Envoyé par RunCodePhp Voir le message
Salut

Avant tout, pourquoi mettre une facture dans un fichier txt alors qu'il faudra y insérer les données dans la Bdd après ?
Ne serait il pas mieux d'insérer la facture directement dans la Bdd ?

Si c'est une certaine contrainte qui oblige à mettre une facture dans un fichier, alors un fichier type XML serait plus approprié non ? Pour la simple raison qu'il est possible de lancer une requête (xpath) dans un xml.

Mise à part cette parenthèse ...
$tableauValeurs[0] (1,2,3 ...etc ...) sont les données, et théoriquement toujours ordonnées de la même manière, non ?
Il doit être possible de lancer un SELECT pour vérifier si le N° de facture existe déjà.
Un truc du genre :
SELECT COUNT(*) AS total FROM facture WHERE numero_facture = $tableauValeurs[0]
Merci pour cette solution.

Je vais l'appliquer et voir ce que pourrais finaliser ce code en faisant une struture condition pour l'udapte.

allé la rényon

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 21h35   #4
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
Bonjour,

J'ai un script pourla mise à jour des donnée dans une base de nonnée mysq grace à un fichier text

J'ai ke script suivant mais elle ne fonctionne pas j'ai le mesage d'erreur suivant :
Code :
1
2
3
 
 
&#65279;Duplicata du champ '"0319156"' pour la clef 'PRIMARY'
Pourriez vous m'aider sur ce problème

voici le script au complet

Code :
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
 
<?php
include('inc_conexion.php');
include ('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[1]."'";
		$rs_fact = mysql_query($req);
		$total = mysql_fetch_array($rs_fact);
 
		if ((int)$total['total'] <= 0) {
			// On crée la requete pour inserer les données (ici il y a 14 champs donc de [0] a [13]) 
 
			$sql="INSERT into facture 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 
				'".addslashes($tableauValeurs[2])."', 
				'".addslashes($tableauValeurs[3])."', 
				'".addslashes($tableauValeurs[4])."', 
				'".addslashes($tableauValeurs[5])."', 
				'".addslashes($tableauValeurs[6])."', 
				'".addslashes($tableauValeurs[7])."', 				
				'".addslashes($tableauValeurs[13])."' )
				WHERE champ1 = '".(int)$tableauValeurs[1]."'";
			$req = mysql_query($sql) or die(mysql_error());
		}
 
		// la ligne est finie donc on passe a la ligne suivante (boucle)
	}
}
?>
Merci de l'aide que vous pourriez m'apporter

Runcafre91

Dernière modification par runcafre91 ; 07/02/2010 à 14h08.
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2010, 05h33   #5
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 238
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 238
Points : 2 591
Points : 2 591
A mon avis ce serait plutôt dans ce genre là :
Code :
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
include('inc_conexion.php');
include ('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);
 
		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 (champ1, ... etc ..., champ14)
				VALUES ('".addslashes($tableauValeurs[1])."', 
				... etc ...
				'".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 societe
				SET 'champ2 = ".addslashes($tableauValeurs[1])."',
				... etc ...
				'champ14 = ".addslashes($tableauValeurs[13])."' )
				WHERE champ1 = '".(int)$tableauValeurs[0]."'";
			$req = mysql_query($sql) or die(mysql_error());
		}
 
		// la ligne est finie donc on passe a la ligne suivante (boucle)
	}
}
?>
__________________
Win XP | WampServer 2.2 | Apache 2.2.21 | Php 5.3.8 | MySQL 5.5.16
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Dernière modification par RunCodePhp ; 01/02/2010 à 05h48.
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 14h17   #6
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
re,

Merci pour ce code

lorsque j'applique le code avec mes modifications, j'ai un message d'erreur
Code :
 &#65279;Duplicata du champ '"0319156"' pour la clef 'PRIMARY'
Ma clef primaire est la deuxieme valeur du tableau soi $tableauValeurs[1]
Pour l'udapte je ne met que certain champs a jour car risque de changement( mauvaise saisie)

voici le code modifié

Code :
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
 
 
<?php
include('inc_conexion.php');
include ('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[1]."'";
		$rs_fact = mysql_query($req);
		$total = mysql_fetch_array($rs_fact);
 
		if ((int)$total['total'] <= 0) {
			// On crée la requete pour inserer les données (ici il y a 14 champs donc de [0] a [13]) 
 
			$sql="INSERT into facture 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 
				'".addslashes($tableauValeurs[2])."', 
				'".addslashes($tableauValeurs[3])."', 
				'".addslashes($tableauValeurs[4])."', 
				'".addslashes($tableauValeurs[5])."', 
				'".addslashes($tableauValeurs[6])."', 
				'".addslashes($tableauValeurs[7])."', 				
				'".addslashes($tableauValeurs[13])."' )
				WHERE $tableauValeurs[1] = '".(int)$tableauValeurs[1]."'";
			$req = mysql_query($sql) or die(mysql_error());
		}
 
		// la ligne est finie donc on passe a la ligne suivante (boucle)
	}
}
?>
J'ai utilisé d'importer un fichier text, car elle me sont fourmis par différentes personnes avec la même trame à chaque fois

Je vous remercie de l'aide que vous pourriez m'apporter

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 15h51   #7
Membre régulier
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 80
Points : 80
bonjour,

y'a un truc qui peut être utile si dans ton fichier à importer tu as une clef que tu peux stocker en base te permettant d'identifier de façon unique un enregistrement (cles primaire par exemple ou autre, dépend de tes contraintes... le principal c qu'elle soit déclaré en index unique.)

dans ce cas tu peux faire :
Code :
INSERT INTO projet ( champ1,...) Values (valeur1,...) ON DUPLICATE KEY UPDATE champ1 = VALUES(champ1), ...;
qui te permet d'inserer un enregistrement si celui-ci n'existe pas ou de le mettre à jour si celui-ci existe en une requête.

je rajouterais que côté perf je serais toi j'utiliserai mysqli ou pdo... enfin, ce que tu préférera celui dont la syntaxe te paraitra la plus simple! mais surtout les requêtes préparées qui non seulement vont te simplifier la vie côté syntaxe mais en plus est imbatable côté perf surtout dans ce genre de traitement!
Djef-69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2010, 16h51   #8
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
Citation:
Envoyé par Djef-69 Voir le message
bonjour,

y'a un truc qui peut être utile si dans ton fichier à importer tu as une clef que tu peux stocker en base te permettant d'identifier de façon unique un enregistrement (cles primaire par exemple ou autre, dépend de tes contraintes... le principal c qu'elle soit déclaré en index unique.)

dans ce cas tu peux faire :
Code :
INSERT INTO projet ( champ1,...) Values (valeur1,...) ON DUPLICATE KEY UPDATE champ1 = VALUES(champ1), ...;
qui te permet d'inserer un enregistrement si celui-ci n'existe pas ou de le mettre à jour si celui-ci existe en une requête.

je rajouterais que côté perf je serais toi j'utiliserai mysqli ou pdo... enfin, ce que tu préférera celui dont la syntaxe te paraitra la plus simple! mais surtout les requêtes préparées qui non seulement vont te simplifier la vie côté syntaxe mais en plus est imbatable côté perf surtout dans ce genre de traitement!
Bonjour,

je vous remercie pour cette solution, j'ai essayé de l'adapté a mon cas et cela me donne le script suivant :

Code :
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
 
<?php
include('inc_conexion.php');
include ('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);
 
//********************************************************************************************
// declaration de tous mes variable de ma table facture		
$numero = $tableauValeurs[0]; // ma clef secondaire reliant une autre table (societe)
$facture = $tableauValeurs[1]; // Ma clef primaire dans ma table facture
$intitule = $tableauValeurs[2];
$montant= $tableauValeurs[3];
$session = $tableauValeurs[4];
$date_fact = $tableauValeurs[5];
$echeance = $tableauValeurs[6];
$type_fact = $tableauValeurs[7];
$relance = $tableauValeurs[8];
$l_01 = $tableauValeurs[9];
$l_02 = $tableauValeurs[10];
$l_03 = $tableauValeurs[11];
$l_04 = $tableauValeurs[12];
$annee = $tableauValeurs[13];
//*******************************************************************************************
 
$req = INSERT INTO facture ( $numero,$facture,$intitule,$montant,$session,$date_fact,$echeance,$type_fact,$relance,$l_01,$l_02,$l_03,$l_04,$annee) Values ($tableauValeurs[0],$tableauValeurs[1]$tableauValeurs[2]$tableauValeurs[3]$tableauValeurs[4]$tableauValeurs[5]$tableauValeurs[6]$tableauValeurs[7]$tableauValeurs[8]$tableauValeurs[9]$tableauValeurs[10]$tableauValeurs[11]$tableauValeurs[12]$tableauValeurs[13]) 
ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$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";
			}
?>
ce script ne fonctionne pas et je vois pas trop le pourquoi du comment ou alors je l'ai mal fais

Merci de votre aide

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 15h38   #9
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
Citation:
Envoyé par runcafre91 Voir le message
Bonjour,

je vous remercie pour cette solution, j'ai essayé de l'adapté a mon cas et cela me donne le script suivant :

Code :
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
 
<?php
include('inc_conexion.php');
include ('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);
 
//********************************************************************************************
// declaration de tous mes variable de ma table facture		
$numero = $tableauValeurs[0]; // ma clef secondaire reliant une autre table (societe)
$facture = $tableauValeurs[1]; // Ma clef primaire dans ma table facture
$intitule = $tableauValeurs[2];
$montant= $tableauValeurs[3];
$session = $tableauValeurs[4];
$date_fact = $tableauValeurs[5];
$echeance = $tableauValeurs[6];
$type_fact = $tableauValeurs[7];
$relance = $tableauValeurs[8];
$l_01 = $tableauValeurs[9];
$l_02 = $tableauValeurs[10];
$l_03 = $tableauValeurs[11];
$l_04 = $tableauValeurs[12];
$annee = $tableauValeurs[13];
//*******************************************************************************************
 
$req = INSERT INTO facture ( $numero,$facture,$intitule,$montant,$session,$date_fact,$echeance,$type_fact,$relance,$l_01,$l_02,$l_03,$l_04,$annee) Values ($tableauValeurs[0],$tableauValeurs[1]$tableauValeurs[2]$tableauValeurs[3]$tableauValeurs[4]$tableauValeurs[5]$tableauValeurs[6]$tableauValeurs[7]$tableauValeurs[8]$tableauValeurs[9]$tableauValeurs[10]$tableauValeurs[11]$tableauValeurs[12]$tableauValeurs[13]) 
ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$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";
			}
?>
ce script ne fonctionne pas et je vois pas trop le pourquoi du comment ou alors je l'ai mal fais

Merci de votre aide

Runcafre91
Bonjour,

Y a t'il quelqu'un qui pourrais m'aider sur ce script que je dois mettre en place dans 2 jours

Merci de votre aide

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2010, 12h55   #10
Membre du Club
 
Homme Stéphane A.
Inscription : décembre 2008
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Stéphane A.
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : décembre 2008
Messages : 286
Points : 67
Points : 67
Bonjour,

Je relance ce post car j'ai pu négocier un delai pour finaliser ce projet, mais pour l'instant je bloque toujours ce point qui est très important.

Je vous remercie de l'aide que vous pourriez m'apporter

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2010, 20h16   #11
Membre régulier
 
Inscription : octobre 2007
Messages : 89
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 89
Points : 80
Points : 80
Bonjour,

en fait :

Code :
1
2
3
4
// 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);
Là tu récupère une ligne et tu met dans ta variable tableau les valeurs que tu dois insérer dans ta base de donnée, jusqu'ici tout va bien.

là :

Code :
1
2
// declaration de tous mes variable de ma table facture		
$numero = $tableauValeurs[0].../...
tu mets les valeurs à insérer dans ta base dans des variables permettant de plus simplement les identifiers, bien, ça facilite la relecture du code et la reprise par la suite...

par contre y'a comme un problème sur la requète :

1er point :

Code :
Values ($tableauValeurs[0],$tableauValeurs[1]$tableauValeurs[2]$tableauValeurs[3]$tableauValeurs[4]$tableauValeurs[5]$tableauValeurs[6]$tableauValeurs[7]$tableauValeurs[8]$tableauValeurs[9]$tableauValeurs[10]$tableauValeurs[11]$tableauValeurs[12]$tableauValeurs[13])
il manque quelques virgules dans la partie VALUES (...,...,...,...)...

2 ème point moins grave : pourquoi tu réutilise ton tableau alors que tu as crée des variables stockant les valeurs à insérer???
Code :
1
2
3
4
$intitule = $tableauValeurs[2];
$montant= $tableauValeurs[3];
$session = $tableauValeurs[4];
$date_fact = $tableauValeurs[5];
du coup tes variables n'ont plus lieu d'exister et là en gros tu gache de la mémoire pour peu d'avantage!

dernier point qui bloque, la partie on duplicate :

Code :
ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$tableauValeurs[13
facture c'est ta table, ce que tu dis avec ce genre de requete c'est, quand tu as un enregistrement qui existe déja (identifié par le biais de la clé pour faire simple) tu met a jour le champ truc avec la valeur de truc... ce que je voulais dire par :

Code :
ON DUPLICATE KEY UPDATE champ1 = VALUES(champ1)
tu trouve pas que la syntaxe est légèrement différente :

Code :
ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$tableauValeurs[13;
un exemple :

Code :
1
2
3
4
5
INSERT INTO personnes (`Num_Individu`, `fk_entreprise`, `nom`, `prenom`)
                VALUES ( $numIndividu, $entreprise, $nom, $prenom) 
ON DUPLICATE KEY UPDATE
               `Num_Individu` = VALUES(`Num_Individu`),`fk_entreprise` = VALUES(`fk_entreprise`),
            `nom` = VALUES(`nom`),  `prenom` = VALUES(`prenom`);
dans cet exemple `Num_Individu` est ma clé qui permet d'identifier l'individu, ce champ doit contenir des valeurs unique avec l'index correspondant c'est lui qui permet à mysql de déterminer s'il doit faire un INSERT ou un UPDATE.

Dans ta clause ON DUPLICATE tu mélange alégrement nom de champ et valeur à insérer, ce qui pose pb!

Code :
VALUES($intitule,$annee), $tableauValeurs[2],$tableauValeurs[13;
en supposant que $intitule contient le nom du champ!, je serais toi je mettrais le nom du champ en dur, à moins que tu veuille simplifier le cas ou tu changerais régulièrement le nom des champs de ta base, ce que je ne te conseille pas trop...

dis moi si ça t'aide!

Dernière modification par Djef-69 ; 18/02/2010 à 20h17. Motif: pas propre
Djef-69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web