PLEASE HELP: Importer des données CSV dans une base SQL

Eléphanteau du PHP | 38 Messages

06 déc. 2010, 23:57

Bonsoir à tous,

Mon petit projet est quasiment à son terme !!!!
Oufffff finalement en ayant compris la logique ça va très vite !!!
je suis encore débutant bien sur et au tout début MAIS tous les jours j'apprends !!!

Il ne manque qu'une seule chose:

Alimenter ma base de données principale sans passer par phpmyadmin.

Pour cela j'ai un fichier .CSV avec | comme séparateur (attention le fichier peut contenir des " ou des /)

Le fichier est complet mais évolue en gros je peux vider ma table qui s'appelle licences et ensuite réimporter la totalité du fichier licencies.csv
Ces deux noms ne bougeront pas.

Eventuellement si quelqu'un pouvait me montrer un code très simple qui permet de m'ouvrir une boîte de dialogue pour allez chercher le fichier à ouvrir, puis vidage de base licences et enfin remplissage....

Car là je sèche ....

Merci d'avance les amis ;)
Modifié en dernier par niko94100 le 07 déc. 2010, 23:14, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2010, 00:05

salut,

stealth35 à fait exactement ce qu'il te faut => vos-contributions/manipuler-simplement- ... 55918.html il te reste à changer sqlite par mysql et le tour est jouer :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

07 déc. 2010, 00:41

Alors voilà mon code ....mais ça ne marche pas ....

<?php

try 
{
    $dbh = new PDO('mysql::memory:');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
    exit($e->getMessage());
}    

$file = new SplFileObject('licencies.ffn');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl('|');

//je veux vider ma table puis la remplir avec le fichier licencies.ffn qui est un fichier csv avec barre verticale en séparateurs licences est le nom de ma table déjà crée
$dbh->exec("TRUNCATE TABLE licences");
$stmt = $dbh->prepare("INSERT INTO licences");    

foreach($file as $row)
{
    $stmt->execute($row);
}


?>
Voilà mon code ....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 déc. 2010, 00:43

je te conseil les tuto sur pdo comme http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html

ou vire la partie pdo et utilise les mysql_*

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 5462 Messages

07 déc. 2010, 00:46

Alors voilà mon code ....mais ça ne marche pas ....

<?php

try 
{
    $dbh = new PDO('mysql::memory:');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
    exit($e->getMessage());
}    

$file = new SplFileObject('licencies.ffn');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl('|');

//je veux vider ma table puis la remplir avec le fichier licencies.ffn qui est un fichier csv avec barre verticale en séparateurs licences est le nom de ma table déjà crée
$dbh->exec("TRUNCATE TABLE licences");
$stmt = $dbh->prepare("INSERT INTO licences");    

foreach($file as $row)
{
    $stmt->execute($row);
}


?>
Voilà mon code ....
t'attend quoi de : INSERT INTO licences ?
sinon :memory: est propre a sqlite, pour te connecter a mysql c'est par ici : http://www.php.net/manual/fr/ref.pdo-my ... ection.php
mais t'as du avoir une erreur des la connexion qui aurai pu te donner un indice :wink:

Eléphanteau du PHP | 38 Messages

07 déc. 2010, 00:57

Oh le boulet ...
mysql_connect("localhost", "root", "root");
mysql_select_db("test"); 
Mon INSERT est la pour reprendre les données du CSV pour les insérer dans ma base .... j'ai pas mis values car je veux importer tous les champs dans licences ... j'ai faux ??? lol

ViPHP
ViPHP | 5462 Messages

07 déc. 2010, 00:59

Oh le boulet ...
mysql_connect("localhost", "root", "root");
mysql_select_db("test"); 
Mon INSERT est la pour reprendre les données du CSV pour les insérer dans ma base .... j'ai pas mis values car je veux importer tous les champs dans licences ... j'ai faux ??? lol
ouai :wink:
par contre si tu fais avec mysql_* va falloir un peu plus adapter

Eléphanteau du PHP | 38 Messages

07 déc. 2010, 01:04

Bah justement c'est l'adaptation que j'aimerais connaître lol .... et la je sèche complétement

ViPHP
ViPHP | 5462 Messages

07 déc. 2010, 01:04

Bah justement c'est l'adaptation que j'aimerais connaître lol .... et la je sèche complétement
pourquoi t'as pas PDO ?

Eléphanteau du PHP | 38 Messages

07 déc. 2010, 01:08

euh honnêtement ton PDO je ne sais même pas ce que c'est lol j'ai commencé à coder à l'arrache un truc à l'arrache mais qui marche .... lol

ViPHP
ViPHP | 5462 Messages

07 déc. 2010, 01:10

euh honnêtement ton PDO je ne sais même pas ce que c'est lol j'ai commencé à coder à l'arrache un truc à l'arrache mais qui marche .... lol
regarde dans ton phpinfo (voir si y'a pdo_mysql)

Eléphanteau du PHP | 38 Messages

07 déc. 2010, 01:12

Oui j'ai

ViPHP
ViPHP | 5462 Messages

07 déc. 2010, 01:13

Oui j'ai
donc pour te connecté c'est
$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');

Eléphanteau du PHP | 38 Messages

07 déc. 2010, 01:18

Hummmm toujours rien ....

<?php

$dbh = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');

$file = new SplFileObject('licencies.ffn');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl('|');


$dbh->exec("TRUNCATE TABLE licences");
$stmt = $dbh->prepare("INSERT INTO licences");

foreach($file as $row)
{
$stmt->execute($row);
}


?>

ViPHP
ViPHP | 5462 Messages

07 déc. 2010, 01:21

normale ta requete elle fais rien
INSERT INTO licences