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;
?>
- Ariën - op 02/09/2018 19:14:26

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).

Het verschil tussen jou en mij is dat jij meer ambities hebt in scripting.
Iets waar ik meer geïnteresseerd in ben, maak ik er ook een studie van en lees ik ook zoveel mogelijk over.

Voor dit ene gevalletje ga ik niet vele uren manuals lezen.

Als we er hier niet uitkomen, ga ik maar handmatig de dubbele records verwijderen.
Ik snap dat niet iedereen dezelfde ambities heeft, maar je kan het wellicht toch ook vragen als het niet lukt? Het is het proberen waard, niet waar?
Ik heb vroeger ook rekenen geleerd, en steeds groei je daarin. Nu ben ik niet heel bekend met algebra, maar basis-wiskunde beheers ik gewoon. Dus verwacht zeker niet dat scripten moeilijk is.

Scripten is leuk, maar je moet wel de boel up-to-date houden. Straks vind je een script met functies erin die jouw PHP nog niet kent. Of moet je jouw PC/server herinstalleren waarbij je meteen de nieuwste PHP krijgt. Verder zijn er tips gegeven waar je naar kan kijken, zodat het je een hoop handmatig werk bespaart.
Dus probeer het eens, en als het niet lukt, dan kan je het altijd vragen.
Dat is eigenlijk de insteek van een forum.

De meesten geven niet graag een kant en klaar antwoord voor een heel script. Het kost nou eenmaal tijd om dat te programmeren, en te testen. En overigens is "vele uren" wel erg overdreven. ;-)

Als je kant en klaar wat wilt, kan je ook een vacaturetopic in het Vacatureforum overwegen.
Ik bump m'n eigen antwoord maar even, want het is wel heel gezellig hierboven, maar ik heb niet het idee dat je 'm gelezen hebt:
Rob Doemaarwat op 02/09/2018 18:38:03

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).


Henque Beaune op 02/09/2018 18:51:09
Blijft de vraag:
Hoe krijg ik een goede check zodat er geen dubbele records worden geïmporteerd in MSQL- PHP Version 5.6.3

Mijn eerdere antwoord ook gelezen? Als je er op een of andere manier voor zorgt dat je de CSV uit begint te lezen op precies die plek waar je de vorige keer bent opgehouden met records toevoegen heb je in eerste instantie het probleem van dubbele records niet. Je hebt dus een mechanisme nodig die kan detecteren waar je bent gebleven en om dat te kunnen doen moet je op een ondubbelzinnige manier kunnen afleiden welke transactie als laatste is ingevoegd.

EDIT: daartoe is het natuurlijk ook interessant om te weten hoe deze CSV/feed/export over tijd verandert.
Bedankt voor alle reacties.
Voor mij is het abacadabra en zit niet in de mogelijkheid om het te gaan leren.
Mijn kwaliteiten en de aandacht die ik daaraan moet geven, liggen op een ander vlak.
Laat het voor de rest maar zitten.
Ik doe het wel met wat ik nu heb.

M.v.g. Henque

Reageren