IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Importation fichier texte dynamique sous MySQL


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut Importation fichier texte dynamique sous MySQL

    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??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?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.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    TU fais un foreach ($resultat), alors que resultat est une chaine de caractere je pense que tu devrais modifier
    while (!feof($fp)){
    $ligne = fgets ($fp,1000);
    $resultat[] = $ligne;

    }

    j'ai pas tout regardé mais c'est deja un début...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut Problème parse error ligne33
    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.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $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);
     
    ?>

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Ton foreach n'est pas bon :
    foreach ($resultat as $res)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut Problème d'indice
    Ok cette fois c'est bon pour la bloucle mais il me met un autre message d'erreur à la ligne ci-dessous. Notice: Undefined offset: 1 et Notice: Undefined offset: 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query .= "(".$champs[0].", '".$champs[1]."', '".$champs[2]."')";

    Mon fichier texte est présenté comme ci :

    ,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,

    Je ne vois donc pas ou est l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?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=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 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);
     
    ?>

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut Chargement base pas terrible
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?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);
     
    ?>

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Enlève IdUtilisateur de ta requete d'insert et passe ce le champ IdUtilisateur en auto-incrément dans ta base ddonnées.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut
    C'est ce que j'ai fais, mais j'ai toujours rien qui s'insert, faut-il laisser mon fichier texte de cette facon

    ,Nasbe, 192.168.1.2,
    ,Louis, 192.168.2.5,
    ,Paul, 192.168.1.3,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?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);
    		}
     
     
    mysql_close($lien);
    }
    ?>

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Rajoute un test apres ton INSERT on sait jamais.

    $result = mysql_query();
    if (!$result) {
    die('Requête invalide : ' . mysql_error());
    }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut
    Salut, voilà, j'ai fais ton test et il me met : 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


    apparamment y a un problème avec mon fichier texte. La ligne 1 de mon fichier texte est la suivante :

    ,Jean,192.168.1.5,

    Je ne comprends pas ce qu'il veut dire par là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?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);
    }
    ?>

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Y'a une petite erreur d'apostrophe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       $requeteAjout .= "(".$champs[1]."', '".$champs[2]."')";
    
       Essaye ca : $requeteAjout .= "('".$champs[1]."', '".$champs[2]."')";
       Ou ca : $requeteAjout .= "(\"".$champs[1]."\",\"".$champs[2]."\")";

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?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);
    }
    ?>
    Si j'essaie avec cette méthode comme ci-dessus, j'obtiens le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: Wrong parameter count for mysql_query() in d:\nasbe\cours\php\travail diplome\tablebasedonnees.php on line 207
    Requête invalide :
    Mais ma table se construit de cette facon :

    500
    501 Jean 192.168.1.5
    502 Nasbe 192.168.1.2
    503 Louis 192.168.2.5


    Donc y a un sacré mieux, je ne sais pas pourquoi le 500 s'enregistre en clé primaire. Je sens que j'arrive gentillement au bout.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Si tu veux qu'il demarre a l'ID 1 tu dois réinitialiser l'autoincrement.

    Modifie ton code comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    $result = mysql_query($requeteAjout);
     
    		if (!$result) {
    		die('Requête invalide : ' . mysql_error());
    		}

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Remplace ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mysql_query($requeteAjout);
    $result = mysql_query();
    if (!$result) {
    die('Requête invalide : ' . mysql_error());
    par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = mysql_query($requeteAjout)
        or die('Requête invalide : ' . mysql_error());

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 24
    Par défaut
    Ok merci les gars, c'est exactement ce qu'il me fallait. Merci bien de m'avoir aidé.

    J'aurai d'autre question, je cherche à récupérer la valeur d'une liste déroulante (elle est dynamique car elle récupère les données dans une table).

    Mon interface est comme ceci

    Nom du groupe: (ici c'est une liste déroulant)
    et j'ai deux boutons : ajouter et enlever.

    Ma question est, comment faire pour que quand j'appuye sur le bouton supprimer, il me supprime mon groupe sélectionner par la liste déroulante. d'une table groupe??

Discussions similaires

  1. Importer un fichier texte txt vers mysql
    Par pasc06 dans le forum Débuter
    Réponses: 1
    Dernier message: 31/01/2009, 17h58
  2. probleme avec un import fichier texte dans mysql
    Par xodeax dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2006, 13h24
  3. [TP] Création fichier texte lisible sous Windows
    Par frechy dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 02/03/2006, 20h42
  4. pb importation fichier texte
    Par borisa dans le forum Access
    Réponses: 5
    Dernier message: 24/02/2006, 17h44
  5. Réponses: 2
    Dernier message: 02/02/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo