ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009
-
20 mai 2009 à 16:54
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009
-
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'
pyros49
Messages postés26Date d'inscriptiondimanche 29 mars 2009StatutMembreDernière intervention 9 septembre 2013 22 mai 2009 à 16:42
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
pyros49
Messages postés26Date d'inscriptiondimanche 29 mars 2009StatutMembreDernière intervention 9 septembre 2013 20 mai 2009 à 17:01
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);
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 09:31
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 ^^"
pyros49
Messages postés26Date d'inscriptiondimanche 29 mars 2009StatutMembreDernière intervention 9 septembre 2013 22 mai 2009 à 10:55
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 11:09
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 ( " 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......
pyros49
Messages postés26Date d'inscriptiondimanche 29 mars 2009StatutMembreDernière intervention 9 septembre 2013 22 mai 2009 à 11:21
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 ?
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 11:37
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 ;
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.
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 14:04
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
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 14:15
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.
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 14:46
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
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 22 mai 2009 à 15:37
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'";
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 15:44
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
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 16:28
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 ^^
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 17:53
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 :)
ashron54
Messages postés39Date d'inscriptionmardi 19 mai 2009StatutMembreDernière intervention26 juin 2009 22 mai 2009 à 17:59
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.