charger un fichier csv?

Eléphant du PHP | 86 Messages

28 oct. 2010, 12:42

Bonjour!
Je viens à vous pour vous soumettre mon problème.
En effet je cherche à charger un fichier CSV dans ma base de données à travers le code suivant mais ça fonctionne pas

Code : Tout sélectionner

<form action= "<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="application/x-www-form-urlencoded"> <fieldset style="width:600px"> <legend><b><h6>Précharger white liste</h6></b></legend> <table width="80%" class="centre_tab2"> <tr><td align="right"><label for="services">Liste des services:</label></td> <td><select name="SERVICES" id="services"> <option value="club20">CLUB20</option> <option value="yabusiness">YA BUSINESS</option> <option value="internetmobil">INTERNET MOBIL</option> <option value="familleami">FAMILLE AMIS</option> <option value="nexs">NEWS</option> <option value="pharmacies">PHARMACIES</option> </select></td></tr> <tr><td align="right">Nom du Fichier</td> <td><input type="file" name="file" /></td> <td><input name="submit" type="submit" value="Charger" /></td></tr> </table> </fieldset> <?php $data = array(); function charge_numero($first) { global $data; $data []= array( 'first' => $first); //include ("connexion_bd.php"); // if ($_SESSION['login']!=NULL){ ini_set('display_errors','1'); //Inclusion de la classe mère include ("SGBD.class.php"); /* Initialisation de la variable du SGBD correspondant */ $SQL = "MySQL"; // Inclusion de la classe fille du SGBD correspondant include ($SQL.".SGBD.class.php"); /* Création d'un nouvel objet de la classe fille + lancement du constructeur */ $database = new $SQL('root', '', 'localhost', 'dbprojet'); // Connection à la base de données $database->connect(); $database->requete("INSERT INTO WHITE_LISTE VALUES ('', $first , 'zszszzsx')"); } $fichier=isset($_FILES["file"]["tmp_name"]); if ( $fichier ) { $dom = DOMDocument::load( $_FILES['file']['tmp_name'] ); $rows = $dom->getElementsByTagName( 'Row' ); $first_row = true; foreach ($rows as $row) { if (!$first_row ) { $first = ""; $index = 1; $cells = $row->getElementsByTagName( 'Cell' ); foreach( $cells as $cell ) { $ind = $cell->getAttribute( 'Index' ); if ( $ind != null ) $index = $ind; if ( $index == 1 ) $first = $cell->nodeValue; $index += 1; } charge_numero($first); } $first_row = false; } echo 'zzzzzzzzzzzzzzzzzzzzzzzz'; } ?> </form>
Voici le code sql de ma table
/*==============================================================*/
/* Table : WHITE_LISTE                                          */
/*==============================================================*/
create table WHITE_LISTE
(
   id_white_liste       int not null,
   numero               int,
   service_type         varchar(254),
   primary key (id_white_liste)
);

ViPHP
ViPHP | 5462 Messages

28 oct. 2010, 12:45

pour chaeger un fichier CSV dans un base c'est avec LOAD DATA INFILE
http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

Eléphant du PHP | 86 Messages

28 oct. 2010, 12:49

Effectivement j'avais regardé ce cours mais concrètement j'ai pas eu d'idée par rapport à son utilisation dans mon code php.Je souhaite faire un formulaire pour rechercher le fichier et le charger dans la base de données

ViPHP
ViPHP | 5462 Messages

28 oct. 2010, 13:47

Effectivement j'avais regardé ce cours mais concrètement j'ai pas eu d'idée par rapport à son utilisation dans mon code php.Je souhaite faire un formulaire pour rechercher le fichier et le charger dans la base de données
tu upload ton fichier, tu fait un requete SQL avec le INFILE LOCAL qui pointe vers le fichier temporaire, et voila c'est finie :wink:

ViPHP
AB
ViPHP | 5818 Messages

28 oct. 2010, 14:26

Auparavant je vérifierais le point suivant
"Pour utiliser la commande LOAD DATA INFILE sur des fichiers du serveur, vous devez avoir le droit de FILE sur le serveur. See Section 5.5.3, « Droits fournis par MySQL »."
Et sinon tu pourras toujours te rediriger vers fgetcsv

ViPHP
ViPHP | 5462 Messages

28 oct. 2010, 16:40

ouai c'est vrai a chaque fois je zap #-o

sinon pourquoi utilise tu DOMDocument c'est pas un fichier CSV que t'as ?

Eléphant du PHP | 86 Messages

28 oct. 2010, 17:05

Finalement je comprend plus rien à ce que vous dites :oops:

Eléphant du PHP | 86 Messages

28 oct. 2010, 20:03

Finalement aprés avoir utilissé la fonction LOAD DATA INFILE je parvient toujours pas voici mon code

Code : Tout sélectionner

ini_set('display_errors','1'); //Inclusion de la classe mère include ("SGBD.class.php"); /* Initialisation de la variable du SGBD correspondant */ $SQL = "MySQL"; // Inclusion de la classe fille du SGBD correspondant include ($SQL.".SGBD.class.php"); /* Création d'un nouvel objet de la classe fille + lancement du constructeur */ $database = new $SQL('root', '', 'localhost', 'dbprojet'); // Connection à la base de données $database->connect(); if( isset($_FILES['fichier'])) { $nom=$_FILES['fichier']['name']; $extensions_valides= array('xlsx' , 'txt' , 'xls','csv' ); $extension_upload = strtolower( substr( strrchr($_FILES['fichier']['name'], '.') ,1) ); if( in_array( $extension_upload, $extensions_valides )) { echo 'extension valide'; $database->requete("LOAD DATA INFILE '$nom' INTO TABLE WHITE_LISTE FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES STARTING BY '' TERMINATED BY '\n' ('', numero, $_POST['SERVICES'])"); }else { echo 'extension non valide'; } } ?>

ViPHP
ViPHP | 5462 Messages

28 oct. 2010, 20:32

$nom ca correspond a quoi ? il faut aussi utilise LOCAL

Eléphant du PHP | 86 Messages

29 oct. 2010, 09:27

$nom correspond au nom du fichier que est upload
Même avec le local c'est bizard je crois que c'est un probléme de syntaxe :shock:

Eléphant du PHP | 86 Messages

29 oct. 2010, 12:00

J'ai pas toujours de solution quelqu'un voit mon erreur?