Velden checken en niet dubbel importeren.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henque Beaune

Henque Beaune

02/09/2018 15:42:07
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?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;
?>
 
PHP hulp

PHP hulp

19/04/2024 08:10:15
 
- Ariën  -
Beheerder

- Ariën -

02/09/2018 16:06:49
Quote Anchor link
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.
Gewijzigd op 02/09/2018 16:08:11 door - Ariën -
 
Henque Beaune

Henque Beaune

02/09/2018 17:04:56
Quote Anchor link
Bedankt voor je reactie, maar dit script gebruik ik enkel local.
 
- Ariën  -
Beheerder

- Ariën -

02/09/2018 17:20:47
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

02/09/2018 17:23:05
Quote Anchor link
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.
 
Rob Doemaarwat

Rob Doemaarwat

02/09/2018 17:25:41
Quote Anchor link
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?
 
Henque Beaune

Henque Beaune

02/09/2018 17:43:38
Quote Anchor link
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.
Gewijzigd op 02/09/2018 18:10:43 door Henque Beaune
 
- Ariën  -
Beheerder

- Ariën -

02/09/2018 18:28:00
Quote Anchor link
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.
 
Rob Doemaarwat

Rob Doemaarwat

02/09/2018 18:38:03
Quote Anchor link
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).
 
Henque Beaune

Henque Beaune

02/09/2018 18:51:09
Quote Anchor link
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

Toevoeging op 02/09/2018 18:56:10:

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.

Toevoeging op 02/09/2018 19:03:13:

ideetje voor één van jullie een leuke script te schrijven voor een rabobank csv-afschriften met selecteren op naam of datum ofzo?
 
- Ariën  -
Beheerder

- Ariën -

02/09/2018 19:14:26
Quote Anchor link
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).
Gewijzigd op 02/09/2018 19:16:17 door - Ariën -
 
Henque Beaune

Henque Beaune

02/09/2018 19:28:16
Quote Anchor link
- 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.
 
- Ariën  -
Beheerder

- Ariën -

02/09/2018 19:40:56
Quote Anchor link
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.
Gewijzigd op 02/09/2018 19:43:28 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

02/09/2018 19:42:30
Quote Anchor link
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).
 
Thomas van den Heuvel

Thomas van den Heuvel

02/09/2018 22:59:40
Quote Anchor link
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.
Gewijzigd op 02/09/2018 23:00:22 door Thomas van den Heuvel
 
Henque Beaune

Henque Beaune

02/09/2018 23:14:45
Quote Anchor link
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
Gewijzigd op 02/09/2018 23:18:06 door Henque Beaune
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.