Rechercher : dans
Par :

Problème de boucles imbriquées en PHP

Dernière réponse le 26 jan 2007 à 17:38:04 hellnino, le 26 jan 2007 à 15:56:29 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 1.5.0.9

Meilleures réponses pour « Problème de boucles imbriquées en PHP » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
PHP - Les classes VoirLa notion de classe Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

kij_82, le 26 jan 2007 à 16:04:54

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
	}
	
}
~ iclic @ gauch,iclic,  iclic @ droate, iclic, iclic
             et ya pas de bôg môsieu !    ~

Répondre à kij_82

2

Reivax962, le 26 jan 2007 à 16:07:27

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

Répondre à Reivax962

3

kij_82, le 26 jan 2007 à 16:10:21

Ha ben non.
Oubli ce que j'ai mis c'est inutile.

~ iclic @ gauch,iclic,  iclic @ droate, iclic, iclic
             et ya pas de bôg môsieu !    ~

Répondre à kij_82

4

Reivax962, le 26 jan 2007 à 16:30:33
  • +3

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

Répondre à Reivax962

5

 hellnino, le 26 jan 2007 à 17:38:04

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.

Répondre à hellnino
Collection CommentÇaMarche.net