Bonjour,

Je désire importer des données d'un fichier csv à partir d'un formulaire vers une base de données. Je sais que c'est possible de le faire avec par exemple phpadmin, mais je dois pouvoir le faire qu'avec une page. Et est-ce possible de lire ce qu'il a dans le fichier sans l'uploader sur le serveur? (sur le disque)

J'ai trouvé ce code, mais il ne réussi pas à récupéré le fichier de mon disque dur et je ne vois pas trop comment l'importer. Par contre, cela fonctionne lorsque le fichier est présent sur le serveur, mais je ne peux l'uploader sur ce dernier pour compliquer le tout.

Bref, il faut que je puisse lire un fichier csv sur mon disque dur et que les données recueillies soit envoyer vers la base de données du serveur.

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<html>
<head>
<title>Importer un fichier texte dans une bdd MySQL</title>
</head>
<body>
<h2>Importer un fichier texte dans une bdd MySQL</h2>
 
<?
 switch($action)
 {
  /* LECTURE ET AJOUT DES DONNEES DANS LA TABLE */
   case "ajouter":
 
 /* Variables */
   $bdd = "bdd"; /* Base de données */
   $host= "localhost"; /* Hote (localhost en principe) */
   $user= "user"; /* Utilisateur */
   $pass= "pwd"; /* Mot de passe */
 
 /* Connexion bdd */
   @mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données");
   @mysql_select_db($bdd);
 
 /* On cree la table */
 if ($creertable)
  {
  $query = "CREATE TABLE $table( val1 int(4), val2 varchar(4), val3(24), val4 varchar(4) )";
  $result= MYSQL_QUERY($query);
  }
 
 /* On ouvre le fichier à importer en lecture seulement */
 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)) /* Et Hop on importe */
    { /* Tant qu'on n'atteint pas la fin du fichier */
       $ligne = fgets($fp,4096); /* On lit une ligne */  
 
       /* On récupère les champs séparés par ; dans liste*/
       $liste = explode( ";",$ligne);  
 
       /* On assigne les variables */
       $val1 = $liste[0];
       $val2 = $liste[1];
       $val3 = $liste[2];
       $val4 =  $liste[3];
 
       /* Ajouter un nouvel enregistrement dans la table */
       $query = "INSERT INTO $table VALUES('$val1','$val2','$val3','$val4')";
       $result= MYSQL_QUERY($query);
 
       if(mysql_error())
        { /* Erreur dans la base de donnees, sûrement la table qu'il faut créer */
           print "Erreur dans la base de données : ".mysql_error();
           print "<br>Importation stoppée.";
           exit();
        }
       else /* Tout va bien */
         print "$val1 $val2 $val 3 $val4 <br>";
     }
 
     echo "<br>Importation terminée, avec succès.";
 
     /* Fermeture */
     fclose($fp);
     MYSQL_CLOSE();
 
   break;
 
 
   /* FORMULAIRE DE CHOIX D'IMPORTATION */  
 
   default:
   ?>  
   <? echo "<form method=\"post\" action=\"$PHP_SELF\">"; ?>
     Pour ajouter ton serveur il suffit de remplir ce formulaire
     <table border="0" cellspacing="0" cellpadding="3">
      <tr>
       <td>Table :</td>
       <td> <input type="text" name="table"> </td>
      </tr>
      <tr>
       <td>Fichier :</td>
       <td> <input type="file" name="fichier"> </td>
      </tr>
      <tr>
       <td>Créer table ? :</td>
       <td> <input type="checkbox" name="creertable" checked> </td>
      </tr>
      <tr>
        <td></td>  
       <td> <input type="submit" name="submit" value="Et HoP !"> </td>
      </tr>
     </table>
     <input type="hidden" name="action" value="ajouter">  
    </form>
   <?
   break;
 
   }
 
  ?>
 
</body>
</html>
J'ai trouvé rien de similaire en faisant une recherche... Merci d'avance pour votre aide.