Problème de boucles imbriquées en PHP
Résolu
hellnino
Messages postés
7
Statut
Membre
-
hellnino Messages postés 7 Statut Membre -
hellnino Messages postés 7 Statut Membre -
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:
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
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
Configuration: Windows XP Firefox 1.5.0.9
5 réponses
-
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 :) -
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 } } -
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 -
ha ben non.
Oubli ce que j'ai mis c'est inutile.
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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.