Bonjour,
J’ai un problème que j’espere vous pourriez m’aider à résoudre. je dois creer un site de gestion de materiel pour mon stage.
J’ai un formulaire d’ajout de fichier csv dans la base de donnée , sur IE l’insertion se fait correctement, cependant a cause d’un problème d’encodage, les données ne s’affichent pas sur ma page web. Ma base de donnée est en utf8, et collation utf8_general_ci; alors ke sur firefox rien en se produit à part des erreurs disant que fopen() ne peut ouvrir mon fichier csv, et ainsi de suite, ni feof() et fgets() ne fonctionnent.Petite paranthese quand meme : fopen fonctionne que si je mets $_FILES[‘file_import’] a la place de $_POST[‘file_import’],sous firefox mais les autres fonctions retournent les memes erreurs.
Pouvez vous me dire comment modifier le charset pour ke ca concorde avec celle de la base, pour ainsi avoir mes données affichés sur ma page?
feof(): supplied argument is not a valid stream resource in C:\wamp\www\2\csv_bdd.php on line 204
fgets(): supplied argument is not a valid stream resource in C:\wamp\www\2\csv_bdd.php on line 206
Voici le code avec les explications de mon probleme :
-- Importer un fichier(.CSV) dans la base de donnée -- | |
---|---|
Nom de la table MYSQL | Séléctionner une table Matériel Local Site Contact Maintenance Contact Externe Entreprise Relevé d'heure Logiciel Logiciel installé Mouvement Intervention Bon de livraison * |
Séparateur | * |
Fichier | |
|
// ------------------------------------------------------------------------- //
// Insérer le contenu d’un fichier CSV dans une table MySQL. //
// ------------------------------------------------------------------------- //
if(isset($_POST[‘file_import’]))
{
if($_POST[‘nom_table’]=="" || $_POST[‘separateur’]=="")
{
echo ‘Veuillez renseigner les champs marqué d’un *.’;
}else{
//declarations des varables post.
$table = $_POST[‘nom_table’];
$fichier =$_FILES[‘file_import’];
$separateur = $_POST[‘separateur’];
$champs = 0;//declaration des champs des tables a 0.
//Definie les champs selon la table choisi
if($table==“materiel”){ $champs=17 ;}elseif($table==“locaux”){$champs=3 ;}elseif($table==“site” || $table==“contact_maintenance”){ $champs=8 ;}elseif($table==“mouvement” || $table==“installation_logiciel”){ $champs=9 ;}
elseif($table==“contact_externe” || $table==“intervention”){ $champs=14 ;}elseif($table==“entreprise”) { $champs=10;}elseif($table==“releve_heure”) { $champs=5;}
//ouverture du fichier
$filr = fopen("$fichier", “r”);
while (!feof($filr))
{
$lignes = fgets($filr,4096);
$listes = explode("$separateur", “$lignes”);
//Remplacement des caracteres speciaux
$listes = str_replace("’", “’”, $listes);
$listes = str_replace(“é”, “e”, $listes);
$listes = str_replace(’"’, ‘’, $listes);
//Detection de lencodage du fichier
$charset = mb_detect_encoding($listes[$j]);// le charset du fichier est apparement ASCII
$resultat = count($listes);
$table = $table;
for ($i=0; $i<$resultat;$i++)
{
$query1 = “INSERT INTO $table VALUES(”;
$query2="";
for($j=0; $j<=$champs-1;$j++)
{
$listes[$j]= ( isset($listes[$j]) ) ? $listes[$j] : Null;
if(function_exists(‘mb_convert_encoding’)){$listes[$j] = mb_convert_encoding($listes[$j],“utf8”,“auto”);}
$query2 = $query2."’".$listes[$j]."’";
//Ajout de , apres chaque variables de VALUES() dans la requete sql.
if($j<$champs-1){$query2 = $query2.",";}
}
$query3 = $query1 . $query2 . “)”;
}
$resulte= mysql_query($query3);
}
if(mysql_error())
{
echo’
Il y a une erreur dans la base de donnée
: '.mysql_error().'
LE charset est '.$charset ;
} else {
echo’
Insertion des données réussie !
'.$charset;
}
}
}Configuration: Windows XP
Internet Explorer 7.0
Firefox 3
MYSql 5.0.51b
PHP 5.2.6
Apache 2.2.8