Petit souci de requete et mysql_fetch_array

Petit souci de requete et mysql_fetch_array - PHP - Programmation

Marsh Posté le 20-07-2006 à 03:50:34    

Bonjour
 
Petit probleme de requete donc la voici
 

Code :
  1. $res=mysql_query("SELECT tl_name FROM folder_temp" );
  2. $data=mysql_fetch_array($res);
  3. mysql_query("DROP TABLE `folder_temp`" );
  4. $nbfolder = 0;
  5. $nbfolderold = 0;
  6. while ($data=mysql_fetch_array($res))
  7. {
  8. }


 
voici le contenu de folder_temp
 
id_folder  tl_name
1 /WINDOWS/WinSxS/Nouveau dossier/Nouveau dossier/
 
mon probleme est que quand je n'ai qu'une ligne ça ne rentre pas dans le while

Message cité 1 fois
Message édité par korben2003 le 20-07-2006 à 03:51:06
Reply

Marsh Posté le 20-07-2006 à 03:50:34   

Reply

Marsh Posté le 20-07-2006 à 10:04:41    

korben2003 a écrit :


mon probleme est que quand je n'ai qu'une ligne ça ne rentre pas dans le while


 
Si tu n'as qu'une ligne, je vois mal comment tu pourrais bien en lire une deuxième dans ton while (vu qu'il y a déjà un mysql_fetch_array plus tôt dans le code)  :heink:

Reply

Marsh Posté le 20-07-2006 à 10:39:36    

oui effectivement un petit bug de ma part debutant que je suis aie aie c'était le reste d'un test précedent
 
Merci


Message édité par korben2003 le 20-07-2006 à 11:12:13
Reply

Marsh Posté le 20-07-2006 à 11:18:36    

Bonjour
 
En fait je me rend compte que j'ai un probleme beaucoup plus imporant que je pensai car je veux lire le contenu d'une table, stocker le resultat detruire la table et lire le resultat stocke qui me permettra de réecrire dans la table vidée precedement je pensai que mon code le ferait mais visiblement je m'y prend mal avec l'array car ça ne rentre pas dans l'array.
 

Code :
  1. $res=mysql_query("SELECT * FROM folder_temp" );
  2. mysql_fetch_array($res);
  3. mysql_query("DROP TABLE `folder_temp`" );
  4. $nbfolder = 0;
  5. $nbfolderold = 0;
  6. while($data=mysql_fetch_array($res))
  7. {
  8. }


 
Merci par avance


Message édité par korben2003 le 20-07-2006 à 11:56:52
Reply

Marsh Posté le 20-07-2006 à 12:24:04    

euh, t'as rien changé à la cause du problème là...
 
Enfin, je pense que tu n'as pas (mal) compris le fonctionnement du mysql_fetch_array : un mysql_fetch_array stocke le contenu d'une ligne de resultat de ta requête dans un tableau, pas l'intégralité du dataset.
 
Donc, pour lire tous les résultats, tu dois faire une boucle

Code :
  1. while($data = mysql_fetch_array($res)){
  2. //ce que tu veux faire de la ligne de ta table
  3. }


 
et c'est seulement à la fin de la boucle que tu auras tout lu.
 
Puis, si tu as tout sauvegarder au fur et à mesure dans un tableau, tu peux parcourir le tableau avec un foreach par exemple.
 
(je m'attarderai quand même pas trop sur le coup de sauvegarder les données, effacer la table puis recopier la sauvegarde dans la même table, ça heurte un peu mon sens de la logique :D)

Reply

Marsh Posté le 20-07-2006 à 13:41:07    

en fait je fais un explorateur de fichier je trouve les chemins des repertoire je les stoke et je descend d'un niveau d'arborescence comme ça j'ai tout les fichiers avec les chemin qui sont stocker dans une autre table cette table me sert de tampon mais j'ai changé j'ai une table tampon la lit puis insert les enregistrement dans une nouvelle table tampon et je vire toutes les tables tampon en fin de script


Message édité par korben2003 le 20-07-2006 à 13:57:05
Reply

Marsh Posté le 20-07-2006 à 14:02:37    

Voici le code fonctionnel pour ceux qui veulent il est possible de ne pas supprimer les tables tampon imediatement et vous obtener le nombre de dossier par repertoire
 
exemple de variable $startfolder
 
$startfolder = "/WINDOWS/WinSxS/Nouveau dossier/";
 

Code :
  1. <?
  2. function explorer($startfolder)
  3. {
  4. include ('connexion_inc.php');
  5. $i = 0;
  6. //$res = mysql_query("SELECT count(*) FROM `folder_temp`" );
  7. //$nbr = mysql_result($res, 0);  
  8. //echo $nbr;
  9. mysql_query("CREATE TABLE IF NOT EXISTS `file_temp` (`id_filetemp` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  10. `tl_name` VARCHAR( 255 ) NOT NULL ) ENGINE = innodb;" );
  11. mysql_query("TRUNCATE `file_temp`" );
  12. mysql_query("CREATE TABLE `folder".$i."_temp` (`id_folder` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  13. `tl_name` VARCHAR( 255 ) NOT NULL ) ENGINE = innodb;" );
  14. mysql_query("INSERT INTO folder".$i."_temp (tl_name) VALUES ('".$startfolder."')" );
  15. do
  16. {
  17.  $res=mysql_query("SELECT * FROM folder".$i."_temp" );
  18.  $i++;
  19.  $nbfolder = 0;
  20.  $nbfolderold = 0;
  21.  $drop = true;
  22.  while($data=mysql_fetch_array($res))
  23.  {
  24.   $rep = $data[1];
  25.   $dir = opendir($rep);
  26.   while ($f = readdir($dir))
  27.   {
  28.    if(is_dir($rep.$f))
  29.    {
  30.     if (($f != "." ) && ($f != ".." ))
  31.     {
  32.      mysql_query("CREATE TABLE IF NOT EXISTS `folder".$i."_temp` (`id_folder` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  33.      `tl_name` VARCHAR( 255 ) NOT NULL ) ENGINE = innodb;" );
  34.      mysql_query("INSERT INTO folder".$i."_temp (tl_name) VALUES ('".$rep.$f."/')" );
  35.      $nbfolder++;
  36.     }
  37.    }
  38.    else
  39.    {
  40.     mysql_query("INSERT INTO file_temp (tl_name) VALUES ('".$rep.$f."')" );
  41.    }
  42.   }
  43.  }
  44. }while($nbfolder > $nbfolderold);
  45. for ($j = $i; $j >= 0; $j--)
  46. {
  47.  mysql_query("DROP TABLE `folder".$j."_temp`" );
  48. }
  49. }
  50. ?>


Message édité par korben2003 le 20-07-2006 à 14:11:51
Reply

Sujets relatifs:

Leave a Replay

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