Comment Importer automatiquement un fichier cvs dans ma tabl

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comment Importer automatiquement un fichier cvs dans ma tabl

Re: Comment Importer automatiquement un fichier cvs dans ma

par Ripat » 01 mai 2012, 09:11

Curl va "simplement" émuler l'envoi du formulaire de login en POST, stocker le cookie de session et ensuite faire le téléchargement du fichier. J'ai mis des guillemets à "simplement" car il te faudra:
  • analyser les sources de la page de login
  • extraire *tous* les champs input avec leurs attributs
  • faire la même chose sur la page téléchargement (ici ce sera peut-être un simple GET)
  • mettre tout ça en musique avec php-curl
Impossible à tester si on a pas ton login. Tu te retrouves donc un peu seul pour valider tes tentatives. Cherche sur Google des exemples de l'envoi de formulaires par php-curl. En précisant:
php curl formulaire session cookie
php curl form session cookie

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 30 avr. 2012, 21:11

Bonjour

comment faire avec le curl ?

Car voici le point que je souhaite améliorer la MàJ manuelle qui est (trop longue)

Description de la problématique:

En simple : j'ai besoin de récupérer des données d'une appli qui tourne sur intranet un fichier csv pour le transférer dans ma table phpmyadmin.

Aujourd’hui voici comment je procède manuellement 1-/je me connecte manuellement 2-/ je fais l'export manuellement 3-/j 'ouvre le fichier manuellement 4-/je le sauvegarde manuellement en csv puis je le place dans mon répertoire localhost manuellement (fastidieux) car 3 fois / jrs

Mon souhait si possible : le faire automatiquement depuis mon appli à partir d 'un bouton sous forme de lien hypertexte html par exemple.
sans le faire manuellement.

Re: Comment Importer automatiquement un fichier cvs dans ma

par Ripat » 26 avr. 2012, 18:22

Authentification par formulaire donc.

Un seul script devrait suffire mais la promenade risque d'être difficile: curl pour l'émulation de login et de téléchargement suivi par l'insertion dans ta bdd.

Possible mais complexe si tu n'as jamais fait de curl en PHP.

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 25 avr. 2012, 23:12

Merci moogli je viens de comprendre :

1-/ Comment le faire en auto c'est d'avoir un accès quelconque sur l'application qui génère le fichier (par réseau).
La fait voir avec l'éditeur du logiciel --> j'utilise googlechrome

Aujourd’hui voici comment je procède je me connecte à http + login je fais l'export
j 'ouvre le fichier je le sauvegarde en csv puis je le place dans mon répertoire localhost (trop long).

2-/ À partir de la un script php qui récupère le fichier et fait l'insertion --> se serait bien mais comment faire ? :(

Ensuite une tâche cron (sous Linux) ou une tâche plannifiée (windows) qui lance le script mais comment faire ? :( j'aimerai bien apprendre

Merci pour votre aide

Re: Comment Importer automatiquement un fichier cvs dans ma

par moogli » 25 avr. 2012, 09:17

1/ Seul l'éditeur du soft pourra t'indiqué si cela est possible. a priori c'est du web mais si tu n'a pas la main dessus ce n'est pas la peine (a moins que tu essais de simuler la connexion à l'espace et l'utilisation de la bonne page)
2/La ça dépend de ce que tu peux ou pas avoir, si tu fait le dl à la main effectivement mettre le fichier dans un répertoire précis et utiliser une tache auto (planifiée ou cron) pour lancer le script.

Y a pas de script tous fait pour tout.

Il faut voir avec l'éditeur du soft.

@+

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 24 avr. 2012, 21:59

1-/exporter le fichier de l'appli qui génére un csv éviter de la faire à la main :cry: :cry:

2-/le placer au bon endroit exemple chaque matin faire import auto à 8h00. faut il faire un boot sur url=http://ect.... ? je c pas ?

Y a t il un sript pour faire un import dans ma table sans que je sauvegarde à la main le fichier que je demande à l appli de me généré chaque matin (trop de tps de perdu)

merci de votre aide

Re: Comment Importer automatiquement un fichier cvs dans ma

par moogli » 24 avr. 2012, 12:19

l appli génère le fichier suite à demande fairte dans l'appli.... comme tte les aplli html ou php etc..
ça dépend de ce que l'on appel demande

Un flux RSS c'est quoi ? la même chose en xml, et le xml peu être généré à la demande. et cette demande peux être fait par un script

Au final c'est ce que l'on appel un service web.

S'il n'est pas possible de "piloter" l'application a "distance" ce ne sera pas possible.
si c'est un site web il est peu être possible d’accéder directement a script qui généré le fichier.
dans ce cas il faudra enregistrer temporairement le fichier sur ton site et lancer ce que tu a fait avant.

sinon ben un clic pour avoir le fichier et trois quatre pour l'upload et traitement.

@+

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 23 avr. 2012, 22:44

Merci moogli pour l info

Peux-tu détaillé le moyen de le faire en auto ?

--> avoir un accès quelconque sur l'application le seul accès c la barre des taches http:\applicationdemonécole.iut

l appli génère le fichier suite à demande fairte dans l'appli.... comme tte les aplli html ou php etc..

une tâche cron c'est quoi ?

Re: Comment Importer automatiquement un fichier cvs dans ma

par moogli » 22 avr. 2012, 18:02

Le seul moyen de le faire en auto c'est d'avoir un accès quelconque sur l'application qui génère le fichier (par réseau).
La fait voir avec l'éditeur du logiciel.

À partir de la un script php qui récupère le fichier et fait l'insertion.
Ensuite une tâche cron (sous Linux) ou une tâche plannifiée (windows) qui lance le script.

@+

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 22 avr. 2012, 16:14

Merci Ripa pour ton aide sa fonctionne en localhost !

Comment puis-je automatiser ce que je fais manuellement: c'est à dire

1-/exporter le fichier tfi2003_contacts.csv de l'appli source en auto de mon école qui génére un csv après requête manuelle. En simple commander l'export depuis mon appli sans le faire manuellement.

2-/Le faite de générer l'export tfi2003_contacts.csv et enregistrer sous ect... trop long.

je cherche à automatisé ces tâches.

En simple cliquer sur mon bouton puis allez importer tfi2003_contacts.csv ce que je fais manuellement le fichier et le placer au bon endroit exemple chaque matin faire import auto à 8h00.

Merci pour votre aide les pro!

Re: Comment Importer automatiquement un fichier cvs dans ma

par Ripat » 22 avr. 2012, 10:28

Tout d'abord, je vois un premier problème dans ton fichier CSV, sa première colonne est aussi la clé primaire (et donc unique) de la table cible. Un LOAD DATA INFILE produira une erreur logique de DUPLICATE ENTRY dès que MySQL essayera d'insérer une ligne qui aura le même id_contact que celui de la table. Solution: tu supprimes d'abord la première colonne du ficheir CSV et tu précises à MySQL quelles colonnes importer en omettant, bien sûr, la première colonne . La clé primaire de la table contacts étant en auto-increment, tu n'as pas à l'importer spécifiquement. Le second problème (mineur) est que les lignes du CSV se terminent par un retour ligne exotique, du moins différent de celui par défaut de MySQL. Il faut donc le préciser dans l'instructions SQL.
$sql = "
LOAD DATA INFILE '/chemin/complet/vers/tfi2003_contacts.csv'
	INTO table contacts FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'
	(id_cat,societe,titre,nom,prenom,rue,no,cp,localite,region,pays,phone,phone2,fax,email,website,note)
";

mysql_query($sql) or die (mysql_error());
Attention qu'il te faut le *chemin complet* vers le fichier à importer. Selon que tu travailles en local ou sur un serveur distant, il sera différent. Le mieux est d'uploader le fichier à importer dans le répertoire de ton script d'importation et de spécifier le chemin vers ce répertoire avec la variable serveur $_SERVER['DOCUMENT_ROOT'] à laquelle tu ajoutes le répertoire du script.

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 21 avr. 2012, 13:56

merci pour les infos :

J'ai trouvé des choses intéressantes aussi à voir selon vous ?
faq-tutoriels/introduction-load-data-infile-t18738.html

QQ'un peut-il m'aider à insérer le code ? voici le nom de ma table : tfi2003_contacts

j'utilise phpmyadmin, en pièce jointe le fichier .csv et ci-dessous mon code php qui fonctionne très bien sous lequel il affiche la requête, mon souhait imoprter automatiquement les données dans le csv vers ma table tfi2003_contacts. MERCI de votre aide les expert php sql ect...

<html>
<body>
<?php
// information pour la connection à le DB
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'import';

// connection à la DB
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT prenom,nom,titre,phone,email FROM tfi2003_contacts ';

//$select = 'SELECT prenom,nom FROM vache LIMIT 0,4';

$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);


// si on a récupéré un résultat on l'affiche.
if($total) {
    // début du tableau
    echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        echo '<tr>';
        echo '<td bgcolor="#669999"><b><u>Prénom</u></b></td>';
        echo '<td bgcolor="#669999"><b><u>nom</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>titre</u></b></td>';
        echo '<td bgcolor="#669999"><b><u>phone</u></b></td>';
		echo '<td bgcolor="#669999"><b><u>email</u></b></td>';
		echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC">'.$row['prenom'].'</td>';
        echo '<td bgcolor="#CCCCCC">'.$row['nom'].'</td>';
        echo '<td bgcolor="#CCCCCC">'.$row['titre'].'</td>';
		echo '<td bgcolor="#CCCCCC">'.$row['phone'].'</td>';
		echo '<td bgcolor="#CCCCCC">'.$row['email'].'</td>';
		echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

// on libère le résultat
mysql_free_result($result);

?>
</body>
</html>    

Re: Comment Importer automatiquement un fichier cvs dans ma

par Ripat » 20 avr. 2012, 23:48

Selon la taille du fichier à importer il est préférable d'importer un fichier CSV avec la commande LOAD DATA INFILE, nettement plus rapide qu'une série d'INSERT même préparée avec la classe PDO. Mais il faut que le fichier à importer comporte le même nombre de colonnes que celles crées dans la bdd MySQL. Quant à la discussion plus haut sur la conception de ta bdd, fais ce que tu trouves le plus facile, tu peux toujours par la suite optimiser ta bdd en créant une table ville séparée. L'avantage est, qu'en travaillant de cette manière, un changement dans l'orthographe d'une ville se fera une seule fois dans la table ville et pas de multiples fois dans ta table principale. Mais, une fois encore, commence par le plus facile et optimise selon tes connaissances. Voici en exemple d'optimisation:

Code : Tout sélectionner

/* importation du fichier CSV (à adapter: vois les directives SEPARATED et TERMINATED dans la doc MySQL */ LOAD DATA INFILE "tonfichier.csv" INTO TABLE contacts FIELDS TERMINATED BY ';'; /* optimisation: séparation de la table villes */ /* insertion dans la table villes (vide) de toutes les villes différentes trouvées dans la table contact */ INSERT villes (nom) SELECT contacts.ville FROM contacts GROUP BY contacts.ville; /* remplacement dans la table contacts du nom des villes par leur code de la nouvelle table ville */ UPDATE contacts JOIN villes ON villes.nom=contacts.ville SET contacts.ville=villes.code; /* changement du data type VARCHAR de la colonne ville de la table contact par INT */ ALTER TABLE contatcs CHANGE ville ville INT( 5 ) NOT NULL DEFAULT 0;
L'optimisation est secondaire. Commence par l'import par LOAD DATA INFILE.

Re: Comment Importer automatiquement un fichier cvs dans ma

par moogli » 18 avr. 2012, 23:22

suis le lien vers la doc de sirakawa (fgetcsv) y a des exemples dedans.

pour l'insertion une requête préparée semble s'imposer
Avec PDO
avec l'extension mysql

a partir du moment où tu connais la structure du fichier il s'agit d'une boucle

Attention toute fois a la taille du fichier pour ne pas atteindre la limite de 30s de vie du script php.

il y a tout dans l'exemple de ton 1er message
de l'upload du fichier
au traitement du fichier.

le principe est simple
- afficher le formulaire
- Valider l'upload du fichier (par défaut taille max d'un fichier 2Mo, a vérifier dans un phpinfo
- Parcourir le fichier et insérér les données dans la base. suivant la taille du fichier la fonction file peux être avantageuse et simplifier la chose.
le script tourne autour d'une seule boucle (while ou foreach) qui contient la requête d'insertion.


@+

Re: Comment Importer automatiquement un fichier cvs dans ma

par debutant10 » 18 avr. 2012, 22:10

sans être arbitre mais là bcp d 'avis mais on tourne autour du pot :

commencer simplement : Y a-t-il un expert php sql qui peu nous aiguiller ?

rappel du besoin à résoudre importer automatiquement des données en csv dans une table deja existante

QQ 'un peu transmettre un exemple avec 2 fichiers pour que je puisse tester dans mon localhost fichier www

Merci pour ceux ou celles qui peuvent m'aider car avec des exemples concrait qui fonctionne nous résoudrons bcp d 'intérrogation car à ce jour c le GRAND BROUILLARD