par
moogli » 28 sept. 2016, 10:17
je viens de tester ton code (et le miens) avec succès (j'ai corriger la fermeture du curseur).
Il faut que tu débogue ton code pas à pas pour voir ce qui se passe.
est ce que les données sont conforme à ce que tu attends ? (nombre de colonne type de données etc.
Ajoute des else à tes if / elseif pour avoir un message en cas de "cas" non prévu
tu peux afficher $data avec un var_dump($data) pour vérifier cela.
pour mes tests j'ai créé une table simple
CREATE TABLE `entreprise` (
`id` int(11) DEFAULT NULL,
`RaisonSociale` varchar(50) DEFAULT NULL,
`Activite` varchar(50) DEFAULT NULL,
`pays` varchar(50) DEFAULT NULL,
`ville` varchar(50) DEFAULT NULL,
`Email` varchar(50) DEFAULT NULL,
`Telephone` varchar(50) DEFAULT NULL,
`Gerant` varchar(50) DEFAULT NULL,
`AutreContact` varchar(50) DEFAULT NULL,
`TelephoneDirecteur` varchar(50) DEFAULT NULL,
`EmailDirecteur` varchar(50) DEFAULT NULL,
`Fonction` varchar(50) DEFAULT NULL
)
le code php corrigé et fonctionnel
<?php
if (!empty($_FILES['file'])) {
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('delete from entreprise');
} catch (Exception $e) {
die('Erreur : '.$e->getMessage());
}
//UPLOAD DU FICHIER CSV, vérification et insertion en BASE
if (isset($_FILES["file"]["type"]) != "application/vnd.ms-excel") {
die("Ce n'est pas un fichier de type .csv");
} elseif (is_uploaded_file($_FILES['file']['tmp_name'])) {
$req = $pdo->prepare('INSERT INTO entreprise ( RaisonSociale, Activite, pays, ville, Email, Telephone, Gerant,
AutreContact, TelephoneDirecteur, EmailDirecteur, Fonction) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$file = new SplFileObject($_FILES['file']['tmp_name']);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
foreach ($file as $row) {
$req->execute([$row[0], $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10]]);
}
$req->closeCursor();
} else {
echo 'epic fail<br />';
}
}
?>
<form enctype="multipart/form-data" action="" method="POST">
<div class="form-group">
<input name="file" type="file" />
<p><input type="submit" value="Envoyez le fichier"/></p>
</div>
</form>
Le fichier de test :
https://gist.github.com/anonymous/b69f9 ... 55a3a6fa86
@+
je viens de tester ton code (et le miens) avec succès (j'ai corriger la fermeture du curseur).
Il faut que tu débogue ton code pas à pas pour voir ce qui se passe.
est ce que les données sont conforme à ce que tu attends ? (nombre de colonne type de données etc.
Ajoute des else à tes if / elseif pour avoir un message en cas de "cas" non prévu
tu peux afficher $data avec un var_dump($data) pour vérifier cela.
pour mes tests j'ai créé une table simple
[sql]CREATE TABLE `entreprise` (
`id` int(11) DEFAULT NULL,
`RaisonSociale` varchar(50) DEFAULT NULL,
`Activite` varchar(50) DEFAULT NULL,
`pays` varchar(50) DEFAULT NULL,
`ville` varchar(50) DEFAULT NULL,
`Email` varchar(50) DEFAULT NULL,
`Telephone` varchar(50) DEFAULT NULL,
`Gerant` varchar(50) DEFAULT NULL,
`AutreContact` varchar(50) DEFAULT NULL,
`TelephoneDirecteur` varchar(50) DEFAULT NULL,
`EmailDirecteur` varchar(50) DEFAULT NULL,
`Fonction` varchar(50) DEFAULT NULL
)[/sql]
le code php corrigé et fonctionnel
[php]<?php
if (!empty($_FILES['file'])) {
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('delete from entreprise');
} catch (Exception $e) {
die('Erreur : '.$e->getMessage());
}
//UPLOAD DU FICHIER CSV, vérification et insertion en BASE
if (isset($_FILES["file"]["type"]) != "application/vnd.ms-excel") {
die("Ce n'est pas un fichier de type .csv");
} elseif (is_uploaded_file($_FILES['file']['tmp_name'])) {
$req = $pdo->prepare('INSERT INTO entreprise ( RaisonSociale, Activite, pays, ville, Email, Telephone, Gerant,
AutreContact, TelephoneDirecteur, EmailDirecteur, Fonction) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$file = new SplFileObject($_FILES['file']['tmp_name']);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
foreach ($file as $row) {
$req->execute([$row[0], $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10]]);
}
$req->closeCursor();
} else {
echo 'epic fail<br />';
}
}
?>
<form enctype="multipart/form-data" action="" method="POST">
<div class="form-group">
<input name="file" type="file" />
<p><input type="submit" value="Envoyez le fichier"/></p>
</div>
</form>[/php]
Le fichier de test : https://gist.github.com/anonymous/b69f9a10e849ee6f8cfa8d55a3a6fa86
@+