Rechercher : dans
Par :

[PHP]Importation d'un fichier texte dynamique

Dernière réponse le 28 sep 2007 à 00:04:53 nasbe, le 24 sep 2007 à 21:28:09 
 Signaler ce message aux modérateurs

Salut,

Je cherche à importer le contenu d’un fichier texte dans ma table Utilisateur sous MySQL.
Mon fichier texte se présente comme ci-dessous.

,Nasbe, 192.168.1.2,
,Jean, 192.168.1.3,
,Marc, 192.168.1.5,
,Jacques, 192.168.1.6,
,Louis, 192.168.2.5,
,Marcel, 192.168.3.5,

Il est dynamique, c'est-à-dire qu'il se modifie tout le temps. C'est pourquoi je ne fais pas un bête import mais que je cherche à l'importer de cette manière.

J'ai d'abord créer ce petit bout de script, qui fonctionne sans problème. Simplement j'aimerai pouvoir y rajouter la deuxième partie du code ci-dessous. A quelle niveau dois-je le faire. A chaque fois que j'essaie j'ai des erreurs parse error. Quelqu'un aurait-il une piste??

<?php
$Fichier = "C:\\Users\\Nasbe\\Desktop\\AdressageIP.txt";

if (file_exists($Fichier)) {
$fp = fopen($Fichier, "r");
flock ($fp, LOCK_SH); // Bloquer le fichier en écriture
$ligne = fgets($fp, 1000);
$resultat = $ligne;

while (!feof($fp)){
$ligne = fgets ($fp,1000);
$resultat .= $ligne;

}
echo $resultat;
flock ($fp, LOCK_UN); // Bloquer le fichier en lecture
fclose ($fp);
}
?>



/*
$bd ='gestionacces';

$lien = mysql_pconnect ('localhost', 'root', '');
mysql_select_db($bd);
$table = 'utilisateurs';
if ($lien == FALSE){
echo "connexion impossible à la base $bd";
} else {
foreach ($resultat) {
$champs = explode(",", $resultat);
$query = "INSERT INTO utilisateurs";
$query .= "(IdUtilisateur, NomUtilisateur, IP)";
$query .= "VALUES";
$query .= "(".$champs[0].", '".$champs[1]."', '".$champs[2]."')";
mysql_query($query);

mysql_close($lien);

}
?>

Merci en tout cas d'avoir pris le temps de me lire.

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « [PHP]Importation d'un fichier texte dynamique » dans :
[MS-Dos] Ecrire dans un fichier texte en batch VoirPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" : echo texte_à_ecrire > fichier_de_sortie.txt Pour écrire à la fin d'un texte existant (concaténation) : echo "écriture a la fin du fichier ">>...
MySQL - Chargement d'un fichier texte dans une table VoirPour charger une fichier texte défini comme suit : $ tail /home/user1/test.txt 'nom1',1,9 'nom2',2,3 'nom3',3,54 'nom4',4,2 'nom5',5,9 Dans une table définie comme suit : CREATE TABLE chargertest ( ...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Fichier TXT VoirFormat TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.

1

Alain42, le 24 sep 2007 à 23:35:03

Salut,

tu concatènes $resultat avec toutes tes lignes, tu obtiens une variable et pas un array, alors ton foreach ne marche pas.





au lieu de $resultat .= $ligne; tu mets

 
$resultat=array();
$resultat[] = $ligne;

while (!feof($fp)){
$ligne = fgets ($fp,1000);
$resultat[]=$ligne; 



ou alors
pourquoi n'utilises tu pas la fonction php file(fichier) ? elle fait tout ouvrir, lire le fichier et met dans un array et ferme. vas voir sur Google

Répondre à Alain42

2

nasbe, le 25 sep 2007 à 10:28:15

Oui effectivement, erreur de fatigue. Voilà maintenant que j'ai corrigé, j'ai toujours un problème de parse error. Je comprends pas, si tu pouvais me débloquer, ca serait vraiment cool.


$Fichier = "C:\\Users\\Nasbe\\Desktop\\AdressageIP.txt";

if (file_exists($Fichier)) {
$fp = fopen($Fichier, "r");
flock ($fp, LOCK_SH); // Bloquer le fichier en écriture
$ligne = fgets($fp, 1000);
$resultat=array();
$resultat = $ligne;

while (!feof($fp)){
$ligne = fgets ($fp,1000);
$resultat.= $ligne;
}

flock ($fp, LOCK_UN); // Bloquer le fichier en lecture
fclose ($fp);
}
$bd ='gestionacces';
$lien = mysql_pconnect ('localhost', 'root', '');
mysql_select_db($bd);
$table = 'utilisateurs';
if ($lien == FALSE){
echo "connexion impossible à la base $bd";
} else {
foreach ($resultat) {
$champs = explode(",", $resultat);
$query = "INSERT INTO utilisateurs";
$query .= "(IdUtilisateur, NomUtilisateur, IP)";
$query .= "VALUES";
$query .= "(".$champs[0].", '".$champs[1]."', '".$champs[2]."')";
mysql_query($query);
}
}
mysql_close($lien);

?>>

Répondre à nasbe

3

Alain42, le 25 sep 2007 à 13:30:44

Non tu n'as pas tout corrigé, tu mets bien $resultat=array();

mais tu concatènes toujours, alors avec un arrauy ça coince forcément

il faut:

$resultat=array();
$resultat[] = $ligne;

while (!feof($fp)){
$ligne = fgets ($fp,1000);
$resultat[]=$ligne; 


Ce qui empile chaque ligne dans l'array $resultat

sinon essayes à la place de tout la partie :
if (file_exists($Fichier)) {
$fp = fopen($Fichier, "r");
flock ($fp, LOCK_SH); // Bloquer le fichier en écriture
$ligne = fgets($fp, 1000);
$resultat=array();
$resultat = $ligne;

while (!feof($fp)){
$ligne = fgets ($fp,1000);
$resultat.= $ligne;
}

flock ($fp, LOCK_UN); // Bloquer le fichier en lecture
fclose ($fp);

}

if (file_exists($Fichier)) {
$resultat=file($fichier);
}




et là c'est tout prêt et tu mets ta boucle foreach($resultat){ etc....

Répondre à Alain42

4

nasbe, le 25 sep 2007 à 16:08:39

Ok c'est nickel, ca fonctionne en partie.

Ce que j'aimerai c'est qu'il m'incrémente automatiquement l'ID. Je m'explique, ma table est composée de trois champs

ID, NomUtilisateur, IP.


Mon fichier texte est présenté comme ci-dessous.

,Nasbe, 192.168.1.2,
,Jean, 192.168.1.3,
,Marc, 192.168.1.5,
,Jacques, 192.168.1.6,
,Louis, 192.168.2.5,
,Marcel, 192.168.3.5,

hors si je le laisse comme ca, il ne va pas faire d'insertion dans la table. Je suis obligé de rentrer les numéros moi-même à la main de cette manière. Alors que si je fais un importation manuelle avec le fichier ci-dessus., il m'incrémente automatiquement les numéros. Aurait-tu une piste à ce niveau.

1 ,Nasbe, 192.168.1.2,
2,Jean, 192.168.1.3,
3,Marc, 192.168.1.5,
4,Jacques, 192.168.1.6,
5,Louis, 192.168.2.5,
6,Marcel, 192.168.3.5,

<?php

$Fichier = "C:\\Users\\Nasbe\\Desktop\\AdressageIP.txt";

if (file_exists($Fichier)) {
$resultat=file($Fichier);
}

$bd ='gestionacces';
$lien = mysql_pconnect ('localhost', 'root', '');
mysql_select_db($bd);
$table = 'utilisateurs';
if ($lien == FALSE){
echo "connexion impossible à la base $bd";
} else {
foreach ($resultat as $res) {
$champs = explode(",", $res);
$query = "INSERT INTO utilisateurs";
$query .= "(IdUtilisateur, NomUtilisateur, IP)";
$query .= "VALUES";
$query .= "(".$champs[0].", '".$champs[1]."', '".$champs[2]."')";
mysql_query($query);
}

}
mysql_close($lien);

?>

Répondre à nasbe

5

Alain42, le 25 sep 2007 à 20:45:53

Tu peux modifier ta table mysql en mettant le champ ID en auto_increment (extra)

ou


$i=1;
 foreach ($resultat as $res) {
$champs = explode(",", $res);
$query = "INSERT INTO utilisateurs";
$query .= "(IdUtilisateur, NomUtilisateur, IP)";
$query .= "VALUES";
$query .= "('$i'.$champs[0].", '".$champs[1]."', '".$champs[2]."')";
mysql_query($query);
$i++;
} 

Répondre à Alain42

6

nasbe, le 26 sep 2007 à 10:36:06

Mon champ IdUtilisateur est déjà en auto-incrément. Et ca fonctionne toujours pas. Je te remets mon code ci-dessous où je fais un test de ma requête insert. Il me met le message d'erreur suivant :

Warning: Wrong parameter count for mysql_query() in d:\nasbe\cours\php\travail diplome\tablebasedonnees.php on line 209
Requête invalide : Erreur de syntaxe près de '', ' 192.168.1.5')' à la ligne 1

Or mon fichier texte est défini comme ceci

,Jean,192.168.1.5,
,Nasbe,192.168.1.2,
,Louis,192.168.2.5,

Je comprends pas, j'ai beau aller dans tous les sens.

<?php
$Fichier = "C:\Users\Nasbe\Desktop\AdressageIP.txt";

if (file_exists($Fichier)) {
$resultat=file($Fichier);
}

$bd ='gestionacces';
$lien = mysql_pconnect ('localhost', 'root', '');
mysql_select_db($bd);
$table = 'utilisateurs';
if ($lien == FALSE){
echo "connexion impossible à la base $bd";
} else {
//$requeteSuppression = "Delete From utilisateurs";
//mysql_query($requeteSuppression);

foreach ($resultat as $res) {
$champs = explode(",", $res);
$requeteAjout = "INSERT INTO utilisateurs";
$requeteAjout .= "(NomUtilisateur, IP)";
$requeteAjout .= "VALUES";
$requeteAjout .= "(".$champs[1]."', '".$champs[2]."')";
mysql_query($requeteAjout);
$result = mysql_query();
if (!$result) {
die('Requête invalide : ' . mysql_error());
}
}
mysql_close($lien);
}
?>

Répondre à nasbe

7

Reivax962, le 26 sep 2007 à 11:13:38

Bonjour,

Au lieu d'exécuter la requête, affiche-la à l'écran : ce sera plus simple pour voir ce qui ne va pas...

Xavier

Répondre à Reivax962

8

nasbe, le 26 sep 2007 à 11:36:06

En fait voilà comment est rempli ma table

IdUtilisateur

100
101
102

NomUtilisateur
1 ->J'aimerai avoir Jean
2 ->J'aimerai avoir nasbe
3 -> J'aimerai avoir Louis

IP

Jean ->J'aimerai avoir l'adresse IP de jean
Nasbe ->J'aimerai avoir l'adresse IP de Nasbe
Louis -> J'aimerai avoir l'adresse IP de Louis

Mon fichier texte :

1,Jean,192.168.1.3,
2,Nasbe,192.168.1.2,
3,Louis,192.168.2.5,

Si je ne met pas les numéro 1, 2, 3. Rien ne s'affiche dans ma table. Y a un truc avec les index que je piges pas.

$Fichier = "C:\Users\Nasbe\Desktop\AdressageIP.txt";

if (file_exists($Fichier)) {
$resultat=file($Fichier);
}

$bd ='gestionacces';
$lien = mysql_pconnect ('localhost', 'root', '');
mysql_select_db($bd);
$table = 'utilisateurs';
if ($lien == FALSE){
echo "connexion impossible à la base $bd";
} else {
$requeteSuppression = "Delete From utilisateurs";
mysql_query($requeteSuppression);

foreach ($resultat as $res) {
$champs = explode(",", $res);
$requeteAjout = "INSERT INTO utilisateurs";
$requeteAjout .= "(NomUtilisateur, IP)";
$requeteAjout .= "VALUES";
$requeteAjout .= "(".$champs[0].", '".$champs[1]."')";

mysql_query($requeteAjout);
}


mysql_close($lien);
}
?>

Répondre à nasbe

9

Alain42, le 27 sep 2007 à 21:17:37

Ton fichier texte est :

,Nasbe, 192.168.1.2,
,Jean, 192.168.1.3,
,Marc, 192.168.1.5,
,Jacques, 192.168.1.6,
,Louis, 192.168.2.5,
,Marcel, 192.168.3.5,


tu as une , au début et à la fin des lignes, donc qd tu explode par rapport à "," tu obtiens un array avec le premier et le dernier élément vides.

Ce qui explique ton décalage dans tes enregistrements.
ID s'incremente bien puisque tu en es a plus de 100.

fais un array_shift pour oter le premier element de ton array $res avant ta boucle foreach.

Répondre à Alain42

10

 nasbe, le 28 sep 2007 à 00:04:53

Salut,

C'est bon j'ai pu régler mon problème, merci mille fois.

Répondre à nasbe
Collection CommentÇaMarche.net