Erreur dans insert into issu d'un fichier csv
Bonjour,
J'esaye d'adapter un code trouvé sur le net:
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 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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| <?php
////include ("inc/prive.inc.php");
include ("inc/fonctions.inc.php");
////include ("config/constantes.inc.php");
Normalisation();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title><?php echo ECOLE ?></title>
<link media="screen" rel="stylesheet" href="config/screen.css" type="text/css">
<link media="print" rel="stylesheet" href="config/print.css" type="text/css">
<link rel="stylesheet" href="config/menu.css" type="text/css" media="screen">
<script language="javascript" type="text/javascript" src="inc/fonctions.js">
</script>
</head>
<body>
<?php
// autorisations pour la page
////autoriser ("admin");
// menu
require ("inc/menu.inc.php");
?>
<div id="texte">
<h2>Importation d'un fichier CSV</h2>
<?php
$mode = isset($_POST['mode']) ? $_POST['mode'] : Null;
switch ($mode)
{
case 'Confirmer':
// ouvrir la BD
include ("variables.inc.php");
$lienDB = mysql_connect($bddserver, $bddlogin, $bddpassword);
mysql_select_db ($bdd);
$handle = fopen("./eleves.csv", "r");
$ligne = 1;
while (($data = fgetcsv($handle, 5000, ",","\"")) !== FALSE)
{
$num = count($data);
if ($ligne == 1)
{
// sur la première ligne, on trouve les intitulés des colonnes
$debutsql = "INSERT INTO elevescomplete22 (";
for ($i=0; $i < $num; $i++)
{
$debutsql .= "$data[$i]";
if ($i < $num-1) $debutsql .= ",";
}
$debutsql .= ") VALUES (";
}
else
{
// sur les lignes suivantes, on trouve les infos à introduire dans la BD
$sql = $debutsql;
for ($i=0; $i < $num; $i++)
{
$sql .= "'".mysql_real_escape_string($data[$i])."'";
if ($i < $num-1) $sql .= ","; else $sql .= ");";
}
mysql_query($sql);
if (mysql_error())
{
echo mysql_error() ."<br>\n";
$erreur = true;
}
}
$ligne++;
echo "$sql <br />";
mysql_query($sql);
}
fclose($handle);
mysql_close ($lienDB);
if ($erreur == false)
{
$texte = "L'importation des données semble s'être bien passée.";
redir ("index.php","",$texte, 5000);
}
else
{
$texte = "Il s'est produit une erreur durant l'importation.";
redir ("index.php","",$texte, 10000);
}
break;
case 'Envoyer':
// recopie du fichier sous un nom définitif
$nomTemporaire = $_FILES['fichierCSV']['tmp_name'];
if( !move_uploaded_file($nomTemporaire, "./eleves.csv") )
exit("Impossible de copier le fichier.");
echo "<div style=\"text-align: center\">\n";
echo "<form name=\"form1\" method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">\n";
echo "<p>Le fichier CSV a été transmis au serveur.</p>\n";
echo "<p>Veuillez confirmer l'importation des données.</p>\n";
echo "<p>\n<input type=\"reset\" name=\"submit\" value=\"Annuler\"";
echo "onclick=\"javascript:history.go(-1)\">\n";
echo "<input type=\"submit\" value=\"Confirmer\" name=\"mode\"></p>\n";
echo "</form>\n";
echo "</div>\n";
// tableau de prévisualisation
echo "<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\">\n";
$handle = fopen("./eleves.csv", "r");
while (($data = fgetcsv($handle, 5000, ",","\"")) !== FALSE)
{
$num = count($data);
echo "<tr>\n";
for ($i=0; $i < $num; $i++)
echo "<td>".$data[$i] . "</td>\n";
echo "</tr>\n";
}
fclose($handle);
echo "</table>\n";
break;
default:
echo "<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\" ";
echo "name=\"form1\" enctype=\"multipart/form-data\">\n";
echo "<input name=\"fichierCSV\" type=\"file\">\n";
echo "<input name=\"mode\" value=\"Envoyer\" type=\"submit\">\n";
echo "</form>\n";
break;
}
?>
</div>
</body>
</html> |
le problème est qu'il me donne ça:
Code:
INSERT INTO elevescomplete22 (Nom;Prénom) VALUES ('DJELASSI;Sophya');
alors que la bonne syntaxe est:
Code:
INSERT INTO elevescomplete22 (Nom,Prénom) VALUES ('Dupond','Michel')
je n'arrive pas à voir ou est le point virgule de (Nom;Prénom) ainsi que les apostrophes pour encadrer les donneés....
les données apparaissent deux fois
merci ça fonctionne
mais les données apparaissent deux fois dans la base mysql, pourtant j'ai bien une fois insert into
Code:
1 2
| INSERT INTO elevescomplete22 (Nom,Prénom) VALUES ('ABRAHAM','Marine');
INSERT INTO elevescomplete22 (Nom,Prénom) VALUES ('ABRIAL','Cédric'); |
j'ai bien vérifié, les insert into sont uniques, alors je ne m'explique pas pourqoi j'ai deux fois les données!
une idée ?