Dobbelte transaktioner ved INSERT INTO database fil

Her kan du få hjælp og stille spørgsmål til PHP!
Besvar
Freddy
Begynder
Indlæg:15
Tilmeldt:25. apr 2014, 01:58
Dobbelte transaktioner ved INSERT INTO database fil

Indlæg af Freddy » 21. feb 2015, 13:22

Hver måned gemmer jeg en fil fra banken med månedens transaktioner. Filerne hedder
ÅÅÅÅ.MM.csv
Disse filer har jeg listet i en php-fil.
Hver linje er lavet som et link der indeholder fil-navn:
echo "<a href=Dankort.php?link=$fil target=_blank>$fil</a>";

Meningen med Dankort.php er at indlæse transaktionerne i en db-fil og efterfølgende
lave nogle sammentællinger på transaktionstyper (kontanthævning, benzin osv.)
Når jeg klikker på f.eks. måned 08 indlæser den fint hele filen.
Når jeg går tilbage og klikker på måned 09 indlæses den også fint.
MEN når jeg så går tilbage og indlæser måned 08 igen, så indlæser den godt nok måned 08,
men også nogle af måned 09??? Jeg har lavet et echo statement og kan se at det kun er
måned 08 der læses og alligevel havner nogle 09 transaktioner i db-filen.
Jeg har inden indlæsning konstateret at db-filen bliver tømt.

Det er som om der ligger noget i en buffer, cache eller lignede, men jeg har jo lavet
$stmt->close(); på db-filen og
fclose($handle); på csv-filen.

Jeg har også prøvet med clearstatcache(); og
$thread_id = $mysqli->thread_id; $mysqli->kill($thread_id);
men der er ikke noget der virker.

er der nogen der har en god ide:

Dankort.php ser sådan ud:

<?php

// START opret forbindelse til database -----------------------------------START
$server = "localhost";
$brugernavn = "root";
$kode = "xxxxxxxx";
$db = "testdatabase";
$navn = $_GET["link"];
$sti= "/Data/Bankfiler/" . $navn;

$mysqli = new mysqli($server , $brugernavn , $kode, $db);

if (mysqli_connect_errno())
{
echo 'Der opstod en fejl ved forbindelsen: ' . mysqli_connect_error();
exit();
}

if (!$mysqli->set_charset("utf8"))
{
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
}

// SLUT opret forbindelse til database ------------------------------------ SLUT





// START tøm databasefil før indlæasing ---------------------------------- START
if ($stmt = $mysqli->prepare('DELETE FROM `dankorttrans`'))
{
$stmt->execute();
$stmt->close();
}

// SLUT tøm databasefil før indlæasing ------------------------------------ SLUT





// START læs CSV fil og INSERT i databasefil ----------------------------- START
$csv = array(7);

$handle = fopen($sti, "r") or die("can't open file");

while (($info = fgetcsv($handle, 120, ";")) !==false)
{
$csv[] = $info;
$info = array_map("utf8_encode", $info);

if ($info[2] === "Tekst") {
goto hop;
}

$DK = substr($info[2], 0, 2);
$aar = substr($navn, 0, 4);
$md = substr($navn, 5, 2);
$aarmd = $aar . $md;
$kr_med_tegn = $info[4];
$kr_uden_tusindtalssep = (str_replace('.', ' ', $kr_med_tegn));
$kr_uden_komma = (str_replace(',', '.', $kr_uden_tusindtalssep));
$kr = (str_replace(' ', '',$kr_uden_komma));


if ($DK === "DK")
{
$tekst43 = substr($info[2], 9, 43);
$filtekst= $tekst43;
}else{
$tekst51 = substr($info[2], 0, 60);
$filtekst= $tekst51;
}

if ($stmt = $mysqli->prepare('INSERT INTO `dankorttrans`(Dato, Tekst, Belob) VALUES (?, ?, ?)'))
{
$stmt->bind_param('isd', $Dato, $Tekst, $Belob);

$Dato = $aarmd;
$Tekst = $filtekst;
$Belob = $kr;
$stmt->execute();
$stmt->close();
echo $Tekst;
hop:

} else {

echo 'Der opstod en fejl i formularen: ' . $mysqli->error;
}
}
fclose($handle);
?>

Besvar