Charger un fichier texte dans une base de données mysql
Résolu/Fermé
nguim
Messages postés
16
Date d'inscription
mercredi 12 février 2014
Statut
Membre
Dernière intervention
25 février 2014
-
12 févr. 2014 à 14:34
camile - 1 mai 2015 à 04:27
camile - 1 mai 2015 à 04:27
A voir également:
- Charger un fichier texte dans une base de données mysql
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir un fichier .bin - Guide
- Impossible de supprimer un fichier - Guide
23 réponses
Anju44
Messages postés
6
Date d'inscription
mardi 28 août 2012
Statut
Membre
Dernière intervention
31 mai 2014
23 mai 2014 à 09:10
23 mai 2014 à 09:10
Bonjour,
Tout d'abord, merci d'avoir pris le temps de me répondre ^^
Ensuite, j'ai finalement changé ma façon de faire. J'ai changé ma table comme ceci:
id_compteur, id_imprimante (sans clé étrangère cette fois_ci), date_releve, compteur.
Du coup, j'ai pu changer mon code, pour qu'il prenne le nom d'un fichier (une ip d'imprimante) et cherche dans la base de données cette ip pour en ressortir l'identifiant.
Ca me donne donc quelque chose comme ceci :
Seul problème, il me renvoie cette erreur en boucle :
PHP Warning: fgetcsv() expects parameter 1 to be resource, string given in /var/www/test_id.php on line 28
Ju'
Tout d'abord, merci d'avoir pris le temps de me répondre ^^
Ensuite, j'ai finalement changé ma façon de faire. J'ai changé ma table comme ceci:
id_compteur, id_imprimante (sans clé étrangère cette fois_ci), date_releve, compteur.
Du coup, j'ai pu changer mon code, pour qu'il prenne le nom d'un fichier (une ip d'imprimante) et cherche dans la base de données cette ip pour en ressortir l'identifiant.
Ca me donne donc quelque chose comme ceci :
<?php mysql_connect('localhost', 'root', 'a'); mysql_select_db('imprimantes_test'); mysql_query("TRUNCATE TABLE compteurs"); // Créé une liste des fichiers du dossier Historique (avec des indices) $liste = '/script_python/historique'; $files = scandir($liste); // Parcourt tous les fichiers for ($seg = 2; $seg < count($files); $seg++) { // Affiche seulement le nom des fichiers $id = substr($files[$seg], 0, -4); $cmd = "SELECT id_imprimante FROM imprimantes WHERE adresse_ip='$id'"; //echo $cmd; $impr = mysql_query($cmd); $row = mysql_fetch_array($impr); $result = $row['id_imprimante']; //print "L'identifiant de $id est $result \n"; } // On parcourt tous les fichiers foreach($files as $unfichier) { while ($data = fgetcsv($unfichier, 1000, ";")) { //$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer $explode = explode(' ', $data[0]); // On l'insert dans la base mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error()); } } ?>
Seul problème, il me renvoie cette erreur en boucle :
PHP Warning: fgetcsv() expects parameter 1 to be resource, string given in /var/www/test_id.php on line 28
Ju'
Normal, l'erreur te dit clairement que le premier paramètre de fgetcsv doit étre une ressource, hors toi tu lui file une chaine de caractères...
il faut juste que tu ouvre le fichier en question juste avant...
Par ailleurs, tu auras d'autre erreurs :
Arrete d'inserer une donnée vide dans la colonne id_compteur...je t'ai montré comment faire hier...
Ensuite tu cherche à inserer en base $result, hors $result n'est défini nul part à ce que je vois dans ton code...
Bon courage ^^
il faut juste que tu ouvre le fichier en question juste avant...
foreach($files as $unfichier) { $monfichier = fopen($unfichier,'r'); while ($data = fgetcsv($unfichier, 1000, ";")) { //$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer $explode = explode(' ', $data[0]); // On l'insert dans la base mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error()); } fclose($monfichier); }
Par ailleurs, tu auras d'autre erreurs :
Arrete d'inserer une donnée vide dans la colonne id_compteur...je t'ai montré comment faire hier...
Ensuite tu cherche à inserer en base $result, hors $result n'est défini nul part à ce que je vois dans ton code...
Bon courage ^^
Anju44
Messages postés
6
Date d'inscription
mardi 28 août 2012
Statut
Membre
Dernière intervention
31 mai 2014
23 mai 2014 à 13:17
23 mai 2014 à 13:17
Encore merci pour ta réponse !
J'ai essayé ta solution, mais ça me renvoie encore des erreurs en boucle :
PHP Warning: fopen(172.17.105.224.csv): failed to open stream: No such file or directory in /var/www/test_id.php on line 30
PHP Warning: fgetcsv() expects parameter 1 to be resource, boolean given in /var/www/test_id.php on line 34
J'ai essayé autre chose et j'ai un peu modifié, et pour ouvrir mon fichier, j'ai rajouté un if !
Mais il me renvoie une erreur parce que je ne fais pas appel au répertoire, mais je ne vois pas comment l'appeler :/
(PHP Warning: fopen(172.17.105.224.csv): failed to open stream: No such file or directory in /var/www/test_id.php on line 31)
Pour la donnée vide, ça ne pose pas de problème parce que c'est un identifiant en auto_increment, et j'ai testé sur un autre script, et ça marche très bien ^^
Pour la variable $result, elle est déclarée à la ligne 21 de mon précédent message ^^
Encore merci pour ta patience !
Ju'
J'ai essayé ta solution, mais ça me renvoie encore des erreurs en boucle :
PHP Warning: fopen(172.17.105.224.csv): failed to open stream: No such file or directory in /var/www/test_id.php on line 30
PHP Warning: fgetcsv() expects parameter 1 to be resource, boolean given in /var/www/test_id.php on line 34
J'ai essayé autre chose et j'ai un peu modifié, et pour ouvrir mon fichier, j'ai rajouté un if !
// On parcourt tous les fichiers foreach($liste as $unfichier) { //echo $unfichier; if (($handle = fopen($unfichier, "r")) !== FALSE) { while ($data = fgetcsv($handle, 1000, ";")) { //$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer $explode = explode(' ', $data[0]); // On l'insert dans la base mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error()); } // On ferme les fichiers fclose($handle); } }
Mais il me renvoie une erreur parce que je ne fais pas appel au répertoire, mais je ne vois pas comment l'appeler :/
(PHP Warning: fopen(172.17.105.224.csv): failed to open stream: No such file or directory in /var/www/test_id.php on line 31)
Pour la donnée vide, ça ne pose pas de problème parce que c'est un identifiant en auto_increment, et j'ai testé sur un autre script, et ça marche très bien ^^
Pour la variable $result, elle est déclarée à la ligne 21 de mon précédent message ^^
Encore merci pour ta patience !
Ju'
Anju44
Messages postés
6
Date d'inscription
mardi 28 août 2012
Statut
Membre
Dernière intervention
31 mai 2014
23 mai 2014 à 15:12
23 mai 2014 à 15:12
J'ai finalement à réussi à atteindre mon objectif final !
Voici mon script terminé :
Encore merci pour ton aide ^^
Bonne journée,
Ju'
Voici mon script terminé :
<?php mysql_connect('localhost', 'root', 'a'); mysql_select_db('imprimantes_test'); // Remet la table à zéro mysql_query("TRUNCATE TABLE compteurs"); $repertoire = '/script_python/historique/'; // On récupère tous les fichiers du dossier passé dans la variable repertoire $MesFichiers = scandir($repertoire); // $MesFichiers est un tableau contenant tous les fichiers du répertoire $repertoire foreach($MesFichiers as $unfichier) { if($unfichier != ".." && $unfichier != ".") { // Affiche seulement le nom des fichiers $ip = substr($unfichier, 0, -4); $cmd = "SELECT id_imprimante FROM imprimantes WHERE adresse_ip='$ip'"; $impr = mysql_query($cmd); $row = mysql_fetch_array($impr); $result = $row['id_imprimante']; // $unfichier contient le nom du fichier, on le concatène avec $repertoire pour avoir le chemin complet if (($handle = fopen($repertoire . $unfichier, "r")) !== FALSE) { while ($data = fgetcsv($handle, 1000, ";")) { //$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer $explode = explode(' ', $data[0]); // On l'insert dans la base mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error()); } // On ferme les fichiers fclose($handle); } } } ?>
Encore merci pour ton aide ^^
Bonne journée,
Ju'