j'ai modifié la structure de requête +eur fois et ca marche pas
Version imprimable
j'ai modifié la structure de requête +eur fois et ca marche pas
Le problème pour insérer les données en base est que ton fichier csv contient des lignes avec une syntaxe telle que :
~/pdf/Spécialisation-Ferronnerie d'art.pdf
Or le guillemet simple dans : " ...d'art... " est interprété par SQL comme un séparateur de valeur à insérer. Il faut donc réécrire les lignes contenant des guillemets simples.
Pour ne pas avoir à les reprendre une à une j'ai rajouté un bout de code qui va reconstituer les lignes avec des guillemets simples en insérant un caractère d'échappement pour que SQL ne l'interprète pas comme un séparateur de valeur.
Je te poste le code que j'avais changé avec la partie qui va réécrire les lignes. Il fonctionne, la mise en base de données se fait!! J'ai rajouté les lignes de connexion à la base de données, je suppose que tu les avais déjà écrite mais c'est pour avoir un code qui tourne.
Fais attention l'insertion en base de données prend un certain temps, il est possible qui tu es une erreur :Code:
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 <?php $hostname = "localhost"; $database = "test"; $username = "root"; $password = ""; $connect = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); mysql_select_db($database,$connect); $var="./donnees.csv"; if (!file_exists($var)){ // le fichier n'existe pas echo('Fichier introuvable !<br>Importation stoppée.'); } else { $fp = fopen($var, "r"); $i=0; while (($liste = fgetcsv($fp,4096,";"))!==FALSE) { $lliste=array(); if($i>1)//Sert à ne pas prendre les deux première ligne de ton fichier qui sont les noms des colonnes { foreach($liste as $file)//instancie la tableau $lliste contenant les élément de la ligne $lliste[]=$file; //certaines lignes du fichier csv ont une mauvaise syntaxe : une ligne tq : "j'aime le php" ne va pas s'insérer à cause du guillemet simple de "j'aime", sql le prend comme une séparateur de valeur //le but ici est de les reconstituer avec la bonne syntaxe for($j=0;$j<count($lliste);$j++) { $tab=explode("'",$lliste[$j]); if(count($tab)>1)//cibler uniquement les lignes contenant des guillemets simples : ' { $reconstitution=""; for($k=0;$k<count($tab);$k++) { if($k!=(count($tab)-1)) { $reconstitution=$reconstitution.$tab[$k]."\'";//on reconstruit la ligne en insérant un caractère d'échappement : \ //car l'insertion en bd block à cause des guillemets simples contenus dans les lignes } else{//ici on cible le dernier morceau de la ligne pour ne pas rajouter un \ à la fin $reconstitution=$reconstitution.$tab[$k]; } } $lliste[$j]=$reconstitution;//on reforme le paramètre d'indice $j avec la bonne syntaxe } } $query = "INSERT INTO etablissement(`id_etablissement`,`VIlle`,`Secteur`,`Etablissement`,`FiliereDeFormation`,`Niveau`,`fiche`,`ID`) VALUES ('".$lliste[0]."','".$lliste[1]."','".$lliste[2]."','".$lliste[3]."','".$lliste[4]."','".$lliste[5]."','".$lliste[6]."','".$lliste[7]."')"; $result= mysql_query($query) or die(mysql_error()); } $i++; } fclose($fp); echo("importation réussie des élèves"); } ?>
Fatal error: Maximum execution time of 30 seconds exceeded in ...
Il faudra modifier soit par une fonction soit dans tes fichiers de configuration le time_out.
je vous remercie pour votre aide bbbbbbbbbbbbbbbbbc mais bn j'ai trouvé la solution :D, c'est une erreur de syntaxe dans la requête.
merciiii bonne journée :)
voilà mon code pour ceux qui ont le mem pblm
<?php
include('fonction.php');
ConnectMabase();
$var="C:\don\Classeur1.csv";
if (!file_exists($var)){ // le fichier n'existe pas
echo('Fichier introuvable !<br>Importation stoppée.');
}
else
{
$fp = fopen($var, "r");
while (($liste = fgetcsv($fp,4096,";"))!==FALSE){
//foreach($liste as $ligne)
// {
$VIlle = $liste[1];
$Secteur = $liste[2];
$Etablissement = $liste[3];
$FiliereDeFormation = $liste[4];
$Niveau = $liste[5];
$fiche = $liste[6];
$ID='0';
mysql_query("INSERT INTO etablissement ( VIlle, Secteur, Etablissement, FiliereDeFormation, Niveau , fiche, ID ) VALUES ('$VIlle','$Secteur','$Etablissement', '$FiliereDeFormation','$Niveau', '$fiche','0');");
// }
}
fclose($fp);
echo("importation réussie des élèves");
}
?>