Boucle while dans while

Eléphanteau du PHP | 19 Messages

06 oct. 2007, 14:50

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...

Eléphant du PHP | 443 Messages

06 oct. 2007, 14:55

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:

Eléphanteau du PHP | 19 Messages

06 oct. 2007, 15:07

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 ?

ViPHP
ViPHP | 2287 Messages

06 oct. 2007, 15:57

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 5924 Messages

06 oct. 2007, 16:07

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…

ViPHP
AB
ViPHP | 5818 Messages

07 oct. 2007, 19:28

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.. :)