IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mise à jour à partir d'une importation de fichier texte [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    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 : 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
     
    <?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

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    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]

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    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

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Duplicata du champ '"0319156"' pour la clef 'PRIMARY'
    Pourriez vous m'aider sur ce problème

    voici le script au complet

    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
     
    <?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

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    A mon avis ce serait plutôt dans ce genre là :
    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
     
    <?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)
    	}
    }
    ?>

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    re,

    Merci pour ce code

    lorsque j'applique le code avec mes modifications, j'ai un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     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 : 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
     
     
    <?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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Points : 108
    Points
    108
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
     
    <?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

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    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 : 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
     
    <?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

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2008
    Messages : 299
    Points : 103
    Points
    103
    Par défaut
    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

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Points : 108
    Points
    108
    Par défaut
    Bonjour,

    en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ON DUPLICATE KEY UPDATE champ1 = VALUES(champ1)
    tu trouve pas que la syntaxe est légèrement différente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$tableauValeurs[13;
    un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jours à partir d'une autre table
    Par k_boy dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/06/2013, 02h12
  2. mise à jour à partir d'une requête calculée
    Par christeldum dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 25/02/2009, 22h32
  3. Requête de mise à jour à partir d'une autre table
    Par clemced dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/02/2008, 11h58
  4. Mise à jour quotidienne d'une table via fichier texte
    Par chooky97150 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 31/08/2006, 22h00
  5. Requête Mise à jour à partir d'une autre table
    Par temar dans le forum Access
    Réponses: 2
    Dernier message: 17/05/2006, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo