je vous expose mon problème:
j'ai un fichier brut de type csv que je dois intégrer dans une bdd
Code : Tout sélectionner
6,1,582,446/0
6,1,4,0/3985.6
6,1,206,23/87.45
6,1,1039,4/37.75
6,1,1110,157/0
6,1,32,0/3985.6
6,1,1109,0/2610.25
6,1,138,297/0
6,1,207,7/35.8
6,1,944,07.11.16/08:59:24
6,1,945,07.11.16/18:37:03
6,1,321,207/2024.2
6,1,323,90/1833.8
6,1,324,14/127.6
6,1,445,0/2024.2
6,1,450,0/1961.4
6,1,833,404/1371.25
6,1,834,585/2610.25
6,1,843,116/430.3
6,1,150,1/0
6,1,936,0/0
6,1,301,0/2024.9
6,1,303,0/1833.1
6,1,304,0/127.6
6,1,996,384/1364.25
6,1,1044,0/0.7
6,1,1116,406/2610.25
6,1,80,0/20
6,1,89,0/3.33
6,1,81,0/1371.25
6,1,90,0/71.49
6,1,82,0/2594.35
6,1,91,0/235.85<?php
if(($handle = fopen('rapport.csv', 'r')) !== FALSE)
{
while(($line = fgetcsv($handle, 0, ',', '\'' )) !== FALSE)
{
//echo '<pre>';
var_dump($line);
//echo '</pre>';*/
if(!isset($financier) OR !array_key_exists('codeCaisse', $financier) OR $financier['codeCaisse'] != $line[1])
{
if(isset($financier))
{
$financiers[] = $financier;
unset($financier);
}
$financier =
[
'codeCaisse' => null,
'decompteZ1' => null,
'totalChifAffaire' => null,
'correction' => null,
'voidReceipt' => null,
'gcCustomerCount' => null,
'sansCommission' => null,
'gcTotalSales' => null,
'hoteClient' => null,
'annulation' => null,
'premiereTransaction' => null,
'derniereTransaction' => null,
'totalTiroirPaiement1' => null,
'totalTiroirPaiement3' => null,
'totalTiroirPaiement4' => null,
'totalTiroirPaiement5' => null,
'totalDevise1Grp1' => null,
'totalDevise1Grp2' => null,
'modificateur6' => null,
'modificateur7' => null,
'modificateur16' => null,
'paiement1' => null,
'paiement3' => null,
'paiement4' => null,
'paiement5' => null,
'modificateur17' => null,
'venteSurTable' => null,
'stImposable1' => null,
'tva1' => null,
'stImposable2' => null,
'tva2' => null,
'stImposable3' => null,
'tva3' => null,
];
$financier['codeCaisse'] = $line[1];
//$financier['quantity'] = $line[3];
}
if($line[2] == '582')
{
$key = 'decompteZ1';
}
elseif($line[2] == '4')
{
$key = 'totalChifAffaire';
}
elseif($line[2] == '206')
{
$key = 'correction';
}
elseif($line[2] == '1039')
{
$key = 'voidReceipt';
}
elseif($line[2] == '1110')
{
$key = 'gcCustomerCount';
}
elseif($line[2] == '32')
{
$key = 'sansCommission';
}
elseif($line[2] == '1109')
{
$key = 'gcTotalSales';
}
elseif($line[2] == '138')
{
$key = 'hoteClient';
}
elseif($line[2] == '207')
{
$key = 'annulation';
}
elseif($line[2] == '944')
{
$key = 'premiereTransaction';
}
elseif($line[2] == '945')
{
$key = 'derniereTransaction';
}
elseif($line[2] == '321')
{
$key = 'totalTiroirPaiement1';
}
elseif($line[2] == '323')
{
$key = 'totalTiroirPaiement3';
}
elseif($line[2] == '324')
{
$key = 'totalTiroirPaiement4';
}
elseif($line[2] == '325')
{
$key = 'totalTiroirPaiement5';
}
elseif($line[2] == '445')
{
$key = 'totalDevise1Grp1';
}
elseif($line[2] == '450')
{
$key = 'totalDevise1Grp2';
}
elseif($line[2] == '833')
{
$key = 'modificateur6';
}
elseif($line[2] == '834')
{
$key = 'modificateur7';
}
elseif($line[2] == '843')
{
$key = 'modificateur16';
}
elseif($line[2] == '301')
{
$key = 'paiement1';
}
elseif($line[2] == '303')
{
$key = 'paiement3';
}
elseif($line[2] == '304')
{
$key = 'paiement4';
}
elseif($line[2] == '305')
{
$key = 'paiement5';
}
elseif($line[2] == '996')
{
$key = 'modificateur17';
}
elseif($line[2] == '1116')
{
$key = 'venteSurTable';
}
elseif($line[2] == '80')
{
$key = 'stImposable1';
}
elseif($line[2] == '89')
{
$key = 'tva1';
}
elseif($line[2] == '81')
{
$key = 'stImposable2';
}
elseif($line[2] == '90')
{
$key = 'tva2';
}
elseif($line[2] == '82')
{
$key = 'stImposable3';
}
elseif($line[2] == '91')
{
$key = 'tva3';
}
if(isset($key))
{
$financier[$key] = (float) $line[4];
unset($key);
}
}
}
fclose($handle);
var_dump($financier);//exit;
// Connexion à la base de données
$connection = new PDO
(
'mysql:host=localhost;dbname=vectron;charset=utf8',
'root',
'troiswa',
[
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]
);
foreach($financier AS $finance)
{
$query =
'INSERT INTO
financier
(
codeCaisse,
decompteZ1,
totalChifAffaire,
correction,
voidReceipt,
gcCustomerCount,
sansCommission,
gcTotalSales,
hoteClient,
annulation,
premiereTransaction,
derniereTransaction,
totalTiroirPaiement1,
totalTiroirPaiement3,
totalTiroirPaiement4,
totalTiroirPaiement5,
totalDevise1Grp1,
totalDevise1Grp2,
modificateur6,
modificatuer7,
modificateur16,
paiement1,
paiement3,
paiement4,
paiement5,
modificateur17,
venteSurTable,
stImposable1,
tva1,
stImposable2,
tva2,
stImposable3,
tva3
)
VALUES
(
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?
)
';
$resultSet = $connection->prepare($query);
$resultSet->execute(array_values($finance));
$finance = $resultSet;
}
?>
avant de le traiter je remplace le slash par une virgule manuellement parce que je ne trouve pas la solution dans php (la valeur avant le slash représente une quantité),dans un premier temps je mets le fichier sous forme de tableau dans un deuxième temps je le prépare pour l'intégrer ds ma bdd.
Code : Tout sélectionner
array (size=5)
0 => string '6' (length=1)
1 => string '1' (length=1)
2 => string '91' (length=2)
3 => string '0' (length=1)
4 => string '235.85' (length=6)
array (size=33)
'codeCaisse' => string '1' (length=1)
'decompteZ1' => float 0
'totalChifAffaire' => float 3985.6
'correction' => float 87.45
'voidReceipt' => float 37.75
'gcCustomerCount' => float 0
'sansCommission' => float 3985.6
'gcTotalSales' => float 2610.25
'hoteClient' => float 0
'annulation' => float 35.8
'premiereTransaction' => float 8
'derniereTransaction' => float 18
'totalTiroirPaiement1' => float 2024.2
'totalTiroirPaiement3' => float 1833.8
'totalTiroirPaiement4' => float 127.6
'totalTiroirPaiement5' => null
'totalDevise1Grp1' => float 2024.2
'totalDevise1Grp2' => float 1961.4
'modificateur6' => float 1371.25
'modificateur7' => float 2610.25
'modificateur16' => float 430.3
'paiement1' => float 2024.9
'paiement3' => float 1833.1
'paiement4' => float 127.6
'paiement5' => null
'modificateur17' => float 1364.25
'venteSurTable' => float 2610.25
'stImposable1' => float 20
'tva1' => float 3.33
'stImposable2' => float 1371.25
'tva2' => float 71.49
'stImposable3' => float 2594.35
'tva3' => float 235.85
( ! ) Warning: array_values() expects parameter 1 to be array, string given in C:\xampp\htdocs\sites\Vectron\rapport.php on line 285
Call Stack
# Time Memory Function Location
1 0.0013 148920 {main}( ) ...\rapport.php:0
2 0.0082 163168 array_values ( string(1) ) ...\rapport.php:285
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: no parameters were bound' in C:\xampp\htdocs\sites\Vectron\rapport.php on line 285
( ! ) PDOException: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in C:\xampp\htdocs\sites\Vectron\rapport.php on line 285
Call Stack
# Time Memory Function Location
1 0.0013 148920 {main}( ) ...\rapport.php:0
2 0.0093 163200 execute ( null ) ...\rapport.php:285