Page 1 sur 1

Boucle while dans while

Posté : 06 oct. 2007, 14:50
par yesh
Salut c'est encore moi héhé ! bon j'ai avancé un peu dans le script mais la...j'ai des problèmes...
$retour = mysql_query('SELECT nom FROM Test ORDER BY id DESC'); 
$donnees = mysql_fetch_array($retour);
//
$handle=opendir('Test');
while (false !== ($file = readdir($handle))) 
{
	while ($donnees = mysql_fetch_array($retour))
	{ 
		if ($file != $donnees['nom'])
		{ 
    		if ($file != "." && $file != "..")
			{
				$exif = exif_read_data ($rep.'/'.$file, 0, true);
			}
		}
	}
}
apparemment il passe jamais dans le 2e while
En fait il faut simplement comparer ce qu'il y a dans un répertoire et ce qu'il y a dans la base de données. Si c'est pas le meme fichier on insert dans la BDD. Mais la mon cerveau bloque j'y arrive pas...

Posté : 06 oct. 2007, 14:55
par Tracker
Ben si pour le premier résultat de readdir, qui doit être '.'
Pour lui tu parcours ton resultat SQL complètement. Pour les valeurs suivantes de readdir, la fonction fetch retourne toujours false, normal tu as déjà tout lu... :D

Réfléchis à ce que tu as fait !!!
[edit]
Si je me permettais j'ajouterais: :langue:

Posté : 06 oct. 2007, 15:07
par yesh
bin justement c'est ça que je dis mon cerveau devient trop mou

bref, j'ai toujours pas compris. moi je fais de l'action script pour ça pas de prob mais php c'est encore obscur :evil:

donc je vais aller faire un tour et réfléchir comment on peut comparer 2 boucles. Il faut une deuxième boucle qui est lancée à chaque occurence de la première non ?

Posté : 06 oct. 2007, 15:57
par Calimero
bin justement c'est ça que je dis mon cerveau devient trop mou

bref, j'ai toujours pas compris. moi je fais de l'action script pour ça pas de prob mais php c'est encore obscur :evil:

donc je vais aller faire un tour et réfléchir comment on peut comparer 2 boucles. Il faut une deuxième boucle qui est lancée à chaque occurence de la première non ?
Tu peux, mais ce n'est pas la meilleure façon de faire.

Tu pourrais par exemple :

- boucler sur les fichiers (ce que tu sais déjà faire)
- pour chaque fichier, vérifier s'il est renseigné dans la base en le demandant directement en SQL
- Si oui, traitement....
- Si non, traitement...

Et voilà le travail :-)

Peut-être te faut-il apprendre un peu les possibilités du langage SQL.

Posté : 06 oct. 2007, 16:07
par Sékiltoyai
Ou faire un tableau de chacun des deux résultats (la lecture du dossier et de la table) et faire l'intersection des deux tableaux avec array_intersect(), ce qui permet de ne pas faire 50 requètes SQL, et qui est plus performant puisque tout ce qui fait appel à un serveur SQL ou à un traitement en php est plus lent qu'un traitement direct par les fonctions fournies par php ou ses modules.

Ensuite il ne reste plus qu'à lire le tableau obtenu pour savoir quels sont les fichiers présents en base et sur le système de fichier…

Posté : 07 oct. 2007, 19:28
par AB
La méthode de Sékiltoyai est certainement la meilleure mais pour ce que veux faire Yesh, il me semble que array_diff() serait plus adapté pour comparer les tableaux, à moins que j'ai manqué quelque chose.
En fait il faut simplement comparer ce qu'il y a dans un répertoire et ce qu'il y a dans la base de données. Si c'est pas le meme fichier on insert dans la BDD. Mais la mon cerveau bloque j'y arrive pas
Edit : Ok je viens de voir que Yesh avait eu cette réponse dans un post suivant.. :)