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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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
    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 éclairé
    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
    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 éclairé
    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
    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
    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 éclairé
    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
    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

+ 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