par
street51 » 07 nov. 2009, 10:51
Aïe, autre petit souci !
Je crée mon fichier CSV depuis Excel, il ressemble à ceci :
1;12;13;8,5
2;13,4;11;8,3
Quand je lis le fichier, il ne semble pas reconnaître le saut de ligne entre 8,5 et 2.
Dans ma BDD, il ne modifie donc que la valeur n°1, et attribue "8.5 2" (le 2 étant à la ligne dans ma BDD) pour le dernier champ...
Voici mon code, légèrement modifié par rapport à celui ci-dessus :
<?
switch($action)
{
case "ajouter":
if ($fichier == "none")
{
print "Spécifier un fichier à envoyer.";
}
else
{
$dest_file="notes.csv";
$source_file=stripslashes($fichier);
$res_copy=copy($source_file , $dest_file);
print "Fichier envoyé.";
}
$bdd = "xxx";
$host= "xxx";
$user= "xxx";
$pass= "xxx";
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données");
@mysql_select_db($bdd);
if (file_exists($fichier))
$fp = fopen("$fichier", "r");
else
{
echo "Fichier introuvable !<br>Importation stoppée.";
exit();
}
while (!feof($fp))
{
$ligne = fgets($fp,4096);
$liste = explode( ";",$ligne);
$num = $liste[0];
$shs = $liste[1];
$physique = $liste[2];
$chimie = $liste[3];
$shs = preg_replace("#,#", '.', $shs);
$physique = preg_replace("#,#", '.', $physique);
$chimie = preg_replace("#,#", '.', $chimie);
$query = "UPDATE P1 SET shs='$shs', physique='$physique', chimie='$chimie' WHERE num='$num'";
$result= MYSQL_QUERY($query);
if(mysql_error())
{
print "Erreur dans la base de données : ".mysql_error();
print "<br>Importation stoppée.";
exit();
}
else
print "$num $shs $physique $chimie<br>";
}
echo "<br><b>Importation Ok !</b>";
fclose($fp);
MYSQL_CLOSE();
break;
default:
?>
<? echo "<form method=\"post\" action=\"$PHP_SELF\" ENCTYPE=\"multipart/form-data\">"; ?>
<input type="file" name="fichier" enctype="multipart/form-data"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
<input type="submit" name="submit" value="OK !"><input type="hidden" name="action" value="ajouter">
</form>
<?
break;
}
?>
Si je rajoute un "," à la fin de chaque ligne de mon fichier CSV, la 1ère ligne est enregistrée correctement, mais il ne se passe toujours rien pour la 2e...

Aïe, autre petit souci !
Je crée mon fichier CSV depuis Excel, il ressemble à ceci :
[quote]1;12;13;8,5
2;13,4;11;8,3[/quote]
Quand je lis le fichier, il ne semble pas reconnaître le saut de ligne entre 8,5 et 2.
Dans ma BDD, il ne modifie donc que la valeur n°1, et attribue "8.5 2" (le 2 étant à la ligne dans ma BDD) pour le dernier champ...
Voici mon code, légèrement modifié par rapport à celui ci-dessus :
[php]
<?
switch($action)
{
case "ajouter":
if ($fichier == "none")
{
print "Spécifier un fichier à envoyer.";
}
else
{
$dest_file="notes.csv";
$source_file=stripslashes($fichier);
$res_copy=copy($source_file , $dest_file);
print "Fichier envoyé.";
}
$bdd = "xxx";
$host= "xxx";
$user= "xxx";
$pass= "xxx";
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données");
@mysql_select_db($bdd);
if (file_exists($fichier))
$fp = fopen("$fichier", "r");
else
{
echo "Fichier introuvable !<br>Importation stoppée.";
exit();
}
while (!feof($fp))
{
$ligne = fgets($fp,4096);
$liste = explode( ";",$ligne);
$num = $liste[0];
$shs = $liste[1];
$physique = $liste[2];
$chimie = $liste[3];
$shs = preg_replace("#,#", '.', $shs);
$physique = preg_replace("#,#", '.', $physique);
$chimie = preg_replace("#,#", '.', $chimie);
$query = "UPDATE P1 SET shs='$shs', physique='$physique', chimie='$chimie' WHERE num='$num'";
$result= MYSQL_QUERY($query);
if(mysql_error())
{
print "Erreur dans la base de données : ".mysql_error();
print "<br>Importation stoppée.";
exit();
}
else
print "$num $shs $physique $chimie<br>";
}
echo "<br><b>Importation Ok !</b>";
fclose($fp);
MYSQL_CLOSE();
break;
default:
?>
<? echo "<form method=\"post\" action=\"$PHP_SELF\" ENCTYPE=\"multipart/form-data\">"; ?>
<input type="file" name="fichier" enctype="multipart/form-data"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
<input type="submit" name="submit" value="OK !"><input type="hidden" name="action" value="ajouter">
</form>
<?
break;
}
?>
[/php]
Si je rajoute un "," à la fin de chaque ligne de mon fichier CSV, la 1ère ligne est enregistrée correctement, mais il ne se passe toujours rien pour la 2e... :(