Problème de boucles imbriquées en PHP

Résolu/Fermé
hellnino Messages postés 7 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 8 février 2007 - 26 janv. 2007 à 15:56
hellnino Messages postés 7 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 8 février 2007 - 26 janv. 2007 à 17:38
J'ai crée la fonction suivante en php,mais lors de son execution un problème apparait:



Notice: Undefined offset: 1 in c:\documents and settings\...\recherche.php on line 66

Notice: Undefined offset: 2 in c:\documents and settings\...\recherche.php on line 66

Notice: Undefined offset: 3 in c:\documents and settings\...\recherche.php on line 66

Notice: Undefined offset: 4 in c:\documents and settings\...\recherche.php on line 66

....

Notice: Undefined offset: 1 in c:\documents and settings\...\recherche.php on line 74


Le code est le suivant:

function verif()
{
	$lien=seConnecter();
	$i=0;
	$j=0;
	$resultat69=executerRequeteBD($lien, "SELECT idAuteur FROM auteur" );
	$nblig69=mysql_num_rows($resultat69);
	$nblig690=mysql_fetch_array($resultat69);
	
	$resultat70=executerRequeteBD($lien, "SELECT idAuteur FROM ecrire" );
	$nblig70=mysql_num_rows($resultat70);
	$nblig700=mysql_fetch_array($resultat70);
	
	for ($i=0;$i<=$nblig69;$i++)
	{
		$som=0;
		for ($j=0;$j<=$nblig70;$j++)
		{
			if ($nblig690[$i]==$nblig700[$j])   //ligne 66
			{
				$som=$som++;
			}
			
		}
		if ($som==0)
		{
			$resultat80=executerRequeteBD($lien, "DELETE FROM auteur WHERE IdAuteur='$nblig690[$i]'");   //ligne 74
		}
	}
	
}




Sachant que les erreurs notice n'empèchent apparament pas la suite de la page de s'executer,mais la fonction elle ne s'execute pas correctement.Si quelqu'un pouvait m'aider...merci
A voir également:

5 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 janv. 2007 à 16:30
Bon, en fait, j'ai encore mieux pour faire ce que tu veux faire :)
Une seule requête !

Regarde déjà cette requête :
SELECT 
  DISTINCT idAuteur
FROM ecrire
Elle te renvoit tous les ID des auteurs qui ont effectivement écrit.
Si tu l'utilises dans ton delete :
DELETE FROM auteur
WHERE idAuteur NOT IN
(
SELECT 
  DISTINCT idAuteur
FROM ecrire
)
Une seule requête qui supprime tous les auteurs qui n'ont pas écrit. Le serveur PHP préfère, le serveur MySQL aussi, sans même parler de la personne qui lit ton code : tout bénèf :)
4
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
26 janv. 2007 à 16:04
Ca ne va pas du tout !

Il ne faut pas bouclier en faisant des for, mais des while sur le résultat de tes deux premieres requetes comme suit :
function verif()
{
	$lien=seConnecter();
	$i=0;
	$j=0;
	
	$resultat69=executerRequeteBD($lien, "SELECT idAuteur FROM auteur" );	
	$resultat70=executerRequeteBD($lien, "SELECT idAuteur FROM ecrire" );

	while ( $nblig690=mysql_fetch_array($resultat69) ){
		$som=0;
		while ( $nblig700=mysql_fetch_array($resultat70) ){
			if ($nblig690[$i]==$nblig700[$j])
				$som++;
		}
		if ($som==0)
			$resultat80=executerRequeteBD($lien, "DELETE FROM auteur WHERE IdAuteur='$nblig690[$i]'");   //ligne 74
	}
	
}
1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 janv. 2007 à 16:07
Bonjour,

C'est tout simple :)
Ta fonction mysql_num_rows te dit que tu as X auteurs.
Ensuite, dans ta boucle, tu prends tous les auteurs, de 0 à X inclu. si compte, cela fait... X+1 auteurs en tout. Alors forcément, sur le dernier, il y a un problème !

Bref, tout ça pour dire que dans tes boucles for() (les deux), il ne faut pas mettre des <= mais des < stricts.

Voilà, bon courage pour la suite :)

Xavier
1
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
26 janv. 2007 à 16:10
ha ben non.
Oubli ce que j'ai mis c'est inutile.

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hellnino Messages postés 7 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 8 février 2007 1
26 janv. 2007 à 17:38
Problème résolu!!Merci a Reivax962,ta première remarque était juste mais il y avait encor d'autres problèmes aloprs que la seconde marche parfaitement et est beaucoup plus simple^^.Merci aussi a kij_82.
1