Insertion complexe de de données provenant d'un fichier txt

BFH
Eléphant du PHP | 214 Messages

27 mai 2005, 16:59

Merci pour le coup du IGNORE 1 LINES . C'est tout a fait ce qu'il me fallait!
Par contre je comprends pas à quoi sert OUTFILE...

Sinon j'ai essayé avec ta proposition mere-teresa mais comme je l'ai ecris plus haut
feof(): supplied argument is not a valid stream ressource in chemin du fichier on line XX
fgets(): supplied argument is not a valid stream ressource in chemin du fichier on lineXX' 
Le code incriminé est
if(file_exists($FI))
{
$i=1;
$fichier= feof ($FI);//ici ça bug
		
while($fichier!="true")
{
$ligne= fgets ($FI,1000);//là pareil
etc...
}
}//acollade fermante de if
Donc si tu sais pourquoi ça bug dit le moi!
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 mai 2005, 17:08

Que contient $FI ??
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

BFH
Eléphant du PHP | 214 Messages

28 mai 2005, 10:41

$FI contient le chemin absolu du fichier a inserer dans la base.

Sinon est ce que quelqu'un saurait comment recupérer juste le nom du fichier dans ce chemin absolut? C'est a dire supprimer tout ce qu'il y a avant le dernier slash et supprimer le dernier slash aussi!
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

28 mai 2005, 10:47

explode("/", $F1) et récupérer suelement la dernière partie ??
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

28 mai 2005, 10:57

Euh oui c'est pas mal mais a force tu me connais un peu et tu sais qu'avec moi c'est jamais simple :) . Là en l'occurrence c'est encore le cas: mon chemin absolu ne fait jamais la même longueur! Si je tape :
$tab = explode('/',$FI);
print($tab[3]); //par exemple
Une fois ce sera bon et d'autre fois $tab[3] ne retournera pas la bonne partie du chemin absolu :cry:

Y aurait pas moyen de compter le nombre de $tab[] retournés par le explode('/',$FI)
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

28 mai 2005, 11:00

ben non, tu fais un count() sur ton tableau et tu récupères seulement la dernière partie, comme ça, que ton tableau ait 3 ou 250 valeurs, tu ne récupèreras que la dernière ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

28 mai 2005, 11:06

Donc si j'ai bien compris : (je peine un peu c'est normal c'est samedi matin)
Je doit ecrire :
$tab = explode('/',$FI); 
$fichier = count($tab[]);
print($tab['$fichier']); 
c'est bien ça? :-s
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

28 mai 2005, 11:26

presque, n'oublie pas qu'un tableau avec un index automatique commence les index à 0 : donc tu dois faire :
$tab = explode('/',$FI);
$fichier = count($tab) - 1;
print($tab['$fichier']);
Un détail, pour compter un tableau, pas nécessaire de rajouter les [] :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

28 mai 2005, 11:35

Ok merci pour tes bons conseils
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

BFH
Eléphant du PHP | 214 Messages

30 mai 2005, 09:04

Bon de retour au bureau je viens de tester et j'ai un problème (comme c'est étrange! :tir2: )

En fait mes champs ne sont pas séparés par des / mais par des \ et apparement mon code est pas trop apprécié:
$tab = explode('\',$FI) //ici ça bug; 
$fichier = count($tab) - 1;
echo"<CENTER><h1><font color='#0033CC'>Insertion Réussie</font></h1></CENTER><hr><P>";
echo $FI;
echo $fichier;
print($tab["'$fichier'"]); 
Quelqu'un sait comment regler ce problème?

STOP problème solutionné

Maintenant ce qui ne fonctionne pas c'est :
print($tab["'$fichier'"]);
ça me dit : Notice: Undefined index:
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

30 mai 2005, 09:12

Oui, là, le problème est plus subtil: le "\" est un caractère d'échappement, pour l'utiliser en tant que caractère, il faut lui-même l'échapper:
$tab = explode('\\',$FI) //ici ça bug;
$fichier = count($tab) - 1;
echo"<CENTER><h1><font color='#0033CC'>Insertion Réussie</font></h1></CENTER><hr><P>";
echo $FI;
echo $fichier;
print($tab["'$fichier'"]);
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

30 mai 2005, 09:14

Désolé j'ai édité trop tard :
STOP problème solutionné
J'y avais pensé juste apres avoir posté...
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

30 mai 2005, 09:15

Pas facile de prendre un magohamoth de vitesse :langue:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

30 mai 2005, 09:17

Et ça tu sais pourquoi c'est comme ça??
Maintenant ce qui ne fonctionne pas c'est :
print($tab["'$fichier'"]);
ça me dit : Notice: Undefined index:
Problème reglé
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

BFH
Eléphant du PHP | 214 Messages

30 mai 2005, 11:26

Bon je rappelle mon code complet, code qui permet de faire pour l'instant une insertion semi complex d'un fichier dans une base de données.
if(isset($_GET["FI"]))
{
$FI=$_GET["FI"];
}

if(file_exists($FI))
{
$RHost=basename($FI, ".csv");//c'est encore mieux que ce qu'il y avait avant!
$insert="LOAD DATA INFILE '".$FI."' INSERT INTO TABLE 'item' IGNORE 1 LINES FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n\r' (INum,IPage,IDevice,IGroup,IValue,IID) ";
$insert2="INSERT INTO TABLE 'report' (RHost) VALUES ('$RHost') ";

mysql_query($insert);
mysql_query($insert2);

echo"<CENTER><h1><font color='#0033CC'>Insertion Réussie</font></h1></CENTER><hr><P>";
}
Avec ce code on ignore la première ligne du fichier texte et on insere toutes les autres dans la table item;
Et on recupère juste le nom du fichier qu'on insère dans report(RHost).

Ma table report est construite comme suit :
report (ID, RVersion, RHost, RHostComment, RUser, RLocation, RDateTime)
Je desirerais inserer :
_ la ligne n°2 du fichier dans le champs RVersion
_ la ligne n°7 du fichier dans le champs RUser
_ les lignes n°9 & 10 du fichier dans le champs RDateTime


Est ce que quelqu'un sait comment faire cela :?:
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...