Page 1 sur 1

Undefined offset

Posté : 28 oct. 2009, 15:22
par Riesu
Bonjour !

Je post ici car je pense que c'est le meilleur endroit pour avoir une réponse à mon problème.

Je suis entrain de développer un script qui permet d'insérer les données d'un fichier texte dans ma base MysqL.

Je bloque depuis plusieurs jours avec l'erreur Undefined offset, j'ai fait pas mal de recherche(ma variable est vide oui) et testé pas mal de fonctions(isset,empty,var_dump,etc..) mais ça n'a rien changé.

Voici monde code:
<?php

	require('include/fonctions.php');
	
	//On indique le début du script pour avoir le temps d'éxécution de la page
	$debut = TempsExecutionPage();
	
	include_once('include/sql_conf.php');
	
	mysql_connect($host,$user,$pwd);
	mysql_select_db($db);

	//On vide la table pour éviter d'avoir des doublons
	mysql_query("TRUNCATE TABLE test");
	
		//Ouverture de donnees.txt avec l'autorisation de lecture
		$fichier = fopen('D:/www/xxx/include/donnees_2.txt', 'r'); 
		//On continue la boucle tant qu'on est pas arrivé à la fin du fichier
		while (!feof($fichier)) 
{ 
	//On récupère toute la ligne
	$ligne = fgets($fichier);
	//On indique le séparateur '|' de $fichier
	$valeur = explode('|', $ligne); 
	

		//Préparation et insertion de la requete sql, 9 champs max
		$sql="INSERT INTO test (ip_disk,code,nom_disk,type,version_navisphere,f,machine_connectee,h,i) VALUES ('".$valeur[0]."', '".$valeur[1]."', 
									   '".$valeur[2]."', '".$valeur[3]."', 
									   '".$valeur[4]."', '".$valeur[5]."', 
									   '".$valeur[6]."', '".$valeur[7]."',
									   '".$valeur[8]."')"; 
				

		$requete=mysql_query($sql) or die (mysql_error()); 
		

}
	if($requete==$sql)
	{
	echo ('L\'import de données dans la bdd s\'est effectué correctement !');
	}
	else
	{
	echo('Erreur, la requête n\'a pas pût être éxécutée!');
}
fclose($fichier);
//On affiche le temps d'éxécution du script en secondes avec 4 chiffres après la virgule	
echo '<br><br>Importation de données faite en ' . round(TempsExecutionPage() - $debut,4).'secondes.';
?>
En vous remerciant :).

ps: je ne peux m'inscrire car actuellement je suis au boulot.

Re: Undefined offset

Posté : 28 oct. 2009, 15:33
par fab
On pourrait avoir le message d'erreur exact? Sinon là a vu de nez je pense que ça vient de ton tableau $valeur qui ne doit pas avoir 8 valeurs dedans :)

Re: Undefined offset

Posté : 28 oct. 2009, 15:48
par Riesu
Ah oui j'ai oublié désolé !

Mon fichier donnees.txt contient des lignes(777 pour être exacte) séparés par un '|', sauf que pour certaines au lieu d'avoir 9 tableaux de remplis il y en a 4-5 :/ .

La seule solution que j'ai trouvé pour y remédier c'était de rajouter des '|' pour esquiver php 8-|, le fichier étant à jour tous les jours je me vois mal faire tout ça à la main.

Code : Tout sélectionner

Notice: Undefined offset: 5 in D:\xxx\Lyes\send.php on line 38 Notice: Undefined offset: 6 in D:\www\xxx\send.php on line 39 Notice: Undefined offset: 7 in D:\www\xxx\send.php on line 39
et ceci jusqu'à ce que la scroll bar soit assez petite.

Sinon les informations sont bien entrées dans la bdd.

merci :)

Re: Undefined offset

Posté : 28 oct. 2009, 16:10
par Kran
Si tes champs acceptent la valeur null...
<?php
$sql="INSERT INTO test (ip_disk,code,nom_disk,type,version_navisphere,f,machine_connectee,h,i) VALUES (";
if(isset($valeur[0])) $sql.="'".$valeur[0]."'"; else $sql.="null";
if(isset($valeur[1])) $sql.=",'".$valeur[1]."'"; else $sql.=",null";
if(isset($valeur[2])) $sql.=",'".$valeur[2]."'"; else $sql.=",null";
if(isset($valeur[3])) $sql.=",'".$valeur[3]."'"; else $sql.=",null";
if(isset($valeur[4])) $sql.=",'".$valeur[4]."'"; else $sql.=",null";
if(isset($valeur[5])) $sql.=",'".$valeur[5]."'"; else $sql.=",null";
if(isset($valeur[6])) $sql.=",'".$valeur[6]."'"; else $sql.=",null";
if(isset($valeur[7])) $sql.=",'".$valeur[7]."'"; else $sql.=",null";
if(isset($valeur[8])) $sql.=",'".$valeur[8]."'"; else $sql.=",null";
$sql.=")";
?>
sinon tu mets une valuer par defaut a la place de null... sinon faut faire sauter aussi les noms des colonnes pour utiliser la valeur par défaut renseignée en base...

Is good ?

Re: Undefined offset

Posté : 28 oct. 2009, 16:12
par fab
Je suis pas certain de bien comprendre ce que tu veux faire en fait?

Si une ligne ne contient que 4 ou 5 données au lieu des 9 attendus tu veux quand même remplir les champs vides?

Si c'est le cas tu peux faire en sortir de remplir ton tableau comme ça
if(count($valeur) != 9) {
  for($i=count($valeur);$i<9;$i++) $valeur[$i - 1] = '';
}

Re: Undefined offset

Posté : 28 oct. 2009, 16:22
par Riesu
Super !

Merci beaucoup :D.

Si ça peut servir:
Pour la méthode de Kran, j'ai remplacé NULL par 0, MysqL ne voulais pas voir de NULL.

Concernant la méthode de Fab(celle que j'ai choisit), j'ai modifié 9 par 10, bizare mais ça marche correctement.

Merci à vous deux pour vos réponses ultra rapide :).

Re: Undefined offset

Posté : 28 oct. 2009, 16:31
par fab
Oui excuse moi c'est une erreur de ma part , dans le for faut que ça soit =< et non < ou sinon tu mets 10 comme tu l'as fais et ça revient au même :)