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...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
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...
Télécharger PHP FTP Synchronizer VoirLa mise à jour de site web est aussi complexe que sa conception. Alors il faut utiliser le bon outil avec les bon paramètres et une bonne connaissance de programmation pour mettre à jour un site. PHP FTP Synchronizer est une application vous...
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 - 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...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

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