|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
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 :
<?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"; } ?> Runcafre91 |
|
|
|
|
|
#2 |
|
Membre éprouvé
![]() Date d'inscription: janvier 2010
Localisation: Ile De La Réunion
Messages: 403
|
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.0 | Apache 2.2.11 | Php 5.3.0 | MySQL 5.1.36 Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
|
|
#3 | |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
Citation:
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 |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
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 :
Duplicata du champ '"0319156"' pour la clef 'PRIMARY'
voici le script au complet Code :
<?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) } } ?> Runcafre91 Dernière modification par runcafre91 ; 07/02/2010 à 14h08. |
|
|
|
|
|
#5 |
|
Membre éprouvé
![]() Date d'inscription: janvier 2010
Localisation: Ile De La Réunion
Messages: 403
|
A mon avis ce serait plutôt dans ce genre là :
Code :
<?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.0 | Apache 2.2.11 | Php 5.3.0 | MySQL 5.1.36 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. |
|
|
|
|
|
#6 |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
re,
Merci pour ce code lorsque j'applique le code avec mes modifications, j'ai un message d'erreur Code :
Duplicata du champ '"0319156"' pour la clef 'PRIMARY'
Pour l'udapte je ne met que certain champs a jour car risque de changement( mauvaise saisie) voici le code modifié Code :
<?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) } } ?> Je vous remercie de l'aide que vous pourriez m'apporter Runcafre91 |
|
|
|
|
|
#7 |
|
Nouveau membre du Club
![]() Date d'inscription: octobre 2007
Messages: 66
|
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), ...; 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 | |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
Citation:
je vous remercie pour cette solution, j'ai essayé de l'adapté a mon cas et cela me donne le script suivant : Code :
<?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"; } ?> Merci de votre aide Runcafre91 |
|
|
|
|
|
|
#9 | |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
Citation:
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 |
|
Membre Confirmé
![]() Date d'inscription: décembre 2008
Messages: 206
|
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 |
|
Nouveau membre du Club
![]() Date d'inscription: octobre 2007
Messages: 66
|
Bonjour,
en fait : Code :
// 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à : Code :
// declaration de tous mes variable de ma table facture $numero = $tableauValeurs[0].../... 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]) 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 :
$intitule = $tableauValeurs[2]; $montant= $tableauValeurs[3]; $session = $tableauValeurs[4]; $date_fact = $tableauValeurs[5]; dernier point qui bloque, la partie on duplicate : Code :
ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$tableauValeurs[13 Code :
ON DUPLICATE KEY UPDATE champ1 = VALUES(champ1) Code :
ON DUPLICATE KEY UPDATE facture = VALUES($intitule,$annee), $tableauValeurs[2],$tableauValeurs[13; Code :
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 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; dis moi si ça t'aide! Dernière modification par Djef-69 ; 18/02/2010 à 20h17. Motif: pas propre |
|
|
|
|
|
![]() |
||
Mise à jour à partir d'une importation de fichier texte
|
||
| Outils de la discussion | |
|
|