IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Demande d'avis pour charger un fichier dans une BDD


Sujet :

JavaScript

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par d�faut Demande d'avis pour charger un fichier dans une BDD
    Bonjour,

    Je viens vous demander vos conseils parce que je ne suis pas du tout un expert du javascript / php.

    Dans une page web, l'utilisateur s�lectionne un fichier CSV et fait un mapping entre les colonnes du fichier (1�re ligne du fichier) et des colonnes cibles qui permettront de charger ces donn�es dans une table de la base de donn�es.
    Pour le mapping, c'est OK.
    Ensuite, j'avais dans l'id�e de transmettre depuis javascript les donn�es (fichier + mapping) � une page PHP pour ins�rer les donn�es du fichier dans la BDD.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        const url = 'get_mapping.php';
        const method = 'post';
        const xhr = new XMLHttpRequest();
        const data = new FormData(form);
        data.append("my_file", data);
     
        xhr.open(method, url);
        xhr.send(data);
    Mais avec cette m�thode, j'ai l'impression que :
    • Je ne peux pas tester le script PHP (tout se fait en arri�re plan)
    • Je ne pourrai jamais r�ussir � r�cup�rer les �l�ments de la page web pour conna�tre le mapping fait par l'utilisateur
    • L'envoi d'un fichier via XMLHttpRequest n'est pas vraiment adapt�


    J'aimerais me tromper mais je voudrais savoir si j'ai raison ?
    Et si �a n'est pas la bonne m�thode, pourriez-vous m'�clairer sur la meilleure fa�on de faire ?

    Merci beaucoup pour votre aide !

  2. #2
    Expert confirm�
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 660
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 660
    Par d�faut
    est ce que le mapping se fait enti�rement en javascript sans envoyer le fichier au serveur ?

    si c'est le cas, vous avez le contenu du fichier dans une variable javascript donc vous pouvez envoyer ce contenu � un script php.
    cela peut se faire sans probl�me avec la fonction fetch et une requ�te post (https://developer.mozilla.org/fr/doc.../fetch#exemple)

    et ensuite un bout de code en php permet de faire toutes les �tapes suivantes
    1. lecture du contenu du fichier
    2. analyse du contenu csv pour le d�couper en enregistrements et colonnes (https://www.php.net/manual/fr/function.fgetcsv.php)
    3. insertion de ces donn�es dans la base de donn�es


    pour d�buger la requ�te d'envoi des donn�es, vous pouvez utiliser l'onglet "R�seau" de la console de d�veloppement de votre navigateur.
    par exemple avec Firefox, faites Ctrl + Maj + E
    https://developer.mozilla.org/fr/doc...ur_r%C3%A9seau

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par d�faut
    Bonjour Mathieu,

    Merci beaucoup pour toutes ces infos, �a me permet d'avoir toutes les cl�s en main. Je ne connaissais pas cette fonction de la console et c'est tr�s pratique.

    Apr�s avoir ram� tout l'apr�s-midi, j'ai enfin r�ussi � faire fonctionner la fonction fetch. C'est la solution parfaite pour pouvoir envoyer plusieurs objets � la page PHP.

    Mais j'ai remarqu� que j'ai un probl�me pour des fichiers volumineux. Apr�s 2 secondes, le fetch s'arr�te quoiqu'il arrive et le fichier n'est pas upload�. J'ai trouv� cette vid�o qui est cens�e r�gler le probl�me :


    Mais est-ce qu'il y aurait plus simple ?
    Merci

  4. #4
    Expert confirm�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par d�faut
    Citation Envoy� par bart64 Voir le message
    Bonjour Mathieu,
    Mais j'ai remarqu� que j'ai un probl�me pour des fichiers volumineux. Apr�s 2 secondes, le fetch s'arr�te quoiqu'il arrive et le fichier n'est pas upload�. J'ai trouv� cette vid�o qui est cens�e r�gler le probl�me :
    Mais est-ce qu'il y aurait plus simple ?
    Merci
    Fort possible que tu d�passe les limitations "upload_max_filesize" et/ou "post_max_size" de ton serveur. Ce sont ces valeurs qui limitent la taille des fichiers pouvant �tre upload�s. Le plus simple est d'augmenter ces valeurs suffisamment pour ne plus avoir ce probl�me.

    Mais effectivement si tu n'as pas acc�s � ces r�glages c'est beaucoup moins simple, car il faut couper les fichiers en morceaux (d'o� les instructions "chunk" que tu vois dans le code de ta vid�o) � une taille inf�rieure aux valeurs "upload_max_filesize" et "post_max_size" de ton serveur lors de l'envoi du formulaire, et recoller les morceaux c�t� serveur en php quand ils ont tous �t� charg�s, ce qui n�cessite donc plusieurs requ�tes ajax.

    Il existe un module d'upload ajax/php ici qui fait �a de fa�on transparente. Il suffit de t�l�charger le fichier sur ton ordinateur, de le d�zipper, puis de mettre le dossier sur ton serveur php. Ensuite tu pourras tester directement (sans aucune configuration n�cessaire) les nombreux exemples pr�ts � l'emploi, et tu verras que tu peux t�l�charger des fichiers de n'importe quelle taille, sans avoir � modifier tes limitations serveur.

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par d�faut
    Merci ABCIWEB !!

    Effectivement, tu as raison, c'est la limitation de la taille du fichier dans le php.ini qui me bloque. Ta solution m'a l'air super : pas besoin d'avoir acc�s au php.ini, on peut l'utiliser partout.
    J'ai pu importer un gros PDF avec le module de test, �a fonctionne parfaitement.

    Pour le moment, je n'ai pas encore r�ussi � importer mon CSV. J'ai bien autoris� l'extension dans le javascript et dans le php mais j'obtiens l'erreur "Echec du t�l�chargement. Type de fichier non valide.".
    Je n'ai pas encore assez cherch� d'o� �a peut venir.

    Je continue mes recherches.

    Un grand merci !

    PS : je mettrai le post en r�solu une fois que mes CSV s'importeront ( je te tiendrai au courant ).

  6. #6
    Expert confirm�

    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par d�faut
    Citation Envoy� par bart64 Voir le message
    Merci ABCIWEB !!

    Effectivement, tu as raison, c'est la limitation de la taille du fichier dans le php.ini qui me bloque. Ta solution m'a l'air super : pas besoin d'avoir acc�s au php.ini, on peut l'utiliser partout.
    J'ai pu importer un gros PDF avec le module de test, �a fonctionne parfaitement.

    Pour le moment, je n'ai pas encore r�ussi � importer mon CSV. J'ai bien autoris� l'extension dans le javascript et dans le php mais j'obtiens l'erreur "Echec du t�l�chargement. Type de fichier non valide.".
    Je n'ai pas encore assez cherch� d'o� �a peut venir.

    Je continue mes recherches.

    Un grand merci !
    Effectivement il peut y avoir des probl�mes de contr�le de type MIME pour certaines extensions. Aussi la classe d'upload serveur permet d'exclure certaines extensions du contr�le de type MIME.

    Dans ton cas pour autoriser les fichiers ayant les extensions PDF et CSV tout en excluant les fichiers CSV du contr�le du typt MIME :

    Code php : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //...
    $config = [
    "dossier_destination" => $dossier_destination,
    "extensions" => ["csv","pdf"],// extensions autorisées
    "verif_type_MIME" => ["except" => ["csv"]] // Extensions dont le type mime ne sera pas contrôlé. Tu pourrais compléter le tableau des exceptions si besoin par exemple ["except" => ["csv","MTS","mt2s"]]
    ];
     
    $up = new UploadAjaxABCIServeur($config);
    //...
    Voir ce paragraphe pour la configuration de la classe php d'upload.

    A noter qu'� d�faut du contr�le de type MIME, il est vivement conseill� (notamment si ton module d'upload est en acc�s libre) de v�rifier la validit� du fichier par exemple en tentant de l'ouvrir avec php ou d'effectuer des op�rations sur ce fichier avec php, avant de le transf�rer dans son emplacement d�finitif. C'est un autre moyen de v�rifier sa validit�.

    Mais si j'ai bien compris, ton ficher csv doit servir � alimenter une bdd donc fatalement tu va l'exploiter avec php avant de peut-�tre le sauvegarder sur ton serveur. L'absence de contr�le de type MIME ne posera donc pas de probl�me puisque si ce n'est pas un fichier CSV, php va buguer et renvoyer une erreur.

    Note aussi que si tu ne souhaites pas transf�rer le fichier csv sur ton serveur (si inutile d�s qu'il a renseign� ta bdd) consultes ce lien. Et enfin pour connaitre l'extension du fichier et adapter le code suivant son extension utilises les m�thodes serveur. De nombreux exemples de code sont fournis dans le dossier "Php_Upload" qui regroupe les fichiers utilis�s c�t� serveur.

    Enfin si tu as d'autres questions sur ce module d'upload, utilises ce topic, je te r�pondrai d�but de semaine prochaine.

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 277
    Par d�faut
    Merci pour toutes ces pr�cisions, c'est top ! Gr�ce � ton aide, j'ai r�ussi � faire fonctionner ce module sur mon site, c'est vraiment parfait, �a r�pond exactement � ma question.

    Je vais poser une question compl�mentaire sur le lien que tu m'as donn�.

    Bonne fin de WE !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 5
    Dernier message: 14/05/2006, 12h57
  2. [forms 6i] charger un fichier dans une table avec sqlloader
    Par moneyinthebank dans le forum SQL*Loader
    R�ponses: 8
    Dernier message: 29/04/2006, 01h15
  3. Charger un fichier dans une table
    Par luchot dans le forum PostgreSQL
    R�ponses: 2
    Dernier message: 07/02/2006, 17h21
  4. Charger un fichier dans une textarea
    Par boux2 dans le forum Langage
    R�ponses: 2
    Dernier message: 28/01/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo