Script d'automatisation d'insertion d'infos dans une table mysql

Script d'automatisation d'insertion d'infos dans une table mysql - PHP - Programmation

Marsh Posté le 18-11-2002 à 20:52:14    

salut,
Pour mon site, à chaque fois que j'uploade un fichier, je dois l'inscrire dans la base mysql pour mon script de gestion de d/l. Mais j'ai tellement de fichiers que c'est impossible de faire ça à la main. Est-ce qu'il existe un moyen de faire un script qui recherche tous les fichiers dans le répertoire qu'on veut et qu'il inscrit ça dans la base mysql, avec les paramètres qu'on veut?
 
Le script ferait ça:
J'inscris un répertoire à scanner.
J'inscris la ligne de code que je veux insérer dans mysql.
ex: INSERT INTO fichier VALUES ('', 1, '$fichier';);
'' correspond à l'id, 1 correspond au serveur où il se trouve (à modifier manuellement, mais je pense qu'il peut le trouver auto), et $fichier correspond au fichier.
pour chaque fichier, il insère le nom du fichier dans la variable $fichier, et donc il insère ainsi ts les fichiers dans la base mysql.
 
Exemple:
Il liste le répertoire qui contient 3 fichiers. Il trouve:
test.zip
test1.ace
test2.rar
 
il crée donc ça:
INSERT INTO fichier VALUES ('', 1, 'test.zip';);
INSERT INTO fichier VALUES ('', 1, 'test1.ace';);
INSERT INTO fichier VALUES ('', 1, 'test2.rar';);
 
il n'y a même pas besoin qu'il éxécute lui même les instructions mysql, il suffit qu'il les enregistre ds un fichier .txt, et on l'utilise avec PHPMyAdmin.

Reply

Marsh Posté le 18-11-2002 à 20:52:14   

Reply

Marsh Posté le 18-11-2002 à 20:55:51    

oui

Reply

Marsh Posté le 18-11-2002 à 20:57:20    

hehe, et comment?

Reply

Marsh Posté le 19-11-2002 à 00:20:33    

Pourquoi tu n'inscris pas le nom du fichier dans ta table en même temps que tu "uploades" ton fichier ? :heink:  

Reply

Marsh Posté le 19-11-2002 à 09:10:04    

moi je pense plutôt à un script de vérif / insertion
 
tu upload ton fichier, tu lances le script il vérifie les données déjà présentes dans la base et insère les nouveaux fichiers ou mets à jour les fichiers existants.
 
simplissime ! (enfin presque)
 
l'avantage : tu lances le script pour mettre à jour quand tu veux, pas de génération de fichier supplémentaire.
 
bon bin t'as l'algo, y'a plus qu'à coder !
 


Message édité par Sh@rdar le 19-11-2002 à 09:12:21

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 19-11-2002 à 19:05:01    

Est-ce que tu peux me donner les bases (au moins) du script parce que je débute en PHP...

Reply

Marsh Posté le 19-11-2002 à 21:34:48    

Voilà ce que j'ai fait:

Code :
  1. <?
  2. //lister tous les fichiers du répertoire courant
  3. $rep=opendir('.');
  4. while ($file = readdir($rep)) {
  5. if($file != '..' && $file !='.' && $file !='') {
  6.      if (is_file($file)) {
  7. //stocker le nom des fichiers dans un tableau
  8.       $tabFichier[] = $file;
  9.      }
  10.     }
  11. }
  12. //trier le tableau
  13. sort ($tabFichier);
  14. //foreach est une instruction PHP 4 !
  15. foreach ($tabFichier AS $file) {
  16. echo "INSERT INTO fichier VALUES ('', '1', '$file')"."<BR>\n";
  17. }
  18. closedir($rep);
  19. clearstatcache();
  20. ?>


C'est déjà pas mal puisqu'il liste les fichiers et qu'il génère automatiquement les lignes de code pour mysql. Mais comment vérifier si les infos s'y trouvent déjà?

Reply

Marsh Posté le 20-11-2002 à 09:06:16    

c'est déjà très bien  ;)  
 
maintenant ce qu'il faudrait c'est générer un tableau avec les fichiers déjà présents dans la base et comparer ensuite les deux tableaux pour savoir s'il faut insérer ou pas.  
 
le meiux c'est peut être de faire cette requête en premier et de former un tableau comme ça :
 

Code :
  1. $Req = mysql_query ("select * from matable",$Maconnec);
  2. while ($val = mysql_fetch_array($Query)) {
  3.   $Fichiers['Nom'][] = $val['nom_du_fichier'];
  4.   $Fichiers['Statut'][] = -1; pour l'instant on sait pas si on doit updater ou insérer
  5. }
  6. // là on a un tableau avec les fichiers présents dans la base
  7. // on parcourt la liste du contenu du REPERTOIRE
  8. foreach ($tabFichier as $File) {
  9.   // on regarde si le fichier est déjà dans notre liste de la base
  10.   if (in_array($Fichier['Nom'],$File)) {
  11.     // si OUI on mets à jour le statut du fichier
  12.     $Fichiers['Statut'][array_search($File,$Fichiers['Nom'])] = 0; // pas besoin d'inserer un nouvelle ligne
  13.   }
  14.   else {
  15.   // sinon on ajoute un entrée dans le tableau $Fichiers pour insérer une nouvelle ligne
  16.   $Fichiers['Nom'][] = $File;
  17.   $Fichiers['Statut'][] = 1;
  18.   }
  19. }


maintenant tu peux parcourir le tableau et quand le statut = 0 tu update ou laisse, et pour 1 tu insère une nouvelle ligne, si le statut est encore à -1 alors t'as une entrée morte dans ta base (e, le fichier n'est plus là)


Message édité par Sh@rdar le 20-11-2002 à 09:09:32

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 20-11-2002 à 14:08:09    

Est-ce que tu pourras m'expliquer pas à pas comment fonctionnent ces lignes de code? Parce que là je n'arrive pas à comprendre, et à le faire fonctionner.

Reply

Marsh Posté le 21-11-2002 à 19:46:51    

STP comment le faire fonctionner?? je n'arrive pas!! :(

Reply

Marsh Posté le 21-11-2002 à 19:46:51   

Reply

Marsh Posté le 23-11-2002 à 14:00:57    

[:tomilou]


Message édité par real_mathos le 23-11-2002 à 14:01:26
Reply

Marsh Posté le 23-11-2002 à 15:03:26    

:heink:  t'aurais pas comme l'envie que je fasse le boulot à ta place ?
 

Code :
  1. // recherche dans la table : modifier la requête pour que ça  
  2. // corresponde à tes paramètres
  3. $Req = mysql_query ("select * from matable",$Maconnec);
  4. // on parcourt les résultats
  5. while ($val = mysql_fetch_array($Query)) {
  6. // on crée un tableau contenant la liste des fichiers
  7. // présents dans la table et avec comme statut
  8. // par défaut -1 (qui correspond à fichier absnet du répertoire
  9. $Fichiers['Nom'][] = $val['nom_du_fichier'];
  10. $Fichiers['Statut'][] = -1; pour l'instant on sait pas si on doit updater ou insérer
  11. }
  12. // là on a un tableau avec les fichiers présents dans la base
  13. // on parcourt la liste du contenu du REPERTOIRE que
  14. // tu as crée avec ton script plus haut donc à modifier pour que les  
  15. // variables soient les mêmes
  16. foreach ($tabFichier as $File) {
  17. // on regarde si le fichier est déjà dans notre liste de la base
  18. if (in_array($Fichier['Nom'],$File)) {
  19.    // si OUI on mets à jour le statut du fichier
  20.    $Fichiers['Statut'][array_search($File,$Fichiers['Nom'])] = 0; // pas besoin d'inserer un nouvelle ligne
  21. }
  22. else {
  23. // sinon on ajoute un entrée dans le tableau $Fichiers pour insérer une nouvelle ligne
  24. $Fichiers['Nom'][] = $File;
  25. $Fichiers['Statut'][] = 1;
  26. }
  27. }


 
ensutie y'a encore du boulot et du code à faire mais j'ai déjà écris plus haut ce qu'il faut faire. et ça devrait ressembler à ça :
 

Code :
  1. foreach ($Fichiers['Nom'] as $Key => $Val) {
  2.   if ($Fichiers['Statut'] == 1) {
  3.     $Req = mysql_query ('INSERER LES DONNEES DANS LA TABLE, LE NOM DU FICHIER EST $Val);
  4.   }
  5.   elsif($Fichiers['Statut']==-1) {
  6.     $Req = mysql_query ('ON SUPPRIME LE FICHIER DE LA BASE CAR IL N'EST PLUS DANS LE REPERTOIRE);
  7.   }


 
 


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 23-11-2002 à 18:12:57    

Non je ne veux pas que tu fasse le boulôt à ma place, mais je ne m'y connais pas trop en PHP. Voilà le script que g comlpleté, mais ça ne veut pas fonctionner, ça met:
Parse error: parse error, unexpected $ in script.php on line 65
 

Code :
  1. <?
  2. $rep=opendir('.');
  3. while ($file = readdir($rep)) {
  4. if($file != '..' && $file !='.' && $file !='') {
  5.      if (is_file($file)) {
  6.       $Fichiers[] = $file;
  7.      }
  8.     }
  9. }
  10. sort ($Fichiers);
  11. foreach ($Fichiers ['Nom'] AS $Key => $Val) {
  12. if ($Fichiers['Statut'] == 1) {
  13.    $Req = mysql_query ('Nom');
  14. }
  15. elseif($Fichiers['Statut']==-1) {
  16.    $Req = mysql_query ('Nom');
  17. }
  18. closedir($rep);
  19. clearstatcache();
  20. $hote="localhost";
  21. $login="root";
  22. $pass="";
  23. $base="test";
  24. $db = mysql_connect($hote, $login, $pass);
  25. mysql_select_db($base,$db);
  26. $Req = mysql_query ("select * from fichier",$Maconnec);
  27. while ($val = mysql_fetch_array($Query)) {
  28. $Fichiers['Nom'][] = $val['nom_du_fichier'];
  29. $Fichiers['Statut'][] = -1;
  30. }
  31. foreach ($Fichiers as $File) {
  32. if (in_array($Fichier['Nom'],$File)) {
  33.   $Fichiers['Statut'][array_search($File,$Fichiers['Nom'])] = 0;
  34. }
  35. else {
  36. $Fichiers['Nom'][] = $File;
  37. $Fichiers['Statut'][] = 1;
  38. }
  39. }
  40. ?>

Reply

Marsh Posté le 27-11-2002 à 21:42:46    

[:tomilou]

Reply

Marsh Posté le 28-11-2002 à 08:12:45    

doit y avoir une accolade de manquante, je te laisse corriger


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 24-02-2003 à 22:02:47    

Ce sujet a été laissé pour mort, n'empêche que je n'ai toujours pas réussi à le faire fonctionner et que j'en ai toujours autant besoin! alors si quelq'un pouvait m'aider... ça serait cool! :)  
 
Merci d'avance!


Message édité par real_mathos le 24-02-2003 à 22:04:41
Reply

Marsh Posté le 24-02-2003 à 23:57:46    

manque une accolade }

Reply

Marsh Posté le 09-03-2003 à 19:17:52    

Ben non ça marche tjs pas. Est-ce que qqn pourrait tester le script pour qu'il voie ce qui ne va pas? Parce qu'il y a plein d'erreurs!
 
Merci d'avance!

Reply

Marsh Posté le 09-03-2003 à 20:03:16    

ReaL_MathoS a écrit :

Ben non ça marche tjs pas. Est-ce que qqn pourrait tester le script pour qu'il voie ce qui ne va pas? Parce qu'il y a plein d'erreurs!
 
Merci d'avance!


 
Apprend le PHP. Tu viens avec des bouts de scripts qui ne sont pas de toi et que tu ne comprends pas.
 
Entraine toi déjà à faire un tableau, des boucles etc... Fais les tutos dispos sur phpdebutant.org et reviens nous voir après. ça servirait à rien de t'aider plus que ça. (Je trouve même que les gens ont été déjà particulièrement patients :D )

Reply

Marsh Posté le 10-03-2003 à 17:15:35    

ben oui mais le^problème c que je n'aurai pas besoin particulièrement du PHP, il est vraiment indispensable seulement ici. Donc je ne vois pas trop l'intérêt d'apprendre le language complet, alors qu'en plus j'ai déjà le VC++ à apprendre (!)
 
SVP Qqn pourrait-t-il m'aider?

Reply

Marsh Posté le 10-03-2003 à 17:30:36    

ReaL_MathoS a écrit :

ben oui mais le^problème c que je n'aurai pas besoin particulièrement du PHP, il est vraiment indispensable seulement ici. Donc je ne vois pas trop l'intérêt d'apprendre le language complet, alors qu'en plus j'ai déjà le VC++ à apprendre (!)
 
SVP Qqn pourrait-t-il m'aider?


 
Le PHP est bcp plus facile que le WC++ ... Quand on maitrise le C++, il faut 3 jours pour apprendre le PHP.  [:totozzz]


Message édité par Hermes le Messager le 10-03-2003 à 17:31:00
Reply

Marsh Posté le 10-03-2003 à 17:35:56    

Oui mais je ne maîtrise pas le C++ :)
 
P.S: WC++ j'en ris encore

Reply

Marsh Posté le 10-03-2003 à 17:37:56    

ReaL_MathoS a écrit :

Oui mais je ne maîtrise pas le C++ :)
 
P.S: WC++ j'en ris encore


 
Ben commence par le PHP, ce te servira de toutes façons. (En sachant que PHP est bcp bcp plus facile et permissif que le C++).

Reply

Marsh Posté le 10-03-2003 à 17:46:08    

ReaL_MathoS a écrit :

Donc je ne vois pas trop l'intérêt d'apprendre le language complet.


 
 :heink: tu vas pas aller loin en prog avec un raisonnement pareil :heink:


---------------
[ Canon EOS 30D ] (Grip + Canon 50mm f/1.4 + Canon 18-55mm USM + Tamron 70-300mm Di LD Macro)  [Galerie perso]
Reply

Marsh Posté le 11-03-2003 à 20:21:48    

[:tomilou]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed