[PHP]Importation d'un fichier texte dynamique
Résolu/Fermé
A voir également:
- [PHP]Importation d'un fichier texte dynamique
- Tableau croisé dynamique - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir un fichier .bin - Guide
10 réponses
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
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
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
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);
?>>
$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);
?>>
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:
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);
}
et là c'est tout prêt et tu mets ta boucle foreach($resultat){ etc....
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....
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);
?>
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);
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu peux modifier ta table mysql en mettant le champ ID en auto_increment (extra)
ou
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++; }
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);
}
?>
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);
}
?>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
26 sept. 2007 à 11:13
26 sept. 2007 à 11:13
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
Au lieu d'exécuter la requête, affiche-la à l'écran : ce sera plus simple pour voir ce qui ne va pas...
Xavier
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);
}
?>
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);
}
?>
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.
,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.