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

PHP & Base de données Discussion :

Insertion de fichiers dans bdd [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut Insertion de fichiers dans bdd
    Bonjour,

    j'ai lancé il y a quelque jour une discussion qui s'intitule : "stratégie à adopter pour moteur de recherche" si jamais vous voulez connaitre exactement le projet que je dois réaliser aller jeter un coup d'oeil.

    j'ai un petit soucis au niveau du remplissage de mes tables. Je dois insérer une centaine de fichier dans une table et je ne sais pas trop comment m'y prendre. Je pensais a deux solutions : rentrer les fichiers à la mains (pas très bon au niveau du temps) ou utiliser un INSERT INTO mais je ne sais pas comment il fonctionne pour insérer plusieurs fichiers d'un coup. J'ai créer un script avec la fonction listing pour lister mon répertoire et vous l'avez compris il faut que j'insère maintenant les fichiers.

    Si vous connaissez une meilleur technique pour les insertions je vous remercie de m'en faire part ou si quelqu'un pourrait m'expliquer la démarche et syntaxe a suivre avec INSERT INTO avec insertion de plusieurs fichiers à la fois ce serait simpa.

    Merci de votre attention

  2. #2
    Membre actif
    Avatar de maxime.ohayon
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 113
    Points : 226
    Points
    226
    Par défaut
    Je n'ai pas bien compris ton histoire d'insertion de fichier, quest ce que tu appeles fichiers, du texte ?

    Max
    Faut faire l'ane pour avoir de l'avoine

  3. #3
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par maxime.ohayon
    Je n'ai pas bien compris ton histoire d'insertion de fichier, quest ce que tu appeles fichiers, du texte ?

    Max
    En faite mon projet est de créer un moteur de recherche qui affichera suivant la saisis de l'utilisateur les traductions de séquences(fichier pdf) de l'entreprise.

    J'ai lister mon repertoire et maintenant à l'aide d' INSERT INTO remplis une table de ma base de donnée. Le problème est que mon insert into m'envois 8fois le même fichier dans ma table.

    Voila une partie de mon script :

    $query = "INSERT INTO automate (id_instal, id_ue, id_bat, source, pdf) VALUES ('1', '1', '1', './dossier1', 'session.pdf')"

    $mysql_query($query);

    Si besoin est, je vous enverrais le script complet ce soir car je suis sur le poste libre internet de l'entreprise,
    en tout cas merci de votre attention

  4. #4
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    tu veux ajouter le fichier ou le chemin du fichier ?

    quoi qu'il en soit si tes fichiers se trouve sur ton serveur tu dois faire une boucle par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($handle = opendir('/chemin/vers/fichiers')) {
        while (false !== ($file = readdir($handle))) {
              if ($file!='.' && $file!='..') $query = "INSERT INTO automate (id_instal, id_ue, id_bat, source, pdf) VALUES ('1', '1', '1', '/chemin/vers/fichiers', $file)";
        }
        closedir($handle);
    }
    deY!

  5. #5
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Ok merci pour ton aide =)

    Je vous montre quand même mon script, dites moi plutôt ce que vous en pensez ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
     
    function lister($chemin)
    {
    $tab = array();
     
       $nom_repertoire = $chemin;
     
       $pointeur = opendir($nom_repertoire);
     
       while ($fichier = readdir($pointeur))
        {
          if(($fichier != '.') && ($fichier != '..'))
           {
             if (is_dir($nom_repertoire.'/'.$fichier))
             {
                lister($nom_repertoire.'/'.$fichier);
             }
    		$tab[]=$nom_repertoire.'/'.$fichier;
           }
        }
        foreach($tab as $value) 
    	{
    	$var = "INSERT INTO automate (id_instal, id_ue, id_bat, id_secteur, source, pdf) VALUES ('1','1','1','1','./dossier1','CC MA U31 CO Régulation chaudière 3 (fr) (Ed 1) R.PDF')";
     
    	mysql_query($var) or die ("Erreur dans \"$var\"");
    	}
     
        closedir($pointeur);
    }
    ?>
    Ce script envois bien le fichier dans la table mais huits fois comme je vous l'ai marqué au dessus... donc si quelqu'un pourrait me donner un petit coup de main, ca ne me jénerais pas

    A ce petit problème s'en ajoute un autre, les liens ne fonctionne pas avec ce script fesant partie de mon exploitation des résultats peut-être car ils sont sur le serveur comme tu le disais deY mais je n'ai pas encore eut le temps de réfléchir à la question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    if ($row > "0") {
     
    		echo "
     
    			<a name=\"#resultat\"><center><b>Résultat : Il y a ".$row." article(s) trouvé(s)</b></center></a><br><br>
    			<p>";
    	}
     
    		$row = mysql_num_rows($result);
    		 for($i=0;$i<$row;$i++){
    			$fetch = mysql_fetch_array($result);
     
    			echo '<p><b>'.$i+1 .'</b><a href="'.$fetch['source'].'/'.$fetch['pdf'].'"> '.$fetch['pdf'].''.$fetch['source'] .'/'. $fetch['nom_bat'].'/'.$fetch['nom_ue'].'/'.$fetch['nom_secteur'].' </a><p><br />';
    		 }
    Voila, merci à tous

  6. #6
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Tu te complique la vie pour rien je trouve... pour stocker dans un tableau si tu peux l'utiliser directement ? et dans ta boucle foreach, lors de l'insertion tu n'utilise nul part les valeur de ton tableau.
    deY!

  7. #7
    Membre actif
    Avatar de maxime.ohayon
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 113
    Points : 226
    Points
    226
    Par défaut
    Salut bon j'ai peut etre une solution
    je te conseil de faire les insertions à chaque tour de boucle et non à la fin c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function lister($chemin)
    {
       $nom_repertoire = $chemin;
     
       $pointeur = opendir($nom_repertoire);
     
       while ($fichier = readdir($pointeur))
        {
          if(($fichier != '.') && ($fichier != '..'))
           {
             if (is_dir($nom_repertoire.'/'.$fichier))
             {
                lister($nom_repertoire.'/'.$fichier);
             }
           // ici insertion de ton fichier 
             $var = "INSERT INTO automate (id_instal, id_ue, id_bat, id_secteur, source, pdf) VALUES ('1','1','1','1','./dossier1','CC MA U31 CO Régulation chaudière 3 (fr) (Ed 1) R.PDF')"; 
             mysql_query($var) or die ("Erreur dans \"$var\""); 
           }
        }
     
    closedir($pointeur);
     }
    Voila
    Faut faire l'ane pour avoir de l'avoine

  8. #8
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Merci pour vos réponses ! =)

    Par contre pour rentrer tout mes fichiers je reproduis chaque insert into pour chaque fichier ? il n'y en a une centaine quand même...

    Le tableau que j'avais inclus m'aurait servis justement a stocker mes fichiers mais bon j'avou que mon script n'étais pas clair pour cette idée. Enfin si vous pouvez m'éclairer... ^^

  9. #9
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    tu es obligé d'executer une insertion pour chaque fichier de toute maniére, mais au niveau code, tu n'auras qu'une seule requete qui aura des variable php récuperer de ta boucle.
    deY!

  10. #10
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    C'est ce que je pensais mais bon je trouvais que ca fesait gros au niveau du temps mais bon s'il faut le faire ainsi...

    Par contre maxime j'ai testé ton script et il ne me résoud toujours pas mon problème au niveau de l'insertion. Il me rentre le fichier encore huits fois, si vous avez une idée du pourquoi...???

  11. #11
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Ah ben en faite c'est bon je viens de trouver le problème, il fallait que je mettre $value à la place de mon nom de fichier dans ma requete car je ne reprenais pas les valeurs de mon tableau. La requete m'envois bien dans ma bdd tout les fichiers et dossiers de mon repertoire.

    Il me reste maintenant a récupérer dans mon tableau les chaînes de caractères, et dire que je prend ce qui est d'un certain endroit à un autre dans la chaine de caractère. J'espère que vous saisissez...
    Si vous préférez, il faut que je traite une arborescence et faire comprendre à l'ordinateur que ceci correspond au secteur,ça au nom de batiment etc, le tout dans une chaîne de caractère. On ma conseiller une fonction strlen, quelqu'un a t-il une autre idée pour exploiter les valeurs de mon tableau?

    Je suis arrivé à la dernière ligne droite de mon projet et j'avou que c'est la partie qui me pose le plus de problème au vue de mon manque d'expérience pour ce qui est de récupérer les valeurs d'un tableau. Si différente méthode vous viens à l'esprit, merci de m'en faire part. Sur ce je retourne sur mon poste, réfléchir au sujet, et repasserais toute à l'heure,

    bonne journée

  12. #12
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    <?php

    Me revoila avec une idée plus clair que sur le message précédent mais malheuresement pas de réponse

    M'enfin j'ai continuer à avancer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    function lister($chemin)
    {
    $tab = array();
     
       $nom_repertoire = $chemin;
     
       $pointeur = opendir($nom_repertoire);
     
       while ($fichier = readdir($pointeur))
        {
          if(($fichier != '.') && ($fichier != '..'))
           {
             if (is_dir($nom_repertoire.'/'.$fichier))
             {
                lister($nom_repertoire.'/'.$fichier);
             }
    		$tab[]=$nom_repertoire.'/'.$fichier;
           }
        }
        foreach($tab as $value) 
    	{
    $strtab = explode($value, "/");
     
    	$var = "INSERT INTO automate (id_instal, id_ue, id_bat, id_secteur, source, pdf) VALUES ('1','1','1','1','./dossier1','CC MA U31 CO Régulation chaudière 3 (fr) (Ed 1) R.PDF')";
     
    	mysql_query($var) or die ("Erreur dans \"$var\"");
    	}
    ?>
    Admettons que j'ai ce lien :

    L://secteur pesage/UPA/Dextrose/session.pdf

    Que me manque t-il pour que les valeurs que je rentre dans ma requete ne soit pas écrite en dur??? C'est à dire qu'il faut que la valeur change pour un fichier précis, par exemple le secteur ne sera pas toujours celui présent dans le lien ci-dessus. La valeur ne sera donc pas toujours "1"...

    De plus, en fesant comme suit je ne serais pas obligé de reproduire un insert into pour chaque fichier (ce qui m'embété beaucoup) car la requête jère l'arborescence et enverra dans mon tableau tout les fichiers présent sur celle-ci. D'ou l'utilité d'un tableau pour n'avoir qu'une seule et même requête pour jérer tout les fichiers.

    Mais comme je vous l'ai dis, comment faire pour que les valeurs varie selon les fichiers???

  13. #13
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    2 choses... c'est quoi lister() ?

    ensuite pour tant de boucle ?....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(($fichier != '.') && ($fichier != '..'))
           {
             if (is_dir($nom_repertoire.'/'.$fichier))
             {
                lister($nom_repertoire.'/'.$fichier);
             }
    $var = "INSERT INTO automate (id_instal, id_ue, id_bat, id_secteur, source, pdf) VALUES ('1','1','1','1',$nom_repertoire,$fichier)";
     
    	mysql_query($var) or die ("Erreur dans \"$var\"");
           }
    deY!

  14. #14
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Lister me sert juste a lister mon répertoire. Par contre je ne vois pas ce que tu veux dire quand tu parles de boucle !? en tout cas c'est simpa de rester fidèle au sujet deY !

  15. #15
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    jsuis d'accord avec ton while, mais pas avec ton foreach... tu créer et executes ta requête directement dans le while.

    elle vient d'où cette fonction lister ?
    deY!

  16. #16
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Je me suis inspiré d'un script que j'ai trouvé ainsi que de la doc que j'ai sur ma clé(genre manuel php). Pour ce qui est du foreach il me permet d'y inclure mon explode afin de regarder dans les champs de mon tableau et il devrait me permettre aussi de récupérer les valeurs de mon tableau. Ceci dit il manque des choses !

    Mon problème est maintenant de récupérer les valeurs de mon tableau pour pouvoir les insérer dans ma bdd à l'aide d'une requête...Je cherche, je cherche et n'avance pas beaucoup ce qui est assez frustrant au vue de la fin de mon projet qui interviendra surement après avoir trouvé la solution.

  17. #17
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    est-ce que tu as regarder le code que j'ai mis ?
    il insére chaque chemin et nom des fichiers... ensuite pour recup tu fais un select
    deY!

  18. #18
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Oui oui t'inquiète pas j'ai bien regarder ton script mais mise à part que j'inclus un tableau dans le mien, ils sont semblables avant d'arriver sur le foreach. Ce qu'il me faut c'est une requête capable de stocker et de récupérer les valeurs de mon tableau...

    pour être plus simple oublions le foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    function lister($chemin)
    {
    $tab = array();
     
       $nom_repertoire = $chemin;
     
       $pointeur = opendir($nom_repertoire);
     
       while ($fichier = readdir($pointeur))
        {
          if(($fichier != '.') && ($fichier != '..'))
           {
             if (is_dir($nom_repertoire.'/'.$fichier))
             {
                lister($nom_repertoire.'/'.$fichier);
             }
    		$tab[]=$nom_repertoire.'/'.$fichier;
           }
        }
    //si quelqu'un a une autre idée que foreach, n'hésitez pas à proposer
     
        foreach($tab as $value) 
    	{
     
    //les valeurs étant des arborescences, donc chaine de caractère, je me sers d'explode pour faire comprendre a l'ordinateur qu'à chaque "/" cela correspond à un id différent (comme id_bat pour les id des differents batiments, dans l'exemple ci dessous = Glucoserie)
    URL du type : L://Secteur era/UPA/glucoserie/test.pdf
     
                 $strtab = explode($value, "/");
     
    // ici besoin d'une requête pour récupérer les valeurs
     
    ---------------------------------------------------
     
    //insertion de mes valeurs dans bdd
     
    $var = "INSERT INTO automate (id_instal, id_ue, id_bat, id_secteur, source, pdf) VALUES ('1','1','1','1','./dossier1','CC MA U31 CO Régulation chaudière 3 (fr) (Ed 1) R.PDF')";
     
    	mysql_query($var) or die ("Erreur dans \"$var\"");
    	}
    ?>
    voila je vous ai indiqué l'endroit dans le script ou j'ai besoin d'un petit coup de main, pour récupérer les valeurs.

  19. #19
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    ben utilise tes variable repertoire et fichier, fais ta requete et garde ton tableau
    deY!

  20. #20
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par deY!
    ben utilise tes variable repertoire et fichier, fais ta requete et garde ton tableau
    C'est pas pour être contrariant que je fais comme suit tu sais ! Je suis un peu obligé...comment veux-tu que je rentre ma centaine de fichier sans les stocker dans un tableau avant en sachant qu'ils sont sur le serveur ??? Si tu as la solution, je t'écoute !

    A moins que tu sois prêt a taper 100fois d'affiler INSERT ... INTO... ou alors c'est que je ne comprend pas ce que tu veux me dire.

    bref je vais de ce pas créer une discution plus aproprié à l'intitulé. Merci de vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/11/2008, 12h33
  2. Inscription de fichier dans BDD
    Par jmjmjm dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/04/2008, 13h49
  3. Réponses: 12
    Dernier message: 20/12/2007, 17h24
  4. [MySQL] sauvegarder des fichiers dans bdd
    Par etud_ini dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/09/2007, 22h47
  5. Insertion code html dans bdd
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/04/2004, 15h03

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