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 :

Insertion et mise à jour dans une importation : partie non traitée [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 Insertion et mise à jour dans une importation : partie non traitée
    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

  2. #2
    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
    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
    Re,

    j'ai modifié mon fichier d'importation de cette manière, mais un problème, l'udapte ne fonctionne pas.

    j'ai fais test en vidant ma table pui en important a nouveau mon fichier, l'importation de dértoule bien car la base est vide, si je réimporte une seconde fois il me met duplicata du champ correspondant à ma clef primaire.

    Faut-il quez je modifi l'ordre dans ma base de donnée et mettre la clef primaire en premier au lieu du la deuxième position

    Je vous remercie de votre aide

    Runcafre91

  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
    Bonsoir, HELP,

    Qui pourrais m'aider sur ce script qui devra permettre de faire la mise à jour de ma base donnée dernier point de mon projet
    voici mon script qui fonctionne partiellement que pourles insertion et pour l'udapte il y a un problème


    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
     
     
    <?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);
     
    //*****************************************************************//
    //	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]) 
    			// -> Le 2eme champ c'est la clé primaire
    			$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])."', 
    				'".securite_bdd($tableauValeurs[2])."', 
    				'".securite_bdd($tableauValeurs[3])."', 
    				'".securite_bdd($tableauValeurs[4])."', 
    				'".securite_bdd($tableauValeurs[5])."', 
    				'".securite_bdd($tableauValeurs[6])."', 
    				'".securite_bdd($tableauValeurs[7])."', 
    				'".securite_bdd($tableauValeurs[8])."', 
    				'".securite_bdd($tableauValeurs[9])."', 
    				'".securite_bdd($tableauValeurs[10])."', 
    				'".securite_bdd($tableauValeurs[11])."',
    				'".securite_bdd($tableauValeurs[12])."',
    				'".securite_bdd($tableauValeurs[13])."')";
    			$reqt = mysql_query($sql) or die(mysql_error());
    			echo $req;
    			}
    			else 
    			{
    			// Ligne / Facture présente : Mise à jour
    			// Requete de mise à jour de la facture existante
    			$reqt = "UPDATE facture SET 
    				'id_numero = ".addslashes($tableauValeurs[0])."',
    				'intitule = ".securite_bdd($tableauValeurs[2])."', 
    				'montant = ".securite_bdd($tableauValeurs[3])."', 
    				'session = ".securite_bdd($tableauValeurs[4])."', 
    				'date_fact = ".securite_bdd($tableauValeurs[5])."', 
    				'date_echeance = ".securite_bdd($tableauValeurs[6])."', 
    				'type_fact = ".securite_bdd($tableauValeurs[7])."', 
    				'annee = ".securite_bdd($tableauValeurs[13])."'
    				WHERE facture = '".(int)$tableauValeurs[1]."'";
    			$req = mysql_query($reqt) or die(mysql_error());
    			echo $req;
    			}
    		}
    	}
    ?>


    Je vous remercie d'aide que vous pourriez m'apporter car cela fait déja plus de trois semaine que je suis sur ce problème

    Runcafre91

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    As-tu essayer d'afficher $total['total'], pour voir si c'est un problème de ta requête ou alors de la condition qui vient après ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    ton update marche pas car tu as un problème de quote au niveau des champs de type texte, ainsi qu'un problème au niveau du champ facture qui est entouré de quote alors que c'est un int.

    A mon avis sa devrait plutôt ressembler à sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $reqt = "UPDATE facture SET 
    				id_numero = '".addslashes($tableauValeurs[0])."', 
    				intitule = '".securite_bdd($tableauValeurs[2])."', 
    				montant = '".securite_bdd($tableauValeurs[3])."', 
    				session = '".securite_bdd($tableauValeurs[4])."', 
    				date_fact = '".securite_bdd($tableauValeurs[5])."', 
    				date_echeance = '".securite_bdd($tableauValeurs[6])."', 
    				type_fact = '".securite_bdd($tableauValeurs[7])."', 
    				annee = '".securite_bdd($tableauValeurs[13])."'
    				WHERE facture = ".(int)$tableauValeurs[1];

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    un petit plus concernant la requete ON DUPLICATE c'est très simple à utiliser à condition que facture soit bien une clef dans Mysql

    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
     
    $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])."', 
    				'".securite_bdd($tableauValeurs[2])."', 
    				'".securite_bdd($tableauValeurs[3])."', 
    				'".securite_bdd($tableauValeurs[4])."', 
    				'".securite_bdd($tableauValeurs[5])."', 
    				'".securite_bdd($tableauValeurs[6])."', 
    				'".securite_bdd($tableauValeurs[7])."', 
    				'".securite_bdd($tableauValeurs[8])."', 
    				'".securite_bdd($tableauValeurs[9])."', 
    				'".securite_bdd($tableauValeurs[10])."', 
    				'".securite_bdd($tableauValeurs[11])."',
    				'".securite_bdd($tableauValeurs[12])."',
    				'".securite_bdd($tableauValeurs[13])."')";
    $sql .= " ON duplicate KEY UPDATE id_numero = '".addslashes($tableauValeurs[0])."', 
    				intitule = '".securite_bdd($tableauValeurs[2])."', 
    				montant = '".securite_bdd($tableauValeurs[3])."', 
    				session = '".securite_bdd($tableauValeurs[4])."', 
    				date_fact = '".securite_bdd($tableauValeurs[5])."', 
    				date_echeance = '".securite_bdd($tableauValeurs[6])."', 
    				type_fact = '".securite_bdd($tableauValeurs[7])."', 
    				annee = '".securite_bdd($tableauValeurs[13])."'";
    En espérant que sa peut t'aider.

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

Discussions similaires

  1. Mise à jour dans une table de l'AS400
    Par Elise02 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 12/03/2009, 08h38
  2. mise à jour dans une table
    Par christeldum dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/02/2009, 09h16
  3. Insertion d'une mise à jour dans une création de vue
    Par Ptite_Tigresse dans le forum Langage SQL
    Réponses: 0
    Dernier message: 30/08/2007, 12h34
  4. Réponses: 2
    Dernier message: 14/05/2007, 10h45
  5. Mise à jour dans une table
    Par manucha dans le forum Oracle
    Réponses: 4
    Dernier message: 01/03/2007, 11h11

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