Problème de boucles imbriquées en PHP
Résolu
hellnino
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
hellnino Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
hellnino Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Problème de boucles imbriquées en PHP
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Tv orange chargement en boucle ✓ - Forum TV & Vidéo
- Alert php ✓ - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
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 :
Si tu l'utilises dans ton delete :
Une seule requête !
Regarde déjà cette requête :
SELECT DISTINCT idAuteur FROM ecrireElle 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 :
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question