Beste,
Een csv van mijn bank MSQL importeren is me inmiddels gelukt.
Nu wil ik checken of ik niet dubbel importeer.
Heb bij // echo 'eerder?'; een check uitgevoerd, echter dit werkt niet.
Kan iemand mij helpen?
B.v.d.
<?php
define('DB_SERVER', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', 'geen');
define('DB_NAME', 'rabobank');

@$conn = mysql_connect (DB_SERVER, DB_USER, DB_PASSWORD);
mysql_select_db (DB_NAME,$conn);
if(!$conn){
die( "Sorry! There seems to be a problem connecting to our database.");
}
error_reporting (E_ALL-E_NOTICE);

$table_db = 'csv_import';

function errors($error){
if (!empty($error))
{
$i = 0;
while ($i < count($error)){
$showError.= '<div class="msg-error">'.$error[$i].'</div>';
$i ++;}
return $showError;
}// close if empty errors
} // close function

if (isset($_POST['upfile'])){

if (!$error){

$tot = 0;
$handle = fopen($_FILES["uploaded"]["tmp_name"], "r");
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
for ($c=0; $c < 1; $c++) {

//only run if the first column if not equal to iban
if($data[0] !='iban'){
$data = str_replace("'", ' ', $data);

$s_sql = "SELECT * FROM ".$table_db." WHERE tegenrekening = '".$data."' AND naam_tegenpartij = '".$data."' AND datum = '".$data."' AND bedrag = '".$data."' AND volgnr = '".$data."'";
// echo 'eerder?';
$check = mysql_query($s_sql);
$check = mysql_fetch_row($check);
if(!$check[0]){
// echo 'geen eerdere';

mysql_query("INSERT INTO ".$table_db."(
iban,
munt,
bic,
volgnr,
datum,
rentedatum,
bedrag,
saldo_na,
tegenrekening,
naam_tegenpartij,
naam_uiteindelijke_partij,
naam_initi_partij,
bic_tegenpartij,
code,
batch_id,
transactiereferentie,
machtigingskenmerk,
incassant_id,
betalingskenmerk,
omschrijving_1,
omschrijving_2,
omschrijving_3,
reden_retour,
oorspr_bedrag,
oorspr_munt,
koers
)VALUES(
'".mysql_real_escape_string($data[0])."',
'".mysql_real_escape_string($data[1])."',
'".mysql_real_escape_string($data[2])."',
'".mysql_real_escape_string($data[3])."',
'".mysql_real_escape_string($data[4])."',
'".mysql_real_escape_string($data[5])."',
'".mysql_real_escape_string($data[6])."',
'".mysql_real_escape_string($data[7])."',
'".mysql_real_escape_string($data[8])."',
'".mysql_real_escape_string($data[9])."',
'".mysql_real_escape_string($data[10])."',
'".mysql_real_escape_string($data[11])."',
'".mysql_real_escape_string($data[12])."',
'".mysql_real_escape_string($data[13])."',
'".mysql_real_escape_string($data[14])."',
'".mysql_real_escape_string($data[15])."',
'".mysql_real_escape_string($data[16])."',
'".mysql_real_escape_string($data[17])."',
'".mysql_real_escape_string($data[18])."',
'".mysql_real_escape_string($data[19])."',
'".mysql_real_escape_string($data[20])."',
'".mysql_real_escape_string($data[21])."',
'".mysql_real_escape_string($data[22])."',
'".mysql_real_escape_string($data[23])."',
'".mysql_real_escape_string($data[24])."',
'".mysql_real_escape_string($data[25])."'
)")or die(mysql_error());
}

$tot++;}
}
}
fclose($handle);
$content.= '<div class="table_lijntje">Er zijn in totaal <strong>'.$tot.'</strong> gegevens geïmporteerd...</div>
<meta http-equiv="refresh" content="2; URL=rabo-2018.php">';

}// end no error
}//close if isset upfile

$er = errors($error);
$content.= <<<EOF
$er
<form enctype="multipart/form-data" action="" method="post">
<table cellspacing="1" cellpadding="1">
<tr>
<td><h3>import CSV Rabobank</h3>
<br />
<input name="uploaded" type="file" /></td>
</tr>
<tr>
<td><input type="submit" name="upfile" value="Upload File"></td>
</tr>
</table>
</form>
EOF;
echo $content;
?>
Controleer met mysql(i)_num_rows of een record bestaat.

Verder raad ik aan om over te stappen op de MySQLi-functies omdat de MySQL-functies in PHP 7 ter ziele zijn. Als je hosting je overzet naar de nieuwe versie zou je script direct weigeren met het uitvoeren ervan.
Bedankt voor je reactie, maar dit script gebruik ik enkel local.
Dan alsnog raad ik het aan. Want ik neem aan dat je ooit zal upgraden. Er komt steeds nieuwe functionaliteit in PHP bij, en er sterft functionaliteit af.
Wat zou de simpelste check zijn om te controleren wat je al hebt opgeslagen? Wellicht heb je genoeg aan de datum en het volgnummer? Ik neem aan dat de CSV-lijst een bepaalde sortering heeft waar je handig gebruik van kunt maken.

Het wordt natuurlijk nog een ander verhaal als deze bank antidateert :p. Dan zou je op een of andere manier elke transactie uniek moeten kunnen onderscheiden. Dus wat je eigenlijk nog steeds wilt weten is: welke (minimale) combinatie van data maakt een transactie uniek zodat je deze snel kunt spiegelen met wat in je database zit. En al eerder aangehaald: als die lijst een volgorde heeft, hoef je ook alleen maar de laatst toegevoegde transactie te identificeren om de draad voor het invoegen van nieuwe data op te pakken.

Wellicht niet direct van toepassing op jouw situatie, maar @Ariën heeft wel een punt. Ook code heeft een houdbaarheidsdatum.

Los hiervan, was er geen MySQL commando om CSV-data rechtstreeks in de database te duwen? Moet je wel even kijken hoe je kunt ontdubbelen, of wellicht beter, dubbele entries kunt voorkomen.
Dat op regel 38+39 gaat niet werken. Je kunt niet voor een hele array tegelijk de string waarde aanpassen. Via een foreach() of iets dergelijks moet je dat voor elke waarde apart doen.

Op regel 41 plak je dan in de query steeds $data (naar wat ik begrijp een array), dat gaat dus ook niet werken (en je vind dus niet een eerdere transactie).

En wat is het nut van regel 35?
39 werkt wel.
Ben niet van plan local naar PHP 7 te gaan updaten.
Eerst had ik'm werkend voor een komma gescheiden txt-bestand.
Maar de bank stapt daar vanaf en gebruikt nog enkel csv of pdf
Het was voor mij een nuttig overzicht van mijn bankafschriften met goede zoekfunctie en verschillende selectie-mogelijkheden, die ik nu werkend probeer te krijgen voor csv

Ik ben en word geen programmeur.
Dit scripje heb ik gevonden en probeer'm voor eigen gebruik werkend te krijgen.
Graag met jullie hulp.
Henque Beaune op 02/09/2018 17:43:38

39 werkt wel.
Ben niet van plan local naar PHP 7 te gaan updaten.

Ik zeg niet dat je moet upgraden, maar het kan geen kwaad om alvast naar MySQLi over te stappen. Straks downlaod je een script die alleen op PHP 7 werkt. Of misschien herinstalleer je straks te webserver na een computer-crash waarna je opeens PHP 7 hebt.

Alvast richten op de toekomst kan geen kwaad. Hoe langer je wacht, hoe meer het pijn zal doen.
Henque Beaune op 02/09/2018 17:43:38

39 werkt wel.


Verrek, weer wat geleerd :-)

Maar zoals je 'm toepast in de query daarna gaat het niet werken. Je moet aangeven welke index je van de array je in wilt voegen (als het goed is krijg je nu een "Array to string conversion"; en dus geen geldige query, en dus geen match op je "eerder" check).

Bang voor een crash ben ik niet.
Ik heb een dubbele backup van m'n hele HD die altijd actueel is, en ik ook nog terug kan gaan naar verschillende datums.
Zelfs van 3 jaar terug.

Blijft de vraag:
Hoe krijg ik een goede check zodat er geen dubbele records worden geïmporteerd in MSQL- PHP Version 5.6.3

[size=xsmall]Toevoeging op 02/09/2018 18:56:10:[/size]

Om dit script werkend te krijgen voor PHP 7, is voor mij teveel gedonder.
Ik ben een leek, die enkel een praktisch overzicht van mijn bankzaken weer werkend wil krijgen.

[size=xsmall]Toevoeging op 02/09/2018 19:03:13:[/size]

ideetje voor één van jullie een leuke script te schrijven voor een rabobank csv-afschriften met selecteren op naam of datum ofzo?
Henque Beaune op 02/09/2018 18:51:09

Bang voor een crash ben ik niet.
Ik heb een dubbele backup van m'n hele HD die altijd actueel is, en ik ook nog terug kan gaan naar verschillende datums.
Zelfs van 3 jaar terug.

Ook een snapshot van je OS en applicaties? ;-)

Henque Beaune op 02/09/2018 18:51:09

Om dit script werkend te krijgen voor PHP 7, is voor mij teveel gedonder.
Ik ben een leek, die enkel een praktisch overzicht van mijn bankzaken weer werkend wil krijgen.

Pfffrt! :-P
Leek of niet, een beetje doorzettingsvermogen en logisch kijken op php.net moet wel werken. En anders zijn wij er natuurlijk nog als je er echt niet uit komt ;-)

Toen ik leek was ging ik ook in de manuals neuzen, en logische dingen proberen. Van MySQL-functies naar MySQLi-functies is als grootste stap de i toevoegen. Daarna even de functies doorlopen die her en der aangepast zijn qua argumenten (wat tussen de haakjes staat).

Reageren