Mise a jour base de donnée a partir d'un fichier texte [Résolu]

ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 20 mai 2009 à 16:54 - Dernière réponse : ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention
- 25 mai 2009 à 16:54
Bonjour,
j'aimerais, à partir d'une page web ( caché ) pouvoir effectuer la mise à jour de ma base de donnée phpMyAdmin à l'aide d'un fichier texte que je génère dans un emplacement spécifique.
 Lorsque je clique sur un boutton dans la dite page, lorsque je rentre dessus simplement ou encore mieu tous les jours automatiquement à une certaine heure, mais je ne sais pas comment m'y prendre.

j'ai un petit bout de code qui me semble juste, pour charger mon fichier texte, mais je ne sais pas comment l'intégrer dans une page web
LOAD DATA LOCAL INFILE 'C:\\Mise a jour bdd\ListeArticles.txt'
 INTO TABLE `produits` FIELDS TERMINATED BY ';
' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'

Merci d'avance :)
Afficher la suite 

Votre réponse

21 réponses

Meilleure réponse
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 16:42
3
Merci
Ce n'est pas encore ça mais il y a du mieux :
<?php
//test de lecture du chier
$fp = fopen('ListeArticles.txt', 'r');
if (!$fp) {
echo 'Impossible d\'ouvrir le fichier somefile.txt';
}
while (false !($char fgetc($fp))) {
echo "$char\n";
}
// Définition des éléments nécessaires à la connexion sous formes de constantes
define("bd_Host" ,"localhost"); # adresse de la base de données
define("bd_Login","root" ); # login base de données
define("bd_Pass" ,"" ); # mot de passe base de données
define("bd_Base" ,"mabase" ); # nom de la base

// Ouviri une connexion
if ($mysql_link=@mysql_connect(bd_Host,bd_Login,bd_Pass))
{
if (!mysql_select_db (bd_Base))
{
echo"".
"Certains problèmes techniques empêchent la connexion ".
"avec la base de données. Nous nous en excusons.

";
exit();
}
}

$row=1;
$handle = fopen("ListeArticles.txt", "r");
//fonction pour les CSV détournée en TXT
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
{
$num = count($data);
echo " $num champs en ligne $row:

\n";
$row++;
for ($c =0; $c < $num; $c++)
{
echo $data[$c] . "
\n";
}
$rq="INSERT INTO produits (code, designation, famille, prixHT, prixTTC, Quantitetheo, quantitereel, quantitecomm, quantitefourniss) VALUES ('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]', '$data[8]')";
$result=mysql_query($rq);
if ($result)
{// Tout est OK
echo "Enregistrement OK

" ;
}
else
{// Ecrire éventuellement un message dans le fichier des erreurs
echo "".
"Enregistrement impossible à cause d'une erreur sytème. Toutes nos excuses.

";
}
}

mysql_close();
?>

C'est presque la limite de mes connaissances en PHP

Merci pyros49 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 83 internautes ce mois-ci

Commenter la réponse de pyros49
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 20 mai 2009 à 17:01
0
Merci
Salut

si simplement tu fais une requête mysql du type :
$requete="LOAD DATA LOCAL INFILE 'C:\\Mise a jour bdd\ListeArticles.txt' INTO TABLE `produits` FIELDS TERMINATED BY ';
' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'";
$result = mysql_query($requete);

Je sne suis pas certain du résultat

@+
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 09:31
0
Merci
Merci pour ta solution je l'ai essayée, mais j'ai une petite erreur au niveau de  ENCLOSED BY ' " '
Je pense qu'il n'aime pas trop ca, ou qu'il ne comprend pas qu'il s'agit du caractère " qui délimite les champs.
Car avec notepad++  le reste de mon code reste gris au lieu de se colorer en bleu(pour les balises par exemple, et si je rajoute un ' a la fin de la requete les couleurs reviennes.
   Donc jpense qu'il comprend pas le ' " ', et je voie pas comment contourner ca ou résoudre ce problème ^^"
Commenter la réponse de ashron54
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 10:55
0
Merci
Bonjour,

Une solution encore plus simple, c'est de faire faire le travail à PHPMyAdmin.
Tu l'ouvre et tu fais ta requête et il te propose à un moment d'éditer la rêquete équivalente au travail que tu viens de lui donner en php avec un bon vieux copier/coller dans ton code.

Salut
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 11:09
0
Merci
oui, j'ai essayer cette solution tout a l'heure.
Mais ca ne marche pas plus.

voila la requete qu'il em génère :
$requete = 'LOAD DATA LOCAL INFILE ''C:/Mise a jour bdd/ListeArticles.txt''
   REPLACE INTO TABLE `produits`
   FIELDS TERMINATED BY '';''
   ENCLOSED BY ''"''
   ESCAPED BY ''\\\\''
   LINES TERMINATED BY ''\\r\\n''';

et quand j'execute la page il me dit qu'il y a une erreur a la premiere ligne $requete = .......

Parse error: parse error in c:\program files\easyphp1-8\www\maj.php on line 11

J'ai essayer de nombreuse solution, remplacer les caractères par les codes html ou ASCII ( &quot; pour " par exemple) mais rien n'y fait
 Le SGBD ne me génère pas la bonne requete php, c'est fort quand meme ^^
Par contre si je l'éxecute sur phpmyadmin en local, elle fonctionne correctement.
et si j'execute cette meme requete dans Phpmyadmin mais pour mettre cette fois en ligne mes données, il me dit qu'il ne trouve pas C:/Mise a jour......

Donc je suis pas très avancé
Commenter la réponse de ashron54
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 11:21
0
Merci
Est ce que tu peux mettre en ligne une fausse (remplace leur valeurs par des aaaaa) ligne de ton fichier texte ainsi que la structure de ta base pour que je fasse un test chez moi ?

Comment est ce que tu créer ton fichier texte ?
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 11:37
0
Merci
mon fichier texte est généré par Microsoft Access, j'exporte les données de Ciel vers Excel, puis vers Acces ensuite, c'est peut etre pas la meilleure méthode mais ca marchait jusqu'à maintenant.
ensuite la structure de la base est assez simple c'est designation, prix , quantité
Enfin il a plus de champs que ca mais ils ne sont pas utilisé pour ma requete.

je te met ici un extrait du fichier texte avec l'ordre de tous les champs qui sont séparer par un ;

code - designation - famille - prixHT - prixTTC - quantité théorique - quantité réel - quantité commande - quantité commande fournisseur

16,00;"Bla Bla Bla";"PIECES";98,88;118,40;;;;
10343604179,00;"TEST TEST TEST";"PIECES";16,72;20,00;1,00;1,00;;
10343832640,00;"ESSAI TEST BIS";"PIECES";35,95;43,00;1,00;1,00;;

en local j'utilise EasyPHP 1.8 je précise
et la tout le code de ma page :

<html>
 
  
  <?php
  
   $connexion = mysql_connect("localhost","root","")
    or die("Connexion au serveur impossible");
   $db=mysql_select_db(MaBase",$connexion)
    or die("Non connexion à la base de donnée");
  
   $requete = 'LOAD DATA LOCAL INFILE ''C:/Mise a jour bdd/ListeArticles.txt''
   REPLACE INTO TABLE `produits`
   FIELDS TERMINATED BY '';''
   ENCLOSED BY ''"''
   ESCAPED BY ''\\\\''
   LINES TERMINATED BY ''\\r\\n''';
  
   $result = mysql_query($requete) or die('Erreur SQL !'.$sql.'
'.mysql_error());
   
   mysql_close();
  ?>
  
</html>

Voila je pense que tout est dit ^^
j'espère que tu pourras m'aider.
Commenter la réponse de ashron54
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 12:02
0
Merci
Dans un premier temps est ce que le guillement après MaBase ne te génère pas une erreure ?
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 14:04
0
Merci
oops, ca c'est une erreur de copier coller t'inquiète pas,
C'est quand j'ai changer le nom de ma base en postant, pour pas divulguer le nom de la base que j'utilise.
mais sur ma page a moi c'est bien connexion("MaBase" ......
Donc ca ne vient pas de la
Commenter la réponse de ashron54
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 14:12
0
Merci
Maintenant est ce que tu peux me dire ce qui est SmallInt, VARCHAR.... ?
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 14:15
0
Merci
J'ai tout mis en VARCHAR car il me faisait quelques erreur pour certains champ
Notament le stock et le code, il me rajoute des décimal ,00 quand je génère le fichier texte.
Mais ca c'est peut etre un détail que j'essayerais de résoudre plus tard, car ça ne gène pas trop pour l'instant.
Commenter la réponse de ashron54
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 14:46
0
Merci
en faite voila exactement la requete que me génère phpmyadmin
$sql = 'LOAD DATA LOCAL INFILE ''C:/Program Files/EasyPHP1-8\\\\tmp\\\\php3B.tmp'' REPLACE INTO TABLE `produits` FIELDS TERMINATED BY '';'' ENCLOSED BY ''"'' ESCAPED BY ''\\\\'' LINES TERMINATED BY ''\\r\\n''';

le chemin d'acces la va vers un fichier php3B.tmp qui ne figure pas dans mon dossier tmp, le fichier a charger estau chemin d'acces que j'ai utiliser jusqu'à maintenant, à savoir C:/Mise a jour bdd/ListeArticles.txt

Si ca peut t'aider à comprendre :)
Commenter la réponse de ashron54
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 22 mai 2009 à 15:37
0
Merci
Salut,

Ca me semble bien lourd tout ça !!

Pourquoi pas comme ça plutôt :
$sql = "LOAD DATA LOCAL INFILE 'C:/Mise a jour bdd/ListeArticles.txt'
REPLACE INTO TABLE `produits`
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
ESCAPED BY '\\\'
LINES TERMINATED BY '\\r\\n'";

Cordialement,

Kohntark -
Commenter la réponse de kohntark
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 15:44
0
Merci
maintenant j'ai droit à une nouvelle insulte lol : erreur SQL et il me dit que cette commande n'existe pas, en plus il m'écrit mon code SQL dans la page...

Erreur SQL !LOAD DATA LOCAL INFILE 'C:/MaJbdd/ListeArticles.txt' REPLACE INTO TABLE `produits` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'
Cette commande n'existe pas dans cette version de MySQL

Je vais aller me pendre
Commenter la réponse de ashron54
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 16:25
0
Merci
j'ai un début de solution !!!!!
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 16:28
0
Merci
Ah super ^^
fait moi signe si tu trouves quelque chose :)
Moi je suis parti me torturer l'esprit ailleurs, en faisant un petit chat et une inscription de client ^^

Merci pour votre aide en tout cas :D
Commenter la réponse de ashron54
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 17:48
0
Merci
En effet ya du mieu, ca affiche mon fichier texte dans la page maintenant ^^
je sais pas si ca te fait pareil. Jpense qu'on est pas loin
Commenter la réponse de ashron54
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 17:53
0
Merci
mais au moins, les enregistrements du fichiers texte vont dans la base de donnée !!!!
Faut juste que je trouve comment modifier l'affichage sur la page maintenant :)

Merci beaucoup
Commenter la réponse de ashron54
pyros49 26 Messages postés dimanche 29 mars 2009Date d'inscription 9 septembre 2013 Dernière intervention - 22 mai 2009 à 17:54
0
Merci
Moi c'est pareil, je pense que la suite c'est de faire rentrer tes données dans ta table sous format CSV et non TXT.

Je fais une pause pour le week-end, alors à lundi.
Commenter la réponse de pyros49
ashron54 39 Messages postés mardi 19 mai 2009Date d'inscription 26 juin 2009 Dernière intervention - 22 mai 2009 à 17:59
0
Merci
Ouais je vais regarder comment faire la conversion parce que je ne m'y connais pas trop en CSV, mais c'est ce que je devait cocher dans Phpmyadmin pour qu'il m'importe correctement mon fichier texte manuellement.

je marque ta réponse comme accepté :)
Bon week end.
Commenter la réponse de ashron54

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Mise a jour base de donnée a partir d'un fichier texte - page 2