Erreur d'offset

Eléphanteau du PHP | 23 Messages

09 mai 2005, 19:23

Bonjour,
J'aimerais que l'on m'explique pourquoi a la fin de l'execution de mon fichier je vois apparaitre un message d'erreur de ce style: "Undefined offset".
Qu'ai-je fé comme boulette, pour avoir une erreur d'offset?

voici le code :
<?php
	$fichier = "vente.txt";
	if (file_exists($fichier))
		$fp = fopen($fichier, "r"); // le fichier existe, on l'ouvre
	else								// le fichier n'existe pas
	{ 	
		echo "Fichier introuvable !<br />Importation stoppée.";
		exit();
	}
	// On parcours le fichier
	while (!feof($fp))
	{ 
		$ligne = fgets($fp,4096); // On se déplace d'une ligne
		// Les champs séparés par les caractères " et , on éclate la chaine de caractère pour supprimer le caractère " et on en fait un tableau
		$liste = explode('"' , $ligne); 
		//On affiche les 2 premiers parametres.
		echo "Param1: ".$liste[1]."&nbsp; &nbsp; &nbsp; Param2: ".$liste[3]."<br>";
	}
	fclose($fp); // Fermeture du fichier
?>

voici le résultat :

Param1: V0010043 Param2: M
Param1: V0010048 Param2: M
Param1: V0010049 Param2: M

...

Param1: V0010230 Param2: M
Param1: V0010234 Param2: M
Param1: V0010236 Param2: A

Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\moulinette\moulinette.php on line 17

Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\moulinette\moulinette.php on line 17
Param1: Param2:



Merci.

ViPHP
ViPHP | 1380 Messages

09 mai 2005, 19:27

As-tu fait un print_r de ton tableau $liste pour voir de combien d'éléments il était constitué?
ripat

Eléphanteau du PHP | 23 Messages

10 mai 2005, 13:02

Oui j'en ai une centaines. :wink:
C'est pour faire de l'extraction des données existante, choisir les attributs necessaire et réinjecter sur MySQL.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

10 mai 2005, 13:25

Revois ton code :
...
$ligne = fgets($fp,4096); // On se déplace d'une ligne 
        // Les champs séparés par les caractères " et , on éclate la chaine de caractère pour supprimer le caractère " et on en fait un tableau 
        $liste = explode('"' , $ligne); 
        //On affiche les 2 premiers parametres. 
        echo "Param1: ".$liste[1]."&nbsp; &nbsp; &nbsp; Param2: ".$liste[3]."<br>"; 
...
tu fais un echo de l'offset 1 et 3 du tableau $liste créé par l'explode, mais tu n'es même pas sure qu'un des explodes puisse créer les créer et notamment la dernière lecture dans le fichier qui atteint EOF.

Quand un FGETS atteint EOF il retourne null ce qui veut dire que la dernière $liste que tu explode est nulle (les offset 1 et 3 n'existe alors pas)

Pour passer ce problème logique il faut tester $liste après la lecture FGETS. Et ce n'est pas terminé pour toi, il faut aussi s'assurer que la longueur de $liste dépasse l'offset 3 que tu utilise dans l'echo.

Correction :
...
$ligne = fgets($fp,4096); // On se déplace d'une ligne
// Les champs séparés par les caractères " et , on éclate la chaine de caractère pour supprimer le caractère " et on en fait un tableau
$liste = explode('"' , $ligne);
//On affiche les 2 premiers parametres.
if ($liste != null && count($liste) > 3) {
echo "Param1: ".$liste[1]."&nbsp; &nbsp; &nbsp; Param2: ".$liste
[3]."<br>";
}
....
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 23 Messages

10 mai 2005, 14:58

Arf! tout juste j'y avais pas pensé.
Merci beaucoup.