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 :

Remplir BDD via fichier txt


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 22
    Par défaut Remplir BDD via fichier txt
    Bonjour,

    Je cherche à remplir ma base de données à partir d'un fichier txt. Ce fichier contient les coordonnées en latitude,longitude et une valeur d'humidité comprise entre 0 et 1.
    Dans mon SGBD la table est la suivante : tbl_point : + id (SERIAL), +x_y (POINT), +teta (REAL)
    Mon fichier texte est construit comme ceci : 50.686324,4.597381;0.21 sur plusieurs lignes.

    je n'arrive pas à remplir ma table tbl_point avec les valeurs extraites du fichiers.
    Pouvez vous regarder mon code et me dire ce qui bloc svp :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?php
    include('config.php');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
    		<link rel="shortcut icon" type="image/x-icon" href="plus.png" />
            <title>Ajouter un chantier</title>
        </head>
        <body>
     
    	<!----------------------- Téléchargement du fichier de points ----------------------------->
    <h4> 5ème étape : Téléchargement du fichier de points</h4>
    	<form method="post" action="existant.php">
          <label for="point">Choisir le fichier de points à importer :</label>
    	  <input type="file" name="point" id="point" /><br /><br/><br/>
    	  <input type="submit" name="submit" value="Envoyer" />
    	</form>
    <?php
     
       //on définit le fichier txtque l'on va traiter
     
        $fichier = $_POST['point'];
     
        //on ouvre le fichier en lecture seulement, impossible de modifier le fichier 
        if (file_exists($fichier))
    	{
    		$fp = fopen("$fichier", "r"); 
        }
        else // le fichier n'existe pas 
    	{ 
    		echo "Fichier introuvable !<br />Importation stoppée."; 
    		exit(); 
        } 
     
        while (!feof($fp)) 
    	{ 
    		//On lit une ligne tant qu'on a pas atteint la fin du fichier
    		$ligne = fgetc($fp);  
    		//On récupère les champs séparés par ; dans liste
    		$liste = explode( ";",$ligne);  
    		//On assigne les variables
    		$coord = $liste[0];
    		$humidite = $liste[1];
    		$convert =pg_query("SELECT CAST(point,'$coord');");
    		//On insère les valeurs dans la table Point
    		$sql = "INSERT INTO point (x_y,teta,id_parcelle) VALUES('$convert','$humidite',60)"; 
    		$result= pg_query($sql); 
     
    		if(pg_last_error()) 
    		{ 
    			//On soulève les erreurs lors de la connexion a la base de données
    			print "Erreur dans la base de données : ".pg_last_error(); 
    			print "<br />Importation stoppée."; 
    			exit(); 
    		} 
    		else 
    		{
    			//Tout va bien
    			print "$coord | $humidite <br />";
    			//On referme le fichier txt
    			fclose($fp);
     
    			echo '<br /><b>TABLE A JOUR ...</b><br />';
     
    			//A la fin
    			echo '<br /><b>O.K ! ALL DONE.</b><br />';
     
    		}
    	}
     
     
     
        ?>
     
    	</body>
    </html>
    Les messages renvoyés sont les suivants :

    Notice: Undefined offset: 1 in C:\Users\Madeleine\Desktop\test_liste_liee\existant.php on line 46 (correspond à la ligne $humidite = $liste[1];)
    Warning: pg_query(): Query failed: ERREUR: erreur de syntaxe sur ou près de « , » LINE 1: SELECT CAST(point,'5'); ^ in C:\Users\Madeleine\Desktop\test_liste_liee\existant.php on line 47 (correspond à la ligne $convert =pg_query("SELECT CAST(point,'$coord');");)
    Warning: pg_query(): Query failed: ERREUR: syntaxe en entrée invalide pour le type point : « » LINE 1: INSERT INTO point (x_y,teta,id_parcelle) VALUES('','',60) ^ in C:\Users\Madeleine\Desktop\test_liste_liee\existant.php on line 50
    Erreur dans la base de données : ERREUR: syntaxe en entrée invalide pour le type point : « » LINE 1: INSERT INTO point (x_y,teta,id_parcelle) VALUES('','',60) ^
    merci !

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Par défaut
    Bonjour

    Les erreurs parlent relativement d'elles-mêmes.

    Pour
    Warning: pg_query(): Query failed: ERREUR: erreur de syntaxe sur ou près de « , » LINE 1: SELECT CAST(point,'5'); ^ in C:\Users\Madeleine\Desktop\test_liste_liee\existant.php on line 47 (correspond à la ligne $convert =pg_query("SELECT CAST(point,'$coord');")
    Avec des ' ' autour de ta variable, il est interpréter comme chaîne de caractères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $convert =pg_query("SELECT CAST(point,'".$coord."');")
    est déjà plus approprié.

    Quand aux autres, vérifie que tes variables soient bien remplis, j'ai un doute

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Notice: Undefined offset: 1 in C:\Users\Madeleine\Desktop\test_liste_liee\existant.php on line 46 (correspond à la ligne $humidite = $liste[1]
    Cela te dit qu'il n'y a rien dans dans le tableau $liste[1] , peut-être une ligne vide, ou la température n'existe pas pour cette ligne.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 22
    Par défaut La variable ne stocke pas tout ce que je veux
    Bonjour,

    Merci pour le conseil. Je viens de vérifier et quand j'affiche ce que contient ma variable $coord alors il me retourne '5'. Ce qui est le premier chiffre de ma coordonnée.

    Une idée ?

    Merci

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    bonjour, je viens de créer un fichier avec des exemples que vous le montrer, j'utilise file() pour la lecture du fichier et je n'ai aucun souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $fichier = file('test.txt');
     
    foreach ($fichier as $f)
    {
        $liste = explode(';',$f);
        $coord = $liste[0];
        $humidite = $liste[1];
        var_dump($coord);
     
     
    }

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Par défaut
    Peux-tu nous poster ton "nouveau" code?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si on se réfère à la doc sur pg_query() :

    Avertissement

    L'inperpolation des chaînes de caractères fournies par l'utilisateur est extrèmement dangereux et vous devez garder en tête l'ensemble des vulnérabilités concernant les injections SQL.
    Dans la plupart des cas, la fonction pg_query_params() doit être préférée ;
    il est préférable de passer les valeurs fournies par l'utilisateur comme paramètres, plutôt que de les substituer dans la requête.

    Toutes données utilisateur substituées directement dans la chaîne de la requête doivent être proprement échappées.

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 22
    Par défaut
    Citation Envoyé par JujuPomme Voir le message
    Peux-tu nous poster ton "nouveau" code?
    JujuPomme , voici le code modifié ton post. Je travaille sur celui de MaitrePylos mais je suis preneuse d'idées encore.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <?php
    include('config.php');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
    		<link rel="shortcut icon" type="image/x-icon" href="plus.png" />
            <title>Ajouter un chantier</title>
        </head>
        <body>
     
    	<!----------------------- Téléchargement du fichier de points ----------------------------->
    <h4> 5ème étape : Téléchargement du fichier de points</h4>
    	<form method="post" action="existant.php">
          <label for="point">Choisir le fichier de points à importer :</label>
    	  <input type="file" name="point" id="point" /><br /><br/><br/>
    	  <input type="submit" name="submit" value="Envoyer" />
    	</form>
    <?php
     
       //on définit le fichier csv que l'on va traiter
     
        $fichier = $_POST['point'];
     
        //on ouvre le fichier en lecture seulement, impossible de modifier le fichier 
        if (file_exists($fichier))
    	{
    		$fp = fopen("$fichier", "r"); 
        }
        else // le fichier n'existe pas 
    	{ 
    		echo "Fichier introuvable !<br />Importation stoppée."; 
    		exit(); 
        } 
     
        while (!feof($fp)) 
    	{ 
    		//On lit une ligne tant qu'on a pas atteint la fin du fichier
    		$ligne = fgetc($fp);  
    		//On récupère les champs séparés par ; dans liste
    		$liste = explode( ";",$ligne);  
    		//On assigne les variables
    		$coord = $liste[0];
    		print($coord);
    		$humidite = $liste[1];
    		$convert =pg_query("SELECT CAST(POINT('".$coord."')");
    		print($convert);
    		//On insère les valeurs dans la table Point
    		$sql = "INSERT INTO point (x_y,teta,id_parcelle) VALUES('".$convert."','".$humidite."',60)"; 
    		$result= pg_query($sql); 
     
    		if(pg_last_error()) 
    		{ 
    			//On soulève les erreurs lors de la connexion a la base de données
    			print "Erreur dans la base de données : ".pg_last_error(); 
    			print "<br />Importation stoppée."; 
    			exit(); 
    		} 
    		else 
    		{
    			//Tout va bien
    			print "$coord | $humidite <br />";
    			//On referme le fichier csv
    			fclose($fp);
     
    			echo '<br /><b>TABLE A JOUR ...</b><br />';
     
    			//A la fin
    			echo '<br /><b>O.K ! ALL DONE.</b><br />';
     
    		}
    	}
     
     
     
        ?>
     
    	</body>
    </html>
    Merci

Discussions similaires

  1. Liaison BDD via fichier
    Par Mengué georges dans le forum Installation
    Réponses: 0
    Dernier message: 22/10/2013, 16h31
  2. Remplir BDD avec un fichier SQl directement via frontoffice
    Par trossier dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 16/08/2012, 10h13
  3. Script de création et mise à jour de dossier via fichier TXT
    Par villegente dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/05/2012, 06h09

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