IMPORT CSV VERS BDD MYSQL AVEC CHOIX CHAMPS CSV / CHAMP BDD (PHP4)

Flux__ Messages postés 29 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 31 janvier 2007 - 23 août 2006 à 10:03
cs_claude77260 Messages postés 54 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 8 avril 2013 - 21 sept. 2012 à 12:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39220-import-csv-vers-bdd-mysql-avec-choix-champs-csv-champ-bdd-php4

cs_claude77260 Messages postés 54 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 8 avril 2013
21 sept. 2012 à 12:04
Bonjour,
et même en 2012 il est très utile
j'ai pris le script amélioré de Startide

fonctionne du premier coup un miracle sur le net
omisse Messages postés 1 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 7 décembre 2011
7 déc. 2011 à 11:10
J'ai télécharger le zip, configurer conf.inc.php, j'ai déplacer le dossier vers htdocs, mais en essayant 'http://localhost/import_CSV/import/import.php', ca m'afficher rien.
Quelqu'un pourrait m'aider ??
lelapinvert Messages postés 2 Date d'inscription mardi 22 mars 2011 Statut Membre Dernière intervention 28 mars 2011
28 mars 2011 à 08:58
Bonjour,
Moi aussi j'ai un problème à l'appelle de la fonction 'requette':
$result_tables = requette("SHOW TABLES FROM `".$bdd."`");

il me dit que la fonction n'est pas défini

J’utilise le fichier de Startide (je l'ai nommé test.phtml) avec le code de caviar.

Je pense que le pb vient de :
include ('functions/mysql.php');

je sais que le chemin est bon car si je le change il me met une d'erreur à cette ligne.

Si je copie colle la fonction 'requette' (du fichier mysql.php) au dessus ben la il la voie bien mais l'erreur est que la variable $bdd n'est pas défini.

Donc 'include' fonctionne mal mais je ne sais pas pourquoi...
J’ai même mis tout les fichiers dans le même répertoire mais sa change rien.
Petite précision : je suis sous windows.
bigthulhu Messages postés 3 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 26 janvier 2011
26 janv. 2011 à 23:03
Tres bonne demo ...

Excusez moi les amis ??!!

En faite je travail sur ce scrypt depuis 2 jours et je n'arrive pas a le transformer un peux, ce que je vouderai faire c'est metre le nom de la table par defaut sans avoir a choisir dans un menu deroulant, et aussi rendre le menu deroulant du choix de colones comme celuis du choix de la table sur votre demo (sans avoir toute les lignes des colones qui s'affichent une en bas de l'autre) question de reduire la taile de la page si on a trop de colone sur notre base de donnees,

Merci pour votre soutient.
nicov29280 Messages postés 2 Date d'inscription samedi 21 janvier 2006 Statut Membre Dernière intervention 14 janvier 2011
14 janv. 2011 à 19:18
Je suis moi aussi bloqué par la fonction requette. Quelqu'un aurait-il réussi à trouver d'où vient le bug ?
cosmexpert Messages postés 1 Date d'inscription mercredi 6 octobre 2010 Statut Membre Dernière intervention 6 octobre 2010
6 oct. 2010 à 18:50
même remarque que corresp le 26/12/2008: la fonction requette() lui est inconnue!
Ayant eu ce message dès le départ, j'ai utilisé la version dite déboguée de shannara le 07/06/2010 ...ce qui ne change rien!
Merci de votre aide.
cs_shannara Messages postés 2 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 7 juin 2010
7 juin 2010 à 14:29
salut

Pour les besoins de mon stage,
j'ai utilisé ton script.
Avec mon tuteur, j'ai débugué et optimisé le script.
j'ai mis en ligne le code source.
Voci le lien:
http://www.phpcs.com/codes/IMPORT-FICHIERS-CSV-DANS-BASE-DONNEES_51860.aspx
Hades28 Messages postés 2 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 28 mai 2010
28 mai 2010 à 09:10
Ok, j'ai trouvé, merci !
Hades28 Messages postés 2 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 28 mai 2010
26 mai 2010 à 11:32
Bonjour, beau boulot pour ce script CAVIAR, malheureusement, il ne marche absolument pas chez moi :'(
La connexion de s'effectue pas, le nombre d'erreur qui sont corrigé lors de la suppression des commentaires est énormes, j'ai bien corriger les soucies <? en <?php mais cela n'y fait rien, je ne comprend pas, j'y suis depuis 8h ce matin et malgré tout mes testes, des erreurs "magiques" sont encore la, y'a t'il une nouvelle version plus récente ( s'adaptant au PHP5 et a MySQL ) ou cela est-il déjà arriver à quelqu'un ( et peut-il me donner la solution ?) d'avance merci
cs_fscalda Messages postés 4 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 12 mai 2010
12 mai 2010 à 10:40
J'étais bien em** avant de trouver ton programme, franchement, de la bombe !
LANNER, j'insère mon CSV dans ma base en local avec un bon vieux easyphp 1.8 et ça fonctionne, ensuite je l'exporte et ré-importe sur ma base en php5 définitive, ça ait un peu bricolage, mais ça me permet de vérifier si tout se passe bien. Si ça peut t'aider ;)
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
8 janv. 2010 à 17:06
Salut

Quelqu'un aurait une source "propre", trop d'erreur sur celle ci (ligne 85, elle ne fonctionne d'ailleurs je pense sur nouvelles mises à jour php 5

merci d'avance
airbud Messages postés 1 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 8 janvier 2010
8 janv. 2010 à 12:05
Excellent source, simple, utile et fonctionnel ! Le code qui fait gagner du temps...Perso je compte l'utiliser pour migrer une base FileMaker vers MySQL, et le fait de selectionner les champs source et destination et crucial (ma structure de base va pas mal changer au passage). Il se pourrait que j'utilise ce code sur d'autres projets et qu'au passage j'y ajoute ma touche, auquel cas je repasserai ici. Merci merci !
bansai1986 Messages postés 1 Date d'inscription vendredi 18 septembre 2009 Statut Membre Dernière intervention 25 septembre 2009
25 sept. 2009 à 14:18
Bonjour, super code, j'ai pu gagner du temps pour mon projet.
Ca marche sur Wamp 2.0, apache 2.2, PHP 5.3

@ Settkonen et à ceux qui ont ce problème:

1) Modifier les balises <? par <?php

2)Enlever le mysql_close dans la fonction déconnexion de mysql.php car sans variable à l'intérieur, apache te fait un jolie message d'erreur. Il faudrait mettre la variable $connexion dedans mais ca passe pas.
settoken Messages postés 6 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 10 septembre 2022
3 sept. 2009 à 23:17
Impossible de tester ce code à cause d'une erreur incompréhensible

Parse error: parse error in C:\WAMP\www\ImportCSV_V3\import\import.php on line 59

c'est l'accolade qui ferme la fonction display_one_table, je ne comprend pas ce qui cloche.
cs_ChRom Messages postés 2 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 2 février 2009
2 mars 2009 à 20:23
Super code :) Rien a dire parfait pour les exports
mikhal Messages postés 1 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 29 décembre 2008
29 déc. 2008 à 10:41
tout simplement magnifique ton code!!
corresp Messages postés 6 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 26 décembre 2008
26 déc. 2008 à 17:36
Hello
Je viens de télécharger ce script mais contrairement à ce qui est dit, moi j'ai des erreurs dès le début:
1 - Notice: Undefined variable: result in C:\Program Files\EasyPHP 2.0b1\www\import\import\import.php on line 43
2 - Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP 2.0b1\www\import\import\import.php on line 43
3 - Fatal error: Call to undefined function requette() in C:\Program Files\EasyPHP 2.0b1\www\import\import\import.php on line 60

Y a-t-il un version définitive et corrigée de ce script ?
Merci
eenn52 Messages postés 1 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 7 décembre 2008
7 déc. 2008 à 15:49
Je viens de l'essayer sur mes contacts outlook express ca marche impeccablement .Merci.
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
7 nov. 2008 à 21:08
wahou ! ça faisait un bai que j'étais pas passé sur ma source. lol
ben merci pour tous les commentaires encourageants :) ça fait plaisir même deux ans plus tard (déjà !).
Je reçois régulièrement des emails pour me demander de l'aide pour utiliser cette source mais j'avoue que ça fait tellement longtemps que e l'ai pondue que je suis aussi paumé que vous. lol
Entre temps si c'est juste pour traiter du BATCH j'ai découvert un soft qui s'appelle EMS MySQL manager ... et ça importe les CSV trèèèès bien.
vala
merci encore et @ ++
pifou25 Messages postés 144 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 21 décembre 2014
30 oct. 2008 à 08:50
bonjour,
Bon script apparement au vu des commentaires. Les pb de <? à la place de <?php, balise courte ou balise longue c'est au niveau du serveur (apache ou php) que ça se règle. la norme c'est quand même les balises longues en principe ;)
Bon moi j'aurais un pb de fichier trop gros à uploader, il faudrait une liste déroulante pour sélectionner le fichier qui aurait été transféré par FTP dans le rép TMP (par exemple) donc zapper l'étape de l'upload par formulaire. D'ailleurs pour la suite la requête devrait optimiser les inserts par paquets plutôt que ligne par ligne.
34140bruno Messages postés 1 Date d'inscription lundi 20 octobre 2008 Statut Membre Dernière intervention 20 octobre 2008
20 oct. 2008 à 14:34
Bonjour,

Je débute et souhaite mettre en ligne un site, pour cela je tente depuis 3h d'utiliser ta contribution mais je suis tellement nul que nada .
Alors le "blaireau" que je suis demande si on peut m'assister dans l'utilisation de ce prog.

Merci à tous

Cordialement

Bruno
Limahl19 Messages postés 37 Date d'inscription lundi 26 mars 2007 Statut Membre Dernière intervention 8 octobre 2008
2 sept. 2008 à 17:23
alors moi le script marche bien....
j'ai pris celui de STARTIDE posté plus haut.

la requeste d'insert qui s'affiche est

INSERT INTO test2 (`id`, `datesaisie`, `datefin`, `nom`, `prenom`, `adresse`, `ville`, `cp`, `tel`, `email`, `marque`, `modele`, `annee`, `kilometre`, `etat`, `description`, `affichercontact`, `duree`, `photo1`, `photo2`, `photo3`, `photo4`, `photo5`, `petite1`, `petite2`, `petite3`, `petite4`, `petite5` ) VALUES ('', '', '', '', '', '', 'PUYCORNET', '82220', '', '', 'WI', 'NULL', '1967', '1', '', 'JEEP WILLYS DIES. D', '', '', '', '', '', '', '', '', '', '', '', '' )

pourtant dans ma base de données le cp qui s'affiche est que 8 au lieu de 82220.

est ce que quelqu'un pourrait m'aider?
jietch Messages postés 1 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 12 juin 2008
12 juin 2008 à 11:23
Sinon quelqu'un aurait une idée pour l'update et la gestion des clés étrangères?
Sinon ce code est géniale et trés pratique!
ham_mer Messages postés 6 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 3 juin 2008
3 juin 2008 à 13:11
Génial ce script, très pratique !

Par contre je ne sais pas si ça vient de php5 mais comme il a été dit plus haut, il faut remplacer les <? par <?php sinon plantage du code !
maxofnice Messages postés 2 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 7 mars 2008
7 mars 2008 à 11:12
Bonjour,

Deux petits soucis :
1/ Le fichier texte que je récupère est délimité par des tabulations. J'ai essayé d'ajouter dans le groupe des délimiteurs \t ou [\t], mais ça ne marche pas. Quelqu'un a-t-il une idée, et le délimiteur tab est-il possible ?
2/ Le fichier texte que je récupère comprend des dates au format fr soit 07/03/2008. Ma table mysql ne veut que du format 2008-03-07. J'ai essayé :
$date = explode('/',$date);
echo $date[0],'-',$date[1],'-',$date[2];
et aussi
$date = $date_us;
$date_us = implode('-',array_reverse (explode('/',$date)));
placé avant la ligne
fclose ($fp);
Marche pas. L'idéal serait une case à cocher dans le dernier tableau de correspondance dans le même esprit que la case "md5", mais j'ai déjà atteint mon niveau d'incompétence :)

Si quelqu'un passe par là, merci d'avance de son aide.
maxofnice Messages postés 2 Date d'inscription lundi 4 décembre 2000 Statut Membre Dernière intervention 7 mars 2008
3 mars 2008 à 10:16
Bonjour,

J'en ai bcp sué avant de trouver ce script. Merci beaucoup à CAVIAR et STARTIDE. C'est tout simplement merveilleux.

Bonne journée
Sebe2 Messages postés 1 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 9 février 2008
9 févr. 2008 à 12:43
Salut,

Pour mes besoins, je devais utiliser ce petit outil très sympa mais impossible car quelques erreurs qui ne passaient sur mon navigateur (genre '<?' au lieu de '<?php'). Je peux filer les correctifs à l'auteur s'il veut mettre le package à disposition de tous !

A+
Moreno541 Messages postés 1 Date d'inscription mercredi 19 décembre 2007 Statut Membre Dernière intervention 19 décembre 2007
19 déc. 2007 à 16:09
Bonjour j'ai un probleme avec ton script j'ai ce message d'erreur : "Impossible de copier le fichier dans tmp/
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 13 mars 2008
9 sept. 2007 à 00:11
Benoistd,
Là dans ton cas, je crois que c'est apache ou ton navigateur web qui a un timeout trop faible pour exécuter le script avec une trop gros csv.

SOit tu change le timeout ou tu découpe ton fichier pour les faire en plusieurs fois. C'est ce que je ferais. Changer le timeout n'est pas forcément judicieux (niveau sécurité).

@+
benoistd Messages postés 1 Date d'inscription samedi 17 juin 2006 Statut Membre Dernière intervention 7 septembre 2007
7 sept. 2007 à 17:51
Bonjour,

je viens de rencontrer un problème via un cvs gros gros taille

voici le message d'erreur

----
Traitement du fichier CSV


Fatal error: Maximum execution time of 30 seconds exceeded in /home.10.13/photoset/www/test/xlsmagique/import/import.php on line 380
----

celui ci intervient apres la seconde étape.

Merci de votre aide
g_barthe Messages postés 27 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 13 mars 2008
13 août 2007 à 17:47
Bonjour à tous,
Cette source vient de m'etre très utile.

Marche au poil. c'est vrai que remplir plusieurs tables en même temps serait bien. Mais bon on va pas etre exigeant.

Le boulot est déjà fort.

Et la présentation est sobre et agréable.

Félicitation.
cs_pooks Messages postés 1 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 13 août 2007
13 août 2007 à 15:25
Il tourne au poil ton script!
A quand une version qui permet de remplir plusieurs tables en même temps?
ZOD31 Messages postés 3 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 27 août 2007
26 juil. 2007 à 10:08
Salut avez-vous une idée pour que le transfert soit fait via un fichier xls ( traduction que ma page php le convertisse en csv et l'envoie sur ma bdd; et que l'utilisateur ne le fasse pas lui-même) puisque je galère la dessus depuis quelque temps. Merci d'avance.
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
12 avril 2007 à 14:29
proinfo35 > salut .. c'est ta bdd qui n'accepte pas les doublons sur une clef unique je pense .. non ? le script en tout cas ne regarde pas les données pour les comparer entre elles ...
sinon tu as la possibilité de forcer une valeur en entrant quelque chose ds le champ de texte ;)
++
titou0666 Messages postés 1 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 1 avril 2007
1 avril 2007 à 17:28
j'ai galleré paendant des heures pour trouver un truc dans le genre et voila je viens d'installer le script et ça MARCHE impec !!! encore merci !!!

www.astrozorg.net

Zorg
proinfo35 Messages postés 1 Date d'inscription lundi 18 décembre 2006 Statut Membre Dernière intervention 18 décembre 2006
18 déc. 2006 à 18:23
Salut,

je viens de tester cette source. C'est très utile. Mais j'ai un soucis : il ne prend pas les doublons. impossible d'avoir un champ avec la même valeur sur toutes les entrées.

Si quelqu'un a une idée pour résoudre ce problème
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
4 déc. 2006 à 23:20
salut ... ça fait un moment que je n'ai pas repris ce code et là comme ça je ne pourrai pas vous expliquer l'origine de vos problèmes ... je vais cependant m'y pencher....
juste une infos pour alpha 386 quand dans une form l'action est vide cela signifie que la form recharge la même page en lui passant les nouvelles variables...
@++
gaeil Messages postés 2 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 20 novembre 2006
20 nov. 2006 à 21:59
Bonjour,
je pense que ce programme est très utile.
c'est indiqué nulle part, mais je présume qu'on exécute le fichier import.php ?
j'ai bien configuré le fichier config. la base est crée, mais dans la boite déroulante, "choisissez une table" il n'y a rien... je n'ai pas de message d'erreur. j'arrive à bien choisir le fichier excel, mais sans plus, car il me dit que je n'ai pas choisi la table.
c'est d'autant plus bizarre qu'on indique le nom de la table dans le fichier config.
merci
alpha386 Messages postés 16 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 15 novembre 2006
18 nov. 2006 à 05:26
Salut

Petite info, dans <form action='', c'est quoi que je dois mettre pour enfin réussir à importer des données dans ma base de données. Tout est correct, le programme affiche correctement mais il ne fais rien car l'action est vide. Il me serait très utile de savoir car cela arrive souvent de restaurer...

merci
Anardil Messages postés 9 Date d'inscription vendredi 12 août 2005 Statut Membre Dernière intervention 22 juillet 2010
15 nov. 2006 à 16:51
Salut,

J'ai un problème avec mon champ prix. Mes prix sont à virgules : 29,50 dans mon fichier csv. Dans ma table mysql j'ai comme type de champ pour prix DECIMAL(5,2). Quand je fais l'import je me retrouve avec des prix : 29.00 au lieu de 29,50. Ce qui est très embêtant !! comment je pourrais éviter ce problème?

Merci d'avance
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
15 sept. 2006 à 09:30
ah ouai c'est vrai j'avais oublié ce coup là du update ...
je m'y pencherai surement ... mais pas dessuite j'ai un oscommerce à modifier en ce moment ...je vous raconte pas la prise de tête ... c'est pas le même niveau là ... lol
mais j'y pense ;)
@++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
13 sept. 2006 à 15:17
Pas eu de soucis en ce qui me concerne :)

Sinon pour update ? :D :ane:
Bimpson Messages postés 22 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 13 septembre 2006
13 sept. 2006 à 14:14
excuse moi caviar de ne pas avoir répondu avant..
mais c'est une erreur de manip de ma part... eh oui je suis un boulet! ;)
En tout cas ton script fonctionne super bien!
A+
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
13 sept. 2006 à 12:24
?? quelqu'un d'autre à eu le bug du md5 partout où c'est une erreur d'utilistation de Bimpson ?
pas trop le tps de regarder là mais si c'est un réel bug je m'y penche ...
++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
8 sept. 2006 à 10:30
Poy, j'aimerais bien faire un "update" des champs quand il trouve une valeur d'une colonne spécifique déjà existante. Je un peu farfouillé ton code, mais j'avoue que ce morceau là reste asser obscur en ce qui me concerne :)

Une idée pour le gérer ? Même en "hardcodé" ca m'ira perso :D
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
6 sept. 2006 à 14:53
Ben il a été passé à la sauce md5 ^^ doit y avoir un bug, ou alors t'as coché un truc pour crypter les champs vu que ca vient d'être rajouté.

Clef usb perdue, donc j'ai pas testé les nouvelles versions de ce code source :/ :(

Pi surtout d'autres trucs à faire au taf...
Bimpson Messages postés 22 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 13 septembre 2006
4 sept. 2006 à 17:18
Salut,

je viens d'essayer ton code, il marche nickel toutes les infos sont bien en place.
le seul petit soucis c'est que tous les champs sont "cryptés", j'explique :
j'ai "1efb20f4c3f28a30b57cbaa008dba012" au lieu de "Reference", ce qui est un peu gênant :)
avez-vous une réponse?

Merci d'avance Bimpson
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
31 août 2006 à 14:55
et une petite maj de plus :)
possibilité de faire un md5 sur nimporte quelle valeur :)
++
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
30 août 2006 à 14:07
wahou :) lol
je vais regarder ça ...
ça en fait des lignes au final :)
merci
@++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
30 août 2006 à 11:55
Tiens je te balance le mien, j'ai fait du nettoyage et apporté un peu de couleurs :)

<html>
<head>
<script language= "JavaScript" type="text/JavaScript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
//-->
</script>
</head>

<?php


// Liste les données de la table
// -------------------------------------------
include ('../conf/config.inc.php');
include ('../functions/mysql.php');

// on affiche les tables de la bdd
//pour que ce script fonctionne il faut au moins un enregistrement dans la table s?lectionn'e
function display_one_table($tablename){
//$query="show fields from $tablename";
//$result=mysql_query($query);
$result = requette ("show fields from $tablename");
$rows = mysql_num_rows($result);
?>

Informations sur la table <?php echo $tablename?></ |

----

Field,
Type,
Null,
Key,
Default,
Extra,

<?php
while ($row = mysql_fetch_row($result)) {
?>
----
\">
<?php echo $row[0] ?>,
<?php echo $row[1] ?>,
<?php echo $row[2] ?>,
<?php echo $row[3] ?>,
<?php echo $row[4] ?>,
<?php echo $row[5] ?>,

<?php
}
?>



<?php
}

///////////////////////
$result_tables = requette("SHOW TABLES FROM `".$bdd."`");
?>

<form action="" name="form_bdd" id="form_bdd" method="post" enctype="multipart/form-data">
Table de la base de donnée qui va reçevoir l'import

<select name="table">
<option value="" <?php if (!isset($_POST['table'])){ echo'selected'; } ?> >Choisissez une table</option>
<?php
while ($row = mysql_fetch_row($result_tables)) {
// echo "Table : {$row[0]}\n"; // Morceau de code inutile non ? Du moisn incorrect !

echo " <option ";
if (isset($_POST['table']) && $row[0]==$_POST['table']){ echo'selected '; }
echo "value="".$row[0]."">Table : ".$row[0]."</option>";
echo "\n";
}
?>
</select>
Fichier CSV ou TXT au format csv


Préparation du fichier :


Ouvrir le fichier dans excel. Créer une nouvelle colonne le plus à droite possible que vous remplirez avec ce que vous voulez...


Enregistrez sous >> CSV.


Cela permet au moment de l'enregistrement au format CSV de générer le bon nombre de point virgule si certaines lignes n'ont pas d'infos dans leur dernière colonne. En effet excel ne rajoute pas de ";" après la dernière valeur d'une ligne même si il reste des colonnes vides... Au moment de l'import les lignes incomplètes sont ignorées. Il faut donc formatter le fichier csv dans excel grâce à cette petite manip avant de l'enregistrer.




Délimiteur : <select name="del">
<option value=";" selected>; Point virgule</option>
<option value=",">, Virgule</option>
<option value=":">: Deux points</option>
<option value="-">- Tiret</option>
<option value="/">/ Slash</option>
<option value="|">| Barre</option>
<option value="#"># Dièse</option>
</select>




Correpondance des champs">


</form>

<?php if (isset($_POST['table']) && $_POST['table'] !="" && isset($_POST['etape2'])) {
$del = $_POST['del'];
if( empty($_FILES['fichiercsv']['tmp_name'])){
exit('Vous n\'avez pas choisi de fichier à uploader

</html>.');
}
?>
<form action="" name="form_import" id="form_import" method="post">
<?php
// on crée cette variable ici avant de faire le test car elle peut servir ? la suppression aussi

$content_dir = 'tmp/'; // dossier où sera déplacé le fichier

//---------------------


$tmp_file = $_FILES['fichiercsv']['tmp_name'];

if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable.
Vous n'avez pas choisi de fichier ? uploader.");
}

// on v?rifie maintenant l'extension
//$type_file = substr($_FILES['fichier']['name'], strrpos($_FILES['fichier']['name'], "."));
$type_file = $_FILES['fichiercsv']['type'];
//echo 'nom du fichier :'.$tmp_file.'
';
//echo 'type du fichier : '.$type_file.'
';


$extensions_valides = array( 'csv' , 'txt' );
$extension_upload = substr( strrchr($_FILES['fichiercsv']['name'], '.') ,1);
if ( in_array($extension_upload,$extensions_valides) ){

// on copie le fichier dans le dossier de destination
$name_file = $_FILES['fichiercsv']['name'];

if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
}
?>
Le fichier <?php echo '['.$content_dir.'/'.$name_file.' '.$name_file.']'?> a bien été uploadé


<?php
display_one_table($_POST['table']);
echo '

';

} else {
?>
Extension incorrecte. Vous pouvez uploader des csv, txt.


<?php
}

if(file_exists("$content_dir"."$name_file")) {

//on lis la 1ere ligne pour g?n?rer lles listes
$fp = fopen("$content_dir"."$name_file", 'r');
$str= "";
$cpt=0;

$str .= fgets($fp, 99000);
//echo $str;
$str=trim($str);
if (substr($str,-1,1) != $del){
$str .= $del ;
}
//
$tabcsv = explode ($del, $str);
//echo $str;

fclose ($fp);
//on suppr les espaces
//print_r($tabcsv);
?>
Champ de la tableForcer la valeur<hr>,
Champ du fichier CSV<hr>,

----

<?php
//génération des listes de gauche avec les champs de la bdd
$resQuery = requette("SHOW FIELDS FROM ".$_POST['table']." FROM ".$bdd);
$fields = mysql_num_rows($resQuery);
if (mysql_num_rows($resQuery) != 0) {
$j = 0;
while ($j < $fields) {
?>
<select name="colone<?php echo $j ; ?>">
<option value="" <?php if (!isset($_POST['colone0'])){ echo'selected'; } ?> >Choisissez une colonne</option>
<?php

// on affiche les champs de la table choisie

// titre des colonnes

$i = 0;
while ($i < $fields) {
$savior = mysql_result($resQuery, $i);
echo '<option value="'.$savior.'"';
echo ($i == $j ? ' selected>' : '>');
echo $savior.'</option>';
echo "\n";
/*
echo "<option ";

if ($i == $j){ echo'selected '; }
echo "value=\"";
echo mysql_result($resQuery, $i);
echo "\">";
echo mysql_result($resQuery, $i);
echo "</option>";
echo "\n";
*/
$i++;
}
echo "\n";

?></select>
" style="width:50px;margin-left:1em">

<hr>
<?php
$j++;
} // fin while j

} ?>,
<?php

// g?n?ration des listes ---------------------------

$j = 0;
while ($j < $fields) {
?>

<select name="colonecsv<?php echo $j ; ?>">
<option value="" >Choisissez une colone</option>

<?php

// on affiche les champs de la table choisie

// titre des colonnes

$i = 0;
while ($i < count($tabcsv)) {
echo "<option ";
if ($i == $j){ echo 'selected '; }
echo "value=\"";
echo $i;
echo "\">";
echo $tabcsv[$i];
echo "</option>";
echo "\n";
$i++;
}
echo "\n";

?> </select>
<hr>
<?php
$j++;
} //-------------------------------

} else {
echo 'erreur. Fichier csv mal uploadé.

';
}

?>,

----

">
">
">
">
">
">

Importer dans la bdd">

</form>
<?php } //fin du if isset
else if (isset($_POST['etape2'])){
?>
Vous n'avez pas choisi de table où importer les données !


<?php
}
?>

<?php if (isset($_POST['listeok'])){
echo ' Traitement du fichier CSV

';
$del = $_POST['del']; //choix du d?limiteur
$content_dir = $_POST['content_dir'];
$name_file = $_POST['name_file'];
$table = $_POST['table'];
//nb de champs dans la table
$fields = $_POST['fields'];
$nb_colones_csv = $_POST['nb_colones_csv'];

//on lis la 1ere ligne pour g?n?rer lles listes
$fp = fopen("$content_dir"."$name_file", 'r');
$str="";
$cpt=0;
while (!feof($fp)) {
$str = fgets($fp, 99000);


//on ?vite les lignes vides
if(!empty($str)){
//si on a pas de ; ? la fin d'une ligne on en ajoute une
//$str = "azerty";
$str=trim($str);
//echo 'dernier car de la ligne = '.substr($str,-1,1).'
';
if (substr($str,-1,1) != $del){
$str .= $del ;
}
//on remplace les ' par \'
$str = str_replace ("'","\'",$str);

$nbcar = strlen($str);
//on cherche les caract?res de s?paration
//echo 'nb de char sur la ligne='.$nbcar.'
';
$valligne [] ="";
// pour placer la valeur chaque fois dans la case suivante du tableau temporaire valligne
$vallignecpt = 0;


//PARSAGE DES VALEURS
// SI ON DEBUTE PAR UN "

while ($nbcar != 0){

$pos1=0;
if (substr($str,0,1) == '"'){
$pos1 = 1;
$trouve=0;
for ($pos=0 ; $trouve!= 1; $pos++){
$sepa = substr($str,$pos,2);
//echo 'caractere analis?='.$sepa.'
';
if( $sepa== '"'.$del){
$pos2 = $pos; //on r?cup?re la position du debut de l'enregistrement
//echo 'pos1='.$pos1.'
';
//echo 'pos2='.$pos2.'
';
$long = $pos2 - $pos1; //longueuur de la chaine à extraire
$tempstr = substr($str, $pos1, $long ); //on recup le reste de la ligne
//echo 'compteur ='. $vallignecpt.'
';
//on regarde si on a remplis le champ pour forcer la valeur
$tempforce = 'force'.$vallignecpt;
if (isset($_POST[$tempforce]) && $_POST[$tempforce] != ""){
$valligne [$vallignecpt] = trim($_POST[$tempforce]);
} else {
//sinon on remplis avec la valeur trouvée
$valligne [$vallignecpt] = $tempstr ;
}
$vallignecpt++;
//echo " Valeur ajoutée= ".$tempstr.'

';
$trouve =1;
$str = substr ($str, ($pos2+2));
//echo 'Nouvelle Phrase='.$str.'
';
$nbcar = strlen($str);
}
}
} else {
$pos1 = 0;
$trouve=0;
for ($pos=0 ; $trouve!= 1; $pos++){
$sepa = substr($str,$pos,1);
//echo 'caractere analis?='.$sepa.'
';
if( $sepa == $del){
$pos2 = $pos; //on r?cup?re la position du debut de l'enregistrement
//echo 'pos1='.$pos1.'
';
//echo 'pos2='.$pos2.'
';
$long = $pos2 - $pos1; //longueuur de la chaine ? extraire
$tempstr = substr($str, $pos1, $long ); //on recup la valeur
//echo 'compteur ='. $vallignecpt.'
';
//on regarde si on a remplis le champ pour forcer la valeur
$tempforce = 'force'.$vallignecpt;
if (isset($_POST[$tempforce]) && $_POST[$tempforce] != ""){
$valligne [$vallignecpt] = trim($_POST[$tempforce]);
} else {
//sinon on remplis avec la valeur trouvée
$valligne [$vallignecpt] = $tempstr ;
}
$vallignecpt++;
//echo " valeur ajout?e= ".$tempstr.'

';
$trouve =1;
$str = substr ($str, ($pos2+1));
//echo 'nouvelle Phrase='.$str.'
';
$nbcar = strlen($str);
}
}

}

}

//print_r ($valligne);
$tabcsv[$cpt] = $valligne;
$valligne = "";
$cpt ++;
//echo $str.'
';
}
}
fclose ($fp);
//print_r ($tabcsv);






//g?n?ration de la requette



$colones = "(" ;
for ($g=0; $g<$fields; $g++) {

$colones .= '`'.$_POST["colone$g"].'`';
//pour ne pas ajouter de virgule apres la derniere colone on teste
if ($g < ($fields-1)){
$colones .= ", ";
}
}
$colones .= " ) ";
//echo '
colones = '.$colones;
//echo '
csv : ';
//echo $_POST['colonecsv0'];

echo $nb_colones_csv.' champs dans le fichier '.$name_file.'
';
echo $fields.' champs dans la table '.$table.'
';

//génération de la requette
$numligneval = 1;//compteur qui va donner le numero ? la ligne des valeurs ...pour ne pas avoir de trou dans l'index du tableau
//on incr?mente les lignes
for ($u=1; $u<=($cpt-1) ; $u++) {
// on verrifie que le parsage de la ligne soit bien fait en regardant que tabcsv contient bien le même nombre de champs pour cette ligne que le nombre de champs de la 1ere ligne du fichier csv
if (count($tabcsv[$u]) == $nb_colones_csv) {
$valeurs[$numligneval] = "(" ;
//on remplis les valeurs en fonction du nb de colones
for ($m=0; $m<$fields ; $m++) {

$tempcol = 'colonecsv'.$m;



//on stocke la valeur sans les espaces avant et après


// on evite d'afficher un erreur d'index indefini sur la table si on a pas choisi de correspondance de champ avec @
@$valeurs[$numligneval] .= '\''.trim($tabcsv[$u][$_POST[$tempcol]]).'\'';

//pour ne pas ajouter de virgule apres la derniere colone on teste

if ($m < ($fields-1)){
$valeurs[$numligneval] .= ", ";
}
}
$valeurs[$numligneval] .= " ) ";
$numligneval++;
} else {
//print_r ($tabcsv[$numligneval]);
//echo'
';
echo 'Ligne '.($numligneval+1).' du fichier '.$name_file.' -> Erreur : '.count($tabcsv[$u]).' champs au lieu de '.$nb_colones_csv.' - Ligne ignor?e.
';
//on remplis quand m?me le tableau des valeurs mais cette ligne sera ignor?e lors des insert ... ?a permet de garder le compteur des lignes ? jour au niveau du journal des erreurs sql
$valeurs[$numligneval] = "";
$numligneval++;
}

}



// FONCTIONS D'IMPORT DANS LA BDD
/* ?a n'est pas tout ? fait la m?me que dans mysql.php qui est en include
car celle ci affiche les erreurs sans couper le traitement en cas d'erreurs.
C'est celle l ? qu'on va donc utiliser */

function requette_avec_erreur($str_query, $connect=1)
{
if ($connect==1){connecter();} // si connect =1 on se connect
$resultat = mysql_query($str_query);
if ($connect==1){deconnecter();} // si connect =1 on se deconnect
if ($resultat)
{
return $resultat;
}
else
{
return 0;
//erreur(3); //si on veux renvoyer ? une action pr?cise en cas d'erreur
}
}
echo '
import en cours

';
$erreur_sql = ""; //on initialise le journal des erreurs

//insert dans la base
echo 'La ligne 1 du fichier CSV correspond à la définition des champs.
';
connecter();
for ($u=1; $u<$numligneval; $u++) {
if ($valeurs[$u] != ""){
$req = "INSERT INTO $table $colones VALUES $valeurs[$u] ";
echo "
".$req.'
';

if (requette_avec_erreur($req,0)) {
echo 'ajout de la ligne '.($u+1).' du fichier '.$name_file.'.
';
} else {
$erreur_sql .= 'Ligne '.($u+1).' du fichier '.$name_file.' -> Erreur SQL '.mysql_errno().' : '.mysql_error().'
';
echo 'ligne '.($u+1).' -> Erreur SQL
';
}
}

}

deconnecter();
?>

Fin de l'import

JOURNAL DES ERREURS SQL

<?php
if (!empty($erreur_sql))
{
echo $erreur_sql;
}
else
{
?>
Pas d'erreurs détectées lors de l'import
<?php
}
?>
<?php
}
?>

</html>
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
30 août 2006 à 10:10
ayé j'ai trouvé :)
ça marche et c'est mis à jour ;) ;) ;)
@++
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
30 août 2006 à 09:42
bon j'ai fais quelques tests ...
le bug se situe sur la ligne

// on evite d'afficher un erreur d'index indefini sur la table si on a pas choisi de correspondance de champ avec @
@$valeurs[$numligneval] .= '\''.trim($tabcsv[$u][$_POST[$tempcol]]).'\'';

aux alentours des 500 ... mais je nage un peu moi même là ...lol

alors si ça vous inspire ;)
@+
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
29 août 2006 à 17:26
lol :) Merci pour tes remarques :) Pour quelqu'un qui n'est pas dev (comme moi au passage ...) tu as un bon petit niveau quand même :)
Je vais modifier le html pour être bien comme il faut :) ... Je me disais aussi que c'était bizare comme syntaxe ... enfin j'ai regardé ça à partir de Golive la plus grosse m?rd que Adobe a sorti à mon sens ...

pour le javascript il n'est pas dans un head car ce fichier est appelé en include dans un autre fichier en fait ... donc bon ... Je vais laisser comme ça pour l'instant :)
merci @ toi;)
@++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
29 août 2006 à 15:13
Tiens vouais encore un truc ;)

Histoire de pas faire les cochonus...
<html>
<head>
<!-- Ton javascript -->
</head>

<!-- Reste du Code -->


</html>

Ca serait quand même mieux hein :ane:
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
29 août 2006 à 15:04
Mince on peut pas éditer... bon je continue :)

Menu déroulant pour choisir les tables de la base de données, ya une erreur :

while ($row = mysql_fetch_row($result_tables))
{
echo "Table : {$row[0]}\n";
[...]
}
Ce morceau de code est inutile, ca fait rajouter du texte au milieu de ton html et n'est pas afficher à l'écran.

Si tu veux avoir :
<option value="$row[0]>Table : $row[0]</option> c'est entre les balises options qu'il faut rajouter le texte ;)

Out pour le moment :)
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
29 août 2006 à 14:55
Tiens autre petite remarque, bonne idée d'avoir joué sur les selected dans tes menus déroulants. Deux remarques :

1/ c'est <option value="test" selected> la bonne structure ;) pas de <option value="test" selected="selected"> ^^

2/ Je te renvois à ce que j'ai posté sur php.net on utilise alors avec élégance le bel opérateur ternaire :)

http://fr3.php.net/manual/en/control-structures.while.php#65243

Ca donnerait qqch dans ce genre là :

while ($i < $fields)
{
$savior = mysql_result($resQuery, $i); // autant sauver ca dans une variable plutôt que de lancer deux fois mysql_result (enfin je pense)
echo '<option value="'.$savior.'"'; // classique...
echo ($i $j) ? ' selected>' : '>'); // opérateur ternaire> derrière le "?" c'est ce qu'on affiche si condition vraie, sinon c'est derrière le ":"
echo $savior .'</option>'; // Rien d'extraordinaire ici non plus ^^
echo "\n";

Si qqn passe par ici, je veux bien une contribution sur un résultat surprenant, dans ma contribution sur php.net j'ai tout stocké ma chaine de caractères dans une variable concaténée, hors ici ca me donne des temps de parsing monstrueux Oo comprend pas la raison néanmoins.

Voilà, monologue terminé pour l'instant ^^
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
29 août 2006 à 11:50
Je teste, si je vois des choses à modifier je tenterais ma chance :) Et je te posterais le code modifié ensuite...

Faut aussi que je taffe d'autres trucs, suis pas dév moi normalement :ane:
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
29 août 2006 à 11:22
salut ...Je viens de poster une nouvelle version ...
afficher un écran intermédiaire me semble un peu complexe et pas forcément très utile (quoique...)
Pour l'instant je vais rester sur le fonctionnement actuel ...
Mon script se destine à la base à éviter de se retapper un remplssage de bdd mysql quand on en a une déjà remplie qu'on peut exporter encsv ...lol

J'ai rajouté la possibilité de forcer un champ dans la bdd avec toujours la même valeur ... mais il reste un bug.. Si je choisis deux fois le même champ csv à droite le forcage de valeur ne marche plus ... je capte pas ... Enfin je continuerai un peu demain ..là faut que je bosse sur autre chose ;)

si tu as d'autres idées ;) n'hasites pas
++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
29 août 2006 à 10:56
Ah merde... c'est vrai que excel fait chi?r à pas proposer de caractère de terminaison pour les lignes des fichiers CSV :/

Alors voyons, tu dis que tu vérifies que chaque ligne est bien parsée, qu'est ce qui pourrait générer un problème de parsage ? Si on élimine les sources "manifestes" de bug on peut alors contourner le problème...

Car dans l'absolu le fichier CSV a un nombre fixe de colonnes, c'est son principe fondateur. Ensuite les erreurs possibles c'est soit l'utilisateur qui fait des conneries, soit le script qui s'embrouille avec les "" ou les caractères spéciaux mal échapés...

PS : un écran intermédiaire, qui afficherait dans des cellules les données parsées, et ensuite tu valides ce "super formulaire" pour insertion dans la base. Ca permettrait de modifier des valeurs, ou encore de décocher certaines lignes pour ne pas les inclures... ce genre de choses.

Enfin je sais pas trop à quoi se destine ton script à la base tu me diras ^^
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
29 août 2006 à 09:49
yep

Ne vaut-il pas mieux que ton script détecte en fonction de la première ligne le nombre de colonnes à utiliser ?

-> Je ne peux pas faire ça car cela empècherai la verrification du bon parsage des valeurs d'une ligne. Pour verrifier une ligne je compare le nombre de valeurs parsées avec le nombre de valeur normal (celui de la 1ère ligne) ... donc si automatiquement je mets le bon nombre de champs sur ma ligne ça ne marche plus et ça risque de laisser passer des erreurs .. donc pas possible.
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
28 août 2006 à 17:55
Saluté :)
Il y a des idées achement intérésantes dans ce que tu proposes ;)
Suis un peu mort ce soir là ...mais je regardai tout ça demain sans pb ;)
le coup du update ça me plait bien :)... je vais aussi implémenter la possibilité de forcer une valeur pour une colonne ou de l'avoir à NULL ;)
merci pour tes commentaires ;)
@++

ps : La table que tu as modifié au niveau mise en page c'est un bout de code que j'ai récupéré... mais bon j'ai rien à dire car je fais souvent les mêmes erreurs en html ;)

++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
28 août 2006 à 17:43
Encore moi ^^

J'ai lu ta note concernant le fait de "remplir" une colonne. Ne vaut-il pas mieux que ton script détecte en fonction de la première ligne le nombre de colonnes à utiliser ? Vu que manifestement la première ligne doit contenir le bon nombre de colonnes (et le nombre maximal d'ailleurs).

Je ne sais pas si c'est géré (car j'ai testé d'autres scripts avant en fait :D) mais pouvoir définir une "clef primaire"... si t'as un doublon ca n'insère pas les données, ca fait une mise à jour de la ligne existante ;)

Histoire de pas faire des insertions multiples comme un gros bill :)

Dernière chose qui pourait être intéressante à faire : définir une colonne à "null". J'ai une colonne de mon fichier CSV que je ne veux pas intégrer dans ma base de données, je sélectionne null et ca la rajoute pas (là si on met "choisir un colonne", note la faute d'orth au fait :D) ca fait tout chier le script ^^

Si t'as besoin d'aide, hésite pas :)
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
28 août 2006 à 17:28
J'ai fait quelques modifs, c'est purement de la mise en forme ;)

j'ai donc viré les bgcolor= car c'est caca, remplacé par des style="background-color:#fff" dans les <tr> (plus rapide et léger donc :D).

J'ai retiré des les echo "html html html"; car ca sert à rien de faire parser php sur du texte ;)

J'ai rajouté un à côté des valeurs des tables pour corriger un bug de IE : si t'as pas de valeur, ta case est vide et n'a pas de bordure... c'est pas beau. théoriquement ca se corrige avec une propriété css (empty-cell de mémoire) pour dire si tu veux toujours la bordure ou pas, mais elle fonctionne pas sous IE :)

J'ai remplacé <? par <?php car c'est plus propre en fait (sur certaines configurations de serveurs ca pose soucis si je ne m'abuse. Et puis c'est le tag "officiel" ^^

J'ai laissé la bordure de tableau à 1, juste pour le test puisque sinon on voit pas si ca s'enchaine proprement :)

function display_one_table($tablename){
//$query="show fields from $tablename";
//$result=mysql_query($query);
$result = requette ("show fields from $tablename");
$rows = mysql_num_rows($result);
?>
 Informations sur la table <?php echo $tablename?>  |

----

Field,
Type,
Null,
Key,
Default,
Extra,

<?php
while ($row  = mysql_fetch_row($result)) {
?>
----

<?php echo $row[0] ?>,
<?php echo $row[1] ?>,
<?php echo $row[2] ?>,
<?php echo $row[3] ?>,
<?php echo $row[4] ?>,
<?php echo $row[5] ?>,

<?php
}
?>



<?php
}


import.php => la fonction display_one_table ;)
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
28 août 2006 à 17:04
Pas encore testé, mais j'ai noté des erreurs dans le html (hooo).

Notament sur la gestion des tableaux... comme t'as fait ca avec border=0 t'as pas du voir, mais affiche la bordure tu devrais comprendre ;)

Note aussi : TH remplace un TD, faut donc toujours une ouverture de ligne via TR ;)

J'ai notament remarqué ces petits bugs dans la section de sélection des colonnes, par exemple ton bouton pour passer à l'étape trois il est dans un TD simple, mais il faudrait un colspan="3" puisqu'il est contenu dans une ligne avec 3 colonnes :)

Enfin : faut utiliser <?php, pas <? :D

PS : je teste ta version rapidos ;)
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
28 août 2006 à 16:20
ayé ;)
et voila une nouvelle version en ligne ...beaucoup plus fonctionnelle ;)
J'attends vos remarques et suggestions ;)
@+
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
28 août 2006 à 16:01
J'ai presque fini de gérer les erreurs sql et l'intégrité des fichiers csv ... ;)
c'est pour bientôt ;)
++
Startide Messages postés 13 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 13 septembre 2006
28 août 2006 à 15:12
Excellent !! En effet, ca gère pas les délimiteurs je crois... car j'ai un champ qui contient un ' et ca fait foirer ! mysql_escape ? ;)
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
28 août 2006 à 09:18
salut...
yes je continue d'améliorer ce code ...
pour le moment je me penche sur les délimiteurs de champs avec ou sans guillemets...
Pour les erreurs Mysql je regarderai ça après :) Je renvoie des sources dés que c'est mieux fini
++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 août 2006 à 13:10
Hello Caviar,

j'utilise -malheureusement- énormément de scripts de parsing de CSV pour insertion dans une bdd (en prod, en travail avec des clients, c'est nécessaire...).
Ce qu'il faut absolument prendre en compte : un csv a deux délimiteurs en général : la virgule ou le point virgule. Ce doit donc être une option. Les champs peuvent aussi être délimités par des apostrophes ou des guillemets ou rien.
Après, il faut parser en fonction. Pas besoin d'expression régulière à mon sens, le paring reste très simple dans tous les cas. Par contre, effectivement, prendre en compte le type des champs de la bdd est nécessaire.
De même qu'avoir un suivi des erreurs générées (donc un log), et une règle à appliquer en cas d'erreurs justement (classe à part à mon sens).
Pour automatiser, une lecture de la table (ou des tables) à mettre à jour est une bonne idéee (show table et compagnie). Cela automatise le traitement et donen moins de travail à l'utilisateur.
Ton code est une très bonne idée...et j'espère que tu vas l'améliorer :-) Je pourrai si tu veux à l'occasion t'envoyer quelques exemples de scripts, qui restent dédiés, et non génériques, selon mes besoins ponctuels au travail.
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
24 août 2006 à 11:39
pour l'idée de mettre les fichiers dans un même répertoire ...en fait ils sont dans plusieurs rep car ce petit applicatif fait partie d'un plus gros site où l'arboressence est faite de la sorte...avec plus de fichiers dans les repertoire fonctions, conf et import ... là j'ai laissé que l'éssentiel ;)
++
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
24 août 2006 à 11:32
salut, merci pour vos réponses ...
pour ma première source ça fait plaisir de voir qu'elle vous intéresse déjà ;) ...
Je vais me pencher sur les différents bugs que vous avez souligné...malheureusement je suis pas (encore) un grand developpeur (ni un dieu de l'aurtohgraffent...lol..bon passons). Enfin je vais faire mon possible :)
J'ai aussi envie de rajouter un champ de texte pour forcer à entrer une valeur dans telle ou telle colonne (avec deux "n" 8-).
J'y retourne ;)
@++
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
24 août 2006 à 06:34
ah bah en fait pour éviter les doublons, il suffit de rajouter IGNORE à côté de INSERT tout à la fin de import.php. On pourrait aussi utiliser On Duplicate key. Mais en regardant de plus près, il me semble que tu ne prends pas du tout en compte les délimiteurs de champ (")? et s'il y a un ";" dans une des valeurs, tu fais comment ? il faut que tu utilises une expression régulière pour ça. Finalement je crois que je vais attendre un peu avant d'utiliser cette source...
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
24 août 2006 à 06:00
Je repasse...
- ce serait pas mal de mettre un système qui gère les erreurs SQL, je pense en particulier aux doublons, ce qui est énervant, et pire, aux champs uniques/primaires: ça bloque. Je vais peut-être le rajouter, je reviens dire les modifs si c'est le cas.
- tant que j'y suis: requête s'écrit avec un seul "t" et colonne avec deux "n"

ah pour l'histoire de la ligne vide, je t'évite de chercher : tu remplaces ça à la ligne 296 de import.php.

if(!empty($str)){
$tabcsv[$cpt] = explode (';', $str);
$cpt ++;
}

à+
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
24 août 2006 à 05:35
Salut,
j'aime bien ta source, je pense que je vais l'utiliser !

deux ou trois remarques :
- si tu peux utiliser les ' à la place de " c'est nickel
- je ne vois pas l'intérêt de créer la fonction deconnecter(){mysql_close();}
- si le fichier csv contient une ligne vide, il en fait qd même un enregistrement
- si tu pouvais mettre les fichiers dans un même répertoire ce serait cool : trois répertoires pour trois fichiers, ça fait désordre ^^
- si on se trompe de fichier et qu'il n'a pas la bonne extension, ça fait plein d'erreurs

voilà, merci en tout cas ! je mets 8
Flux__ Messages postés 29 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 31 janvier 2007 1
23 août 2006 à 15:02
Je l'avais corriger autrement :

function tableVide($resQuery) {
$nbsChamps = mysql_num_fields($resQuery);
while($meta = mysql_fetch_field($resQuery)) {
$nom[] = $meta->name;
}
for ($i=0; $i<$nbsChamps; $i++) {
$html[$i] = "<select name="colone$i">\n";
$html[$i] .= "<option value="" SELECTED>Choisissez une colone</option>\n";
for($j=0;$j<count($nom);$j++) {
$html[$i] .= "<option value="$nom[$j]">$nom[$j]</option>\n";
}
$html[$i] .= "</select>\n";
$html[$i] .= "
\n";
}
return $html;
}

et j'ai commenté la partie du code des lignes 169 à 209

j'ai également modifier les parties suivantes :
-----------------------------------------------------------------------------------------------
for ($u=0; $u<$fields; $u++) {
$colones .= $_POST["colone$u"];

//pour ne pas ajouter de virgule apres la derniere colone on teste
if ($u < ($fields-1) && !empty($_POST["colone$u"])){
$colones .= ", ";
}
}
$colones = rtrim($colones,", ");
$colones .= " ) ";

------------------------------------------------------------------------------------------
for ($u=1; $u<=($cpt-1) ; $u++) {
$valeurs[$u] = "(" ;
//on remplis les valeurs en fonction du nb de colones
for ($m=0; $m<$fields ; $m++) {
$tempcol = "colonecsv".$m;
//on stocke la valeur sans les espaces avant et après
if (!empty($tabcsv[$u][$_POST[$tempcol]])) {
$valeurs[$u] .= '\''.addslashes(trim($tabcsv[$u][$_POST[$tempcol]])).'\'';
}
//pour ne pas ajouter de virgule apres la derniere colone on teste
if ($m < ($fields-1)){
$valeurs[$u] .= ", ";
}
}
$valeurs[$u] = rtrim($valeurs[$u],", ");
$valeurs[$u] = eregi_replace(" ,", " '',", $valeurs[$u]);
$valeurs[$u] .= " ) ";
}
------------------------------------------------------------------------------------------------
Cela me permet d'être indépendant du nombre de champs.

Dis moi ce que tu en penses ?
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
23 août 2006 à 14:20
ça y est j'ai corrigé tout ça ;) ;)
j'ai pas retesté la source mais normalement ça marche :)
++
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
23 août 2006 à 13:55
ouaip ... il faut au moins un enregistrement .. effectivement c'est un petit bug qui devrai être facile à contourner ...Je vais regarder ;)
@++
Flux__ Messages postés 29 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 31 janvier 2007 1
23 août 2006 à 10:03
Bonjour,

Le problème relevé est le suivant :
Si la table est vide alors aucun champs ne s'affiche dans la partie champs table.

Je continue de tester et tiens au courrant.

Bonne journée
Rejoignez-nous