Database updaten / aanvullen aan de hand van een csv file
Code staat hieronder. Ik krijg geen foutmeldingen. Het script wordt blijkbaar uitgevoerd. Ik zie al de lijnen die in de csv zitten maar geen enkel wordt geupdated of bijgevoegd. Ziet er iemand waar ik in de fout ga? Alvast bedankt voor eventuele tips
Code (php)
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
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
<?php
// inladen instellingen
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
die("verbinding mislukt: ".$conn->connect_error);
}
if(isset($_POST['importSubmit'])){
// Toestane mime types
$csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
// Valideren als het een toegestane csv file is.
if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
// If the file is uploaded
if(is_uploaded_file($_FILES['file']['tmp_name'])){
// Open uploaded CSV file in read-only mode
$csvFile = fopen($_FILES['file']['tmp_name'], 'r');
// Skip the first line
fgetcsv($csvFile);
// Haal data uit CSV file lijn per lijn
while(($line = fgetcsv($csvFile)) !== FALSE){
// Get rij data
$naam = $line[0];
$voornaam = $line[1];
$gebdatum = $line[2];
$bestand = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$gebgem = "/";
$overldatum = "00-00-0000";
$overlgem = "/";
$site = "https://****.be/";
$map = "weterring/hk-wr-data/";
$verz = "hk-westerring";
$type = "RB";
// Uitlezen van de gegevens in de csv
echo $naam." ".$voornaam." ".$gebdatum." ".$bestand."<br>";
// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
$sqlprev = "SELECT IDR FROM rouwbrief WHERE Naam LIKE '$naam%' AND Voornaam LIKE '%$voornaam%' AND gebdatum LIKE '$gebdatum%'";
$result = $conn->query($sqlprev);
//$prevResult = $db->query($prevQuery);
if ($result->num_rows >= 0)
{
// Update member data in the database
$sqlupd = "UPDATE rouwbrief SET bestandsnaam = '".$bestand."' WHERE Naam LIKE '".$naam."' AND gebdatum LIKE '".$gebdatum."'";
}else{
/*Insert member data in the database
Teller start op 13018685 omdat IDR telkens 1 moet verhoogt worden per nieuw record. Kan niet met autincrement.
Omdat de eerste 2 cijfers van IDR ook een verwijzing zijn naar een verzameling.
*/
$mijnbestand = fopen("telleridr.txt", "w") or die("Kan bestand niet openen!");
$idr=fgets($mijnbestand);
echo $idr;
$sqlins = "INSERT INTO rouwbrief (IDR, Naam, Voornaam, gebdatum, GebGemeente, overldatum, OverlGemeente, site, map, bestandsnaam, verzameling, Type)
VALUES ('".$idr."',
'".$naam."',
'".$voornaam."',
'".$gebdatum."',
'".$gebgem."',
'".$overldatum."',
'".$overlgem."',
'".$site."',
'".$map."',
'".$bestand."',
'".$verz."',
'".$type."')";
$idr=$idr+1;
fwrite($mijnbestand, $idr);
fclose($mijnbestand);
}
}
// Close opened CSV file
fclose($csvFile);
$qstring = '?status=succ';
}else{
$qstring = '?status=err';
}
}else{
$qstring = '?status=invalid_file';
}
}
// Redirect to the listing page
// header("Location: csvupload.php".$qstring);[/code]
// inladen instellingen
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
die("verbinding mislukt: ".$conn->connect_error);
}
if(isset($_POST['importSubmit'])){
// Toestane mime types
$csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
// Valideren als het een toegestane csv file is.
if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
// If the file is uploaded
if(is_uploaded_file($_FILES['file']['tmp_name'])){
// Open uploaded CSV file in read-only mode
$csvFile = fopen($_FILES['file']['tmp_name'], 'r');
// Skip the first line
fgetcsv($csvFile);
// Haal data uit CSV file lijn per lijn
while(($line = fgetcsv($csvFile)) !== FALSE){
// Get rij data
$naam = $line[0];
$voornaam = $line[1];
$gebdatum = $line[2];
$bestand = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$gebgem = "/";
$overldatum = "00-00-0000";
$overlgem = "/";
$site = "https://****.be/";
$map = "weterring/hk-wr-data/";
$verz = "hk-westerring";
$type = "RB";
// Uitlezen van de gegevens in de csv
echo $naam." ".$voornaam." ".$gebdatum." ".$bestand."<br>";
// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
$sqlprev = "SELECT IDR FROM rouwbrief WHERE Naam LIKE '$naam%' AND Voornaam LIKE '%$voornaam%' AND gebdatum LIKE '$gebdatum%'";
$result = $conn->query($sqlprev);
//$prevResult = $db->query($prevQuery);
if ($result->num_rows >= 0)
{
// Update member data in the database
$sqlupd = "UPDATE rouwbrief SET bestandsnaam = '".$bestand."' WHERE Naam LIKE '".$naam."' AND gebdatum LIKE '".$gebdatum."'";
}else{
/*Insert member data in the database
Teller start op 13018685 omdat IDR telkens 1 moet verhoogt worden per nieuw record. Kan niet met autincrement.
Omdat de eerste 2 cijfers van IDR ook een verwijzing zijn naar een verzameling.
*/
$mijnbestand = fopen("telleridr.txt", "w") or die("Kan bestand niet openen!");
$idr=fgets($mijnbestand);
echo $idr;
$sqlins = "INSERT INTO rouwbrief (IDR, Naam, Voornaam, gebdatum, GebGemeente, overldatum, OverlGemeente, site, map, bestandsnaam, verzameling, Type)
VALUES ('".$idr."',
'".$naam."',
'".$voornaam."',
'".$gebdatum."',
'".$gebgem."',
'".$overldatum."',
'".$overlgem."',
'".$site."',
'".$map."',
'".$bestand."',
'".$verz."',
'".$type."')";
$idr=$idr+1;
fwrite($mijnbestand, $idr);
fclose($mijnbestand);
}
}
// Close opened CSV file
fclose($csvFile);
$qstring = '?status=succ';
}else{
$qstring = '?status=err';
}
}else{
$qstring = '?status=invalid_file';
}
}
// Redirect to the listing page
// header("Location: csvupload.php".$qstring);[/code]
Je moet de query uitvoeren! Dat gebeurt niet!
Hoe bedoel je. Gebeurt dat dan niet vanaf regel 47. Kijken of er records aanwezig zijn, zo ja updaten, zo nee aanvullen? Ik zie niet hoe ik het anders kan doen. Voorbeeldje indien mogelijk.
Gewijzigd op 06/08/2022 14:48:54 door - Ariën -
Dat kun je in je tabel namelijk aangeven.
Het opnieuw inserten van een record met dezelfde naam en geb.datum combinatie zal dan ook mislukken.
Je query wordt dan (in 1x)
Code (php)
1
2
3
4
2
3
4
INSERT INTO rouwbrief
(naam, geboortedatum, etc, bestandsnaam )
VALUES ('X', 'Y', 1, 'file.pdf')
ON DUPLICATE UPDATE bestandsnaam = 'file.pdf'
(naam, geboortedatum, etc, bestandsnaam )
VALUES ('X', 'Y', 1, 'file.pdf')
ON DUPLICATE UPDATE bestandsnaam = 'file.pdf'
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
Dat zal sneller zijn dan stuk voor stuk de records op te halen om te zien of ze al bestaan: dat kan de database zelf ook regelen.
Toevoeging op 06/08/2022 19:13:23:
en het is wel handigom er vanuit te gaan dat bijvoorbeeld de naam best eens een ' zou kunnen bevatten....
Error updating record: Incorrect integer value: '' for column `fv_vl_ardennen_berouwbrief`.`rouwbrief`.`IDR` at row 1Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf
IDR is in de database Autoincrement (integer van 8 posities). Dus het getal heb ik in een bestandje telleridr.txt gestoken.
De bedoeling is dat hij het getal leest, het gebruikt om het record in te vullen en dan dat het getal met 1 verhoogd wordt en dan terug wordt weggeschreven in mijn tellerbestand voor volgend gebruik. Daar moet ik nu een oplossing voor vinden.
@Ivo P. Ik wel wel uw oplossing proberen maar ik vind niet hoe in mijn PHP Admin hoe ik naam en geboortedatum uniek kan maken. Elk afzonderlijk wel maar de familienaam kan meerdere keren voorkomen en ook de geboortedatum. Hoe ik die combinatie moet doen snap ik niet.
Het wordt tenslotte al met 1 verhoogd.
Tenzij dat nummer ook elders wordt gebruikt als index, kan je het IDR op deze manier aanpassen.
Code (php)
1
2
3
2
3
SET @var_name = 13018685;
UPDATE rouwbrief SET IDR = (@var_name := @var_name +1);
ALTER TABLE rouwbrief AUTO_INCREMENT = 1;
UPDATE rouwbrief SET IDR = (@var_name := @var_name +1);
ALTER TABLE rouwbrief AUTO_INCREMENT = 1;
IDR verder niet gebruiken bij INSERT.
Dan:
Regel 51 is ALTIJD waar als een SELECT wordt gedaan.
Of er nu wel of geen record bestaat, >= 0 is altijd waar, waarna een UPDATE volgt op een mogelijk niet bestaand record.
En de IDR die je terugkrijgt, kun je gebruiken in de WHERE van de UPDATE. Wat natuurlijk niet lukt als het record niet bestaat.
En vergeet niet om de update en insert ook uit te voeren. Zie regel 48 waar je het wel doet.
Gewijzigd op 06/08/2022 20:36:35 door Adoptive Solution
Code (php)
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
133
134
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
133
134
<?php
// inladen instellingen
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
die("verbinding mislukt: ".$conn->connect_error);
}
if(isset($_POST['importSubmit'])){
// Toestane mime types
$csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
// Valideren als het een toegestane csv file is.
if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
// If the file is uploaded
if(is_uploaded_file($_FILES['file']['tmp_name'])){
// Open uploaded CSV file in read-only mode
$csvFile = fopen($_FILES['file']['tmp_name'], 'r');
// Skip the first line
fgetcsv($csvFile);
// Haal data uit CSV file lijn per lijn
while(($line = fgetcsv($csvFile)) !== FALSE){
// Get rij data
$naam = $line[0];
$voornaam = $line[1];
$gebdatum = $line[2];
$bestand = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$gebgem = "/";
$overldatum = "00-00-0000";
$overlgem = "/";
$site = "https://xxxxx.be/";
$map = "weterring/hk-wr-data/";
$verz = "hk-westerring";
$type = "RB";
// Uitlezen van de gegevens in de csv
echo $naam." ".$voornaam." ".$gebdatum." ".$bestand.": ";
// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
$sqlprev = "SELECT IDR FROM rouwbrief WHERE Naam LIKE '$naam%' AND Voornaam LIKE '%$voornaam%' AND gebdatum LIKE '$gebdatum%'";
$result = $conn->query($sqlprev);
//$prevResult = $db->query($prevQuery);
if ($result->num_rows > 0)
{
// Update member data in the database
$sqlupd = "UPDATE rouwbrief SET bestandsnaam = '".$bestand."' WHERE Naam LIKE '".$naam."' AND gebdatum LIKE '".$gebdatum."'";
if (mysqli_query($conn, $sqlupd)) {
echo "Record met succes geupdated: " . "<br>";
} else {
echo "Error updating record: " . mysqli_error($conn). "<br>";
}
}else{
/*Insert member data in the database
Teller start op 13018685 omdat IDR telkens 1 moet verhoogt worden per nieuw record. Kan niet met autoincrement.
Omdat de eerste 2 cijfers van IDR ook een verwijzing zijn naar een verzameling.
*/
$mijnbestand = fopen("telleridr.txt", "r") or die("Kan bestand niet openen!");
$idr = (int)fread($mijnbestand,30);
fclose($mijnbestand);
echo $idr;
$sqlins = "INSERT INTO rouwbrief (IDR, Naam, Voornaam, gebdatum, GebGemeente, overldatum, OverlGemeente, site, map, bestandsnaam, verzameling, Type)
VALUES ('".$idr."',
'".$naam."',
'".$voornaam."',
'".$gebdatum."',
'".$gebgem."',
'".$overldatum."',
'".$overlgem."',
'".$site."',
'".$map."',
'".$bestand."',
'".$verz."',
'".$type."')";
if (mysqli_query($conn, $sqlins)) {
echo "Record met succes bijgevoegd: " . "<br>";
} else {
echo "Error invoegen record: " . mysqli_error($conn). "<br>";
}
$idr=$idr+1;
$mijnbestand = fopen("telleridr.txt", "w") or die("Kan bestand niet openen!");
fwrite($mijnbestand, $idr);
fclose($mijnbestand);
}
}
// Close opened CSV file
fclose($csvFile);
$qstring = '?status=succ';
}else{
$qstring = '?status=err';
}
}else{
$qstring = '?status=invalid_file';
}
}
// Redirect to the listing page
// header("Location: csvupload.php".$qstring);
Maar ik krijg de volgende meldingen:
Abelleyt Lucia 27-02-1901 Abelleyt Lucia 1901-02-27.pdf: Record met succes geupdated:
Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf: 1Error invoegen record: Duplicate entry '1' for key 'PRIMARY'
Achtergael Alex 06-08-1928 Achtergael Alex 1928-08-06.pdf: 2Error invoegen record: Duplicate entry '2' for key 'PRIMARY'
Achtergaele Bertrand 05-02-1930 Achtergaele Bertrand 1930-02-05.pdf: 3Error invoegen record: Duplicate entry '3' for key 'PRIMARY'
Ackerman Godelieve 15-03-1930 Ackerman Godelieve 1930-03-15.pdf: 4Error invoegen record: Duplicate entry '4' for key 'PRIMARY'
Adam Achiel 16-09-1909 Adam Achiel 1909-09-16.pdf: Record met succes geupdated:
Adam Anna Maria 27-07-1914 Adam Anna Maria 1914-07-27.pdf: 5Error invoegen record: Duplicate entry '5' for key 'PRIMARY'
Adam Clementine 10-01-1876 Adam Clementine 1876-01-10.pdf: Record met succes geupdated:
Adam Denise 12-07-1925 Adam Denise 1925-07-12.pdf: Record met succes geupdated:
Adam Imma 01-08-1914 Adam Imma 1914-08-01.pdf: Record met succes geupdated:
Adam Irena 13-10-1911 Adam Irena 1911-10-13.pdf: 6Error invoegen record: Duplicate entry '6' for key 'PRIMARY'
Adam Jozef 15-09-1941 Adam Jozef 1941-09-15.pdf: Record met succes geupdated:
Adam Jules 05-12-1918 Adam Jules 1918-12-05.pdf: Record met succes geupdated:
Adam Margareta 12-05-1914 Adam Margareta 1914-05-12.pdf: Record met succes geupdated:
Adam Remi 05-05-1883 Adam Remi 1883-05-05.pdf: Record met succes geupdated:
Adam Virginie Gabrielle 09-03-1907 Adam Virginie Gabrielle 1907-03-09.pdf: 7Record met succes bijgevoegd:
Adams Armand Jerome Michel 27-09-1925 Adams Armand Jerome Michel 1925-09-27.pdf: Record met succes geupdated:
Adriaens Elsa 10-02-1913 Adriaens Elsa 1913-02-10.pdf: Record met succes geupdated:
Adriaens Gabrielle Maria 20-05-1886 Adriaens Gabrielle Maria 1886-05-20.pdf: 8Error invoegen record: Duplicate entry '8' for key 'PRIMARY'
De teller wordt blijkbaar niet gelezen. Dus ga ik de gesuggereerde oplossing eens uitproberen.
Maar het zal voor morgen zijn.
// inladen instellingen
include '../instellingen.php';
$conn = new mysqli($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam);
//connectie testen
if ($conn->connect_error)
{
die("verbinding mislukt: ".$conn->connect_error);
}
if(isset($_POST['importSubmit'])){
// Toestane mime types
$csvMimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain');
// Valideren als het een toegestane csv file is.
if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'], $csvMimes)){
// If the file is uploaded
if(is_uploaded_file($_FILES['file']['tmp_name'])){
// Open uploaded CSV file in read-only mode
$csvFile = fopen($_FILES['file']['tmp_name'], 'r');
// Skip the first line
fgetcsv($csvFile);
// Haal data uit CSV file lijn per lijn
while(($line = fgetcsv($csvFile)) !== FALSE){
// Get rij data
$naam = $line[0];
$voornaam = $line[1];
$gebdatum = $line[2];
$bestand = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$gebgem = "/";
$overldatum = "00-00-0000";
$overlgem = "/";
$site = "https://xxxxx.be/";
$map = "weterring/hk-wr-data/";
$verz = "hk-westerring";
$type = "RB";
// Uitlezen van de gegevens in de csv
echo $naam." ".$voornaam." ".$gebdatum." ".$bestand.": ";
// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
$sqlprev = "SELECT IDR FROM rouwbrief WHERE Naam LIKE '$naam%' AND Voornaam LIKE '%$voornaam%' AND gebdatum LIKE '$gebdatum%'";
$result = $conn->query($sqlprev);
//$prevResult = $db->query($prevQuery);
if ($result->num_rows > 0)
{
// Update member data in the database
$sqlupd = "UPDATE rouwbrief SET bestandsnaam = '".$bestand."' WHERE Naam LIKE '".$naam."' AND gebdatum LIKE '".$gebdatum."'";
if (mysqli_query($conn, $sqlupd)) {
echo "Record met succes geupdated: " . "<br>";
} else {
echo "Error updating record: " . mysqli_error($conn). "<br>";
}
}else{
/*Insert member data in the database
Teller start op 13018685 omdat IDR telkens 1 moet verhoogt worden per nieuw record. Kan niet met autoincrement.
Omdat de eerste 2 cijfers van IDR ook een verwijzing zijn naar een verzameling.
*/
$mijnbestand = fopen("telleridr.txt", "r") or die("Kan bestand niet openen!");
$idr = (int)fread($mijnbestand,30);
fclose($mijnbestand);
echo $idr;
$sqlins = "INSERT INTO rouwbrief (IDR, Naam, Voornaam, gebdatum, GebGemeente, overldatum, OverlGemeente, site, map, bestandsnaam, verzameling, Type)
VALUES ('".$idr."',
'".$naam."',
'".$voornaam."',
'".$gebdatum."',
'".$gebgem."',
'".$overldatum."',
'".$overlgem."',
'".$site."',
'".$map."',
'".$bestand."',
'".$verz."',
'".$type."')";
if (mysqli_query($conn, $sqlins)) {
echo "Record met succes bijgevoegd: " . "<br>";
} else {
echo "Error invoegen record: " . mysqli_error($conn). "<br>";
}
$idr=$idr+1;
$mijnbestand = fopen("telleridr.txt", "w") or die("Kan bestand niet openen!");
fwrite($mijnbestand, $idr);
fclose($mijnbestand);
}
}
// Close opened CSV file
fclose($csvFile);
$qstring = '?status=succ';
}else{
$qstring = '?status=err';
}
}else{
$qstring = '?status=invalid_file';
}
}
// Redirect to the listing page
// header("Location: csvupload.php".$qstring);
Maar ik krijg de volgende meldingen:
Abelleyt Lucia 27-02-1901 Abelleyt Lucia 1901-02-27.pdf: Record met succes geupdated:
Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf: 1Error invoegen record: Duplicate entry '1' for key 'PRIMARY'
Achtergael Alex 06-08-1928 Achtergael Alex 1928-08-06.pdf: 2Error invoegen record: Duplicate entry '2' for key 'PRIMARY'
Achtergaele Bertrand 05-02-1930 Achtergaele Bertrand 1930-02-05.pdf: 3Error invoegen record: Duplicate entry '3' for key 'PRIMARY'
Ackerman Godelieve 15-03-1930 Ackerman Godelieve 1930-03-15.pdf: 4Error invoegen record: Duplicate entry '4' for key 'PRIMARY'
Adam Achiel 16-09-1909 Adam Achiel 1909-09-16.pdf: Record met succes geupdated:
Adam Anna Maria 27-07-1914 Adam Anna Maria 1914-07-27.pdf: 5Error invoegen record: Duplicate entry '5' for key 'PRIMARY'
Adam Clementine 10-01-1876 Adam Clementine 1876-01-10.pdf: Record met succes geupdated:
Adam Denise 12-07-1925 Adam Denise 1925-07-12.pdf: Record met succes geupdated:
Adam Imma 01-08-1914 Adam Imma 1914-08-01.pdf: Record met succes geupdated:
Adam Irena 13-10-1911 Adam Irena 1911-10-13.pdf: 6Error invoegen record: Duplicate entry '6' for key 'PRIMARY'
Adam Jozef 15-09-1941 Adam Jozef 1941-09-15.pdf: Record met succes geupdated:
Adam Jules 05-12-1918 Adam Jules 1918-12-05.pdf: Record met succes geupdated:
Adam Margareta 12-05-1914 Adam Margareta 1914-05-12.pdf: Record met succes geupdated:
Adam Remi 05-05-1883 Adam Remi 1883-05-05.pdf: Record met succes geupdated:
Adam Virginie Gabrielle 09-03-1907 Adam Virginie Gabrielle 1907-03-09.pdf: 7Record met succes bijgevoegd:
Adams Armand Jerome Michel 27-09-1925 Adams Armand Jerome Michel 1925-09-27.pdf: Record met succes geupdated:
Adriaens Elsa 10-02-1913 Adriaens Elsa 1913-02-10.pdf: Record met succes geupdated:
Adriaens Gabrielle Maria 20-05-1886 Adriaens Gabrielle Maria 1886-05-20.pdf: 8Error invoegen record: Duplicate entry '8' for key 'PRIMARY'
De teller wordt blijkbaar niet gelezen. Dus ga ik de gesuggereerde oplossing eens uitproberen.
Maar het zal voor morgen zijn.
Gewijzigd op 07/08/2022 09:41:46 door Ignace Verschaeve
Sluit je PHP-code ;-)
// Redirect to the listing page
// header("Location: csvupload.php".$qstring);
Maar ik krijg de volgende meldingen:
Abelleyt Lucia 27-02-1901 Abelleyt Lucia 1901-02-27.pdf: Record met succes geupdated:
Absolon Albert 30-06-1905 Absolon Albert 1905-06-30.pdf: 1Error invoegen record: Duplicate entry '1' for key 'PRIMARY'
Achtergael Alex 06-08-1928 Achtergael Alex 1928-08-06.pdf: 2Error invoegen record: Duplicate entry '2' for key 'PRIMARY'
Toevoeging op 07/08/2022 09:40:37:
@Adoptive Solution
Ik zet dus deze code:
Code (php)
1
2
3
2
3
SET @var_name = 13018685;
UPDATE rouwbrief SET IDR = (@var_name := @var_name +1);
ALTER TABLE rouwbrief AUTO_INCREMENT = 1;
UPDATE rouwbrief SET IDR = (@var_name := @var_name +1);
ALTER TABLE rouwbrief AUTO_INCREMENT = 1;
net na lijn 61.
Ik probeer het uit.
Let op : de kolomnamen zijn aangepast t.o.v. de originele code
De table code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DROP TABLE IF EXISTS `rouwbrief`;
CREATE TABLE `rouwbrief` (
`IDR` bigint(20) NOT NULL AUTO_INCREMENT,
`Naam` varchar(255) NOT NULL,
`Voornaam` varchar(255) NOT NULL,
`Geboortedatum` date NOT NULL,
`GeboorteGemeente` varchar(255) NOT NULL,
`Overledendatum` date NOT NULL,
`OverledenGemeente` varchar(255) NOT NULL,
`Site` varchar(255) NOT NULL,
`Map` varchar(255) NOT NULL,
`Bestandsnaam` varchar(255) NOT NULL,
`Verzameling` varchar(255) NOT NULL,
`Type` varchar(255) NOT NULL,
PRIMARY KEY (`IDR`)
) ENGINE=InnoDB AUTO_INCREMENT=13018685 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `rouwbrief` (
`IDR` bigint(20) NOT NULL AUTO_INCREMENT,
`Naam` varchar(255) NOT NULL,
`Voornaam` varchar(255) NOT NULL,
`Geboortedatum` date NOT NULL,
`GeboorteGemeente` varchar(255) NOT NULL,
`Overledendatum` date NOT NULL,
`OverledenGemeente` varchar(255) NOT NULL,
`Site` varchar(255) NOT NULL,
`Map` varchar(255) NOT NULL,
`Bestandsnaam` varchar(255) NOT NULL,
`Verzameling` varchar(255) NOT NULL,
`Type` varchar(255) NOT NULL,
PRIMARY KEY (`IDR`)
) ENGINE=InnoDB AUTO_INCREMENT=13018685 DEFAULT CHARSET=utf8mb4;
Het csv tekstbestand :
Let op de datum velden.
Die zijn yyyy-mm-dd
Waren eerst dd-mm-yyyy
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
naam,voornaam,gebdatum,bestand
Abelleyt,Lucia,1901-02-27,Abelleyt Lucia 1901-02-27.pdf
Absolon,Albert,1905-06-30,Absolon Albert 1905-06-30.pdf
Achtergael,Alex,1928-08-06,Achtergael Alex 1928-08-06.pdf
Achtergaele,Bertrand,1930-02-05,Achtergaele Bertrand 1930-02-05.pdf
Ackerman,Godelieve,1930-03-16,Ackerman Godelieve 1930-03-15.pdf
Adam,Achiel,1909-09-16,Adam Achiel 1909-09-16.pdf
Adam,Anna Maria,1914-07-27,Adam Anna Maria 1914-07-27.pdf
Adam,Clementine 1876-01-10,Adam Clementine 1876-01-10.pdf
Adam,Denise,1925-07-12,Adam Denise 1925-07-12.pdf
Adam,Imma,1914-08-01,Adam Imma 1914-08-01.pdf
Adam,Irena,1911-10-13,Adam Irena 1911-10-13.pdf
Adam,Jozef,1941-09-15,Adam Jozef 1941-09-15.pdf
Adam,Jules,1918-12-05,Adam Jules 1918-12-05.pdf
Adam,Margareta,1914-12-05,Adam Margareta 1914-05-12.pdf
Adam,Remi,1883-05-05,Adam Remi 1883-05-05.pdf
Adam,Virginie Gabrielle,1907-03-09,Adam Virginie Gabrielle 1907-03-09.pdf
Adams,Armand Jerome Michel,1925-09-27,Adams Armand Jerome Michel 1925-09-27.pdf
Adriaens,Elsa,1913-02-10,Adriaens Elsa 1913-02-10.pdf
Adriaens,Gabrielle Maria,1886-05-20,Adriaens Gabrielle Maria 1886-05-20.pdf
Abelleyt,Lucia,1901-02-27,Abelleyt Lucia 1901-02-27.pdf
Absolon,Albert,1905-06-30,Absolon Albert 1905-06-30.pdf
Achtergael,Alex,1928-08-06,Achtergael Alex 1928-08-06.pdf
Achtergaele,Bertrand,1930-02-05,Achtergaele Bertrand 1930-02-05.pdf
Ackerman,Godelieve,1930-03-16,Ackerman Godelieve 1930-03-15.pdf
Adam,Achiel,1909-09-16,Adam Achiel 1909-09-16.pdf
Adam,Anna Maria,1914-07-27,Adam Anna Maria 1914-07-27.pdf
Adam,Clementine 1876-01-10,Adam Clementine 1876-01-10.pdf
Adam,Denise,1925-07-12,Adam Denise 1925-07-12.pdf
Adam,Imma,1914-08-01,Adam Imma 1914-08-01.pdf
Adam,Irena,1911-10-13,Adam Irena 1911-10-13.pdf
Adam,Jozef,1941-09-15,Adam Jozef 1941-09-15.pdf
Adam,Jules,1918-12-05,Adam Jules 1918-12-05.pdf
Adam,Margareta,1914-12-05,Adam Margareta 1914-05-12.pdf
Adam,Remi,1883-05-05,Adam Remi 1883-05-05.pdf
Adam,Virginie Gabrielle,1907-03-09,Adam Virginie Gabrielle 1907-03-09.pdf
Adams,Armand Jerome Michel,1925-09-27,Adams Armand Jerome Michel 1925-09-27.pdf
Adriaens,Elsa,1913-02-10,Adriaens Elsa 1913-02-10.pdf
Adriaens,Gabrielle Maria,1886-05-20,Adriaens Gabrielle Maria 1886-05-20.pdf
Het PHP bestand :
Code (php)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
if( isset( $_POST['importSubmit'] ) )
{
echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
echo '<pre>' . print_r( $_FILES, TRUE ) . '</pre>';
include('connect.php');
// Toestane mime types
$csvMimes = [
'text/x-comma-separated-values',
'text/comma-separated-values',
'application/octet-stream',
'application/vnd.ms-excel',
'application/x-csv',
'text/x-csv',
'text/csv',
'application/csv',
'application/excel',
'application/vnd.msexcel',
'text/plain'
];
echo '<pre>' . print_r( $csvMimes, TRUE ) . '</pre>';
// If the file is uploaded && Valideren als het een toegestane csv file is.
if( is_uploaded_file( $_FILES['userfile']['tmp_name'] ) && in_array($_FILES['userfile']['type'], $csvMimes) )
{
echo "<p>File ". $_FILES['userfile']['name'] ." uploaded successfully.</p>\n";
echo "<p>Displaying contents</p>\n";
readfile($_FILES['userfile']['tmp_name']);
// Open uploaded CSV file in read-only mode
$csvFile = fopen( $_FILES['userfile']['tmp_name'], 'r');
// Skip the first line
fgetcsv($csvFile);
// Haal data uit CSV file lijn per lijn
while( ( $line = fgetcsv($csvFile ) ) !== FALSE )
{
echo '<pre>' . print_r( $line, TRUE ) . '</pre>';
// Get rij data
$Naam = $line[0];
$Voornaam = $line[1];
$Geboortedatum = $line[2];
$Bestandsnaam = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$GeboorteGemeente = "/";
$OverledenDatum = "0000-00-00";
$OverledenGemeente = "/";
$Site = "https://****.be/";
$Map = "weterring/hk-wr-data/";
$Verzameling = "hk-westerring";
$Type = "RB";
// Uitlezen van de gegevens in de csv
echo '<p>' . $Naam." ".$Voornaam." ".$Geboortedatum." ".$Bestandsnaam."</p>";
// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
$sqlselect = "SELECT IDR FROM rouwbrief WHERE Naam = '$Naam' AND Voornaam = '$Voornaam' AND Geboortedatum = '$Geboortedatum';";
echo '<p>' . $sqlselect . '</p>';
$result = $db->query( $sqlselect );
if ( $result->num_rows > 0 )
{
$row = $result->fetch_object();
// Update member data in the database
$sqlupdate = "UPDATE rouwbrief SET Bestandsnaam = '" . $Bestandsnaam . "' WHERE IDR = " . $row->IDR;
echo '<p>' . $sqlupdate . '</p>';
$result = $db->query( $sqlupdate );
} else {
$sqlinsert = "INSERT INTO rouwbrief SET
Naam = '$Naam',
Voornaam = '$Voornaam',
Geboortedatum = '$Geboortedatum',
GeboorteGemeente = '$GeboorteGemeente',
OverledenDatum = '$OverledenDatum',
OverledenGemeente = '$OverledenGemeente',
Site = '$Site',
Map = '$Map',
Bestandsnaam = '$Bestandsnaam',
Verzameling = '$Verzameling',
Type = '$Type';";
echo '<p>' . $sqlinsert . '</p>';
$result = $db->query( $sqlinsert );
} // end if else
} // end while
// Close opened CSV file
fclose( $csvFile );
$qstring = '?status=succ';
} else {
$qstring = '?status=err';
}
?>
<style>
table {
border-collapse: collapse;
border: 1px solid #999;
}
th,td {
border: 1px solid #999;
padding: 0.500em;
}
</style>
<table>
<thead>
<tr>
<th>IDR</th>
<th>Naam</th>
<th>Voornaam</th>
<th>Geboortedatum</th>
<th>Bestandsnaam</th>
</tr>
</thead>
<tbody>
<?php
$sqlSelect = 'SELECT IDR, Naam, Voornaam, Geboortedatum, Bestandsnaam FROM rouwbrief;';
$result = $db->query( $sqlSelect );
if ( $result->num_rows > 0 )
{
while ( $row = $result->fetch_object() )
{
?>
<tr>
<td><?php echo $row->IDR; ?></td>
<td><?php echo $row->Naam; ?></td>
<td><?php echo $row->Voornaam; ?></td>
<td><?php echo $row->Geboortedatum; ?></td>
<td><?php echo $row->Bestandsnaam; ?></td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="5">Geen data</td>
</tr>
<?php
}
?>
</body>
<tfoot></tfoot>
</table>
<hr />
<?php
}
?>
<form method="post" enctype="multipart/form-data">
bestand <input type="file" name="userfile" /><br /><br />
<input type="submit" name="importSubmit" value="submit" />
</form>
if( isset( $_POST['importSubmit'] ) )
{
echo '<pre>' . print_r( $_POST, TRUE ) . '</pre>';
echo '<pre>' . print_r( $_FILES, TRUE ) . '</pre>';
include('connect.php');
// Toestane mime types
$csvMimes = [
'text/x-comma-separated-values',
'text/comma-separated-values',
'application/octet-stream',
'application/vnd.ms-excel',
'application/x-csv',
'text/x-csv',
'text/csv',
'application/csv',
'application/excel',
'application/vnd.msexcel',
'text/plain'
];
echo '<pre>' . print_r( $csvMimes, TRUE ) . '</pre>';
// If the file is uploaded && Valideren als het een toegestane csv file is.
if( is_uploaded_file( $_FILES['userfile']['tmp_name'] ) && in_array($_FILES['userfile']['type'], $csvMimes) )
{
echo "<p>File ". $_FILES['userfile']['name'] ." uploaded successfully.</p>\n";
echo "<p>Displaying contents</p>\n";
readfile($_FILES['userfile']['tmp_name']);
// Open uploaded CSV file in read-only mode
$csvFile = fopen( $_FILES['userfile']['tmp_name'], 'r');
// Skip the first line
fgetcsv($csvFile);
// Haal data uit CSV file lijn per lijn
while( ( $line = fgetcsv($csvFile ) ) !== FALSE )
{
echo '<pre>' . print_r( $line, TRUE ) . '</pre>';
// Get rij data
$Naam = $line[0];
$Voornaam = $line[1];
$Geboortedatum = $line[2];
$Bestandsnaam = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$GeboorteGemeente = "/";
$OverledenDatum = "0000-00-00";
$OverledenGemeente = "/";
$Site = "https://****.be/";
$Map = "weterring/hk-wr-data/";
$Verzameling = "hk-westerring";
$Type = "RB";
// Uitlezen van de gegevens in de csv
echo '<p>' . $Naam." ".$Voornaam." ".$Geboortedatum." ".$Bestandsnaam."</p>";
// Check of er reeds records zijn met dezelfde Naam, Voornaam, gebdatum
$sqlselect = "SELECT IDR FROM rouwbrief WHERE Naam = '$Naam' AND Voornaam = '$Voornaam' AND Geboortedatum = '$Geboortedatum';";
echo '<p>' . $sqlselect . '</p>';
$result = $db->query( $sqlselect );
if ( $result->num_rows > 0 )
{
$row = $result->fetch_object();
// Update member data in the database
$sqlupdate = "UPDATE rouwbrief SET Bestandsnaam = '" . $Bestandsnaam . "' WHERE IDR = " . $row->IDR;
echo '<p>' . $sqlupdate . '</p>';
$result = $db->query( $sqlupdate );
} else {
$sqlinsert = "INSERT INTO rouwbrief SET
Naam = '$Naam',
Voornaam = '$Voornaam',
Geboortedatum = '$Geboortedatum',
GeboorteGemeente = '$GeboorteGemeente',
OverledenDatum = '$OverledenDatum',
OverledenGemeente = '$OverledenGemeente',
Site = '$Site',
Map = '$Map',
Bestandsnaam = '$Bestandsnaam',
Verzameling = '$Verzameling',
Type = '$Type';";
echo '<p>' . $sqlinsert . '</p>';
$result = $db->query( $sqlinsert );
} // end if else
} // end while
// Close opened CSV file
fclose( $csvFile );
$qstring = '?status=succ';
} else {
$qstring = '?status=err';
}
?>
<style>
table {
border-collapse: collapse;
border: 1px solid #999;
}
th,td {
border: 1px solid #999;
padding: 0.500em;
}
</style>
<table>
<thead>
<tr>
<th>IDR</th>
<th>Naam</th>
<th>Voornaam</th>
<th>Geboortedatum</th>
<th>Bestandsnaam</th>
</tr>
</thead>
<tbody>
<?php
$sqlSelect = 'SELECT IDR, Naam, Voornaam, Geboortedatum, Bestandsnaam FROM rouwbrief;';
$result = $db->query( $sqlSelect );
if ( $result->num_rows > 0 )
{
while ( $row = $result->fetch_object() )
{
?>
<tr>
<td><?php echo $row->IDR; ?></td>
<td><?php echo $row->Naam; ?></td>
<td><?php echo $row->Voornaam; ?></td>
<td><?php echo $row->Geboortedatum; ?></td>
<td><?php echo $row->Bestandsnaam; ?></td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="5">Geen data</td>
</tr>
<?php
}
?>
</body>
<tfoot></tfoot>
</table>
<hr />
<?php
}
?>
<form method="post" enctype="multipart/form-data">
bestand <input type="file" name="userfile" /><br /><br />
<input type="submit" name="importSubmit" value="submit" />
</form>
Toevoeging op 07/08/2022 13:57:40:
Erratum
Op regel 9 van het tekstbestand ontbrak achter Clementine een komma.
Gewijzigd op 07/08/2022 16:04:18 door Adoptive Solution
Code (php)
1
2
3
2
3
ALTER TABLE `rouwbrief`
CHANGE COLUMN `Naam` `Naam` VARCHAR(100) NOT NULL COLLATE 'utf8mb4_general_ci' AFTER `IDR`,
ADD UNIQUE INDEX `Index 2` (`Naam`, `Geboortedatum`);
CHANGE COLUMN `Naam` `Naam` VARCHAR(100) NOT NULL COLLATE 'utf8mb4_general_ci' AFTER `IDR`,
ADD UNIQUE INDEX `Index 2` (`Naam`, `Geboortedatum`);
Ik hb de lengte van de kolom Naam ingekort tot 100 letters (leek me genoeg en 255 gaf problemen met het maken van een unique-index.
NB: ik ben zelf voorstander van de INSERT INTO tabel (kolommen) VALUES (waarden) syntax. Die werkt in meer databases dan alleen mysql. Maar vereist wel meer tellen van de kolommen en opletten met de volgorde.
Daarna wordt het PHP script vanaf de while regel:
Code (php)
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
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
<?php
while( ( $line = fgetcsv($csvFile ) ) !== FALSE )
{
echo '<pre>' . print_r( $line, TRUE ) . '</pre>';
// Get rij data
$Naam = $line[0];
$Voornaam = $line[1];
$Geboortedatum = $line[2];
$Bestandsnaam = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$GeboorteGemeente = "/";
$OverledenDatum = "0000-00-00";
$OverledenGemeente = "/";
$Site = "https://****.be/";
$Map = "weterring/hk-wr-data/";
$Verzameling = "hk-westerring";
$Type = "RB";
$sqlinsert = "INSERT INTO rouwbrief SET
Naam = '$Naam',
Voornaam = '$Voornaam',
Geboortedatum = '$Geboortedatum',
GeboorteGemeente = '$GeboorteGemeente',
OverledenDatum = '$OverledenDatum',
OverledenGemeente = '$OverledenGemeente',
Site = '$Site',
Map = '$Map',
Bestandsnaam = '$Bestandsnaam',
Verzameling = '$Verzameling',
Type = '$Type'
ON DUPLICATE UPDATE Bestandsnaam = '$Bestandsnaam';";
echo '<p>' . $sqlinsert . '</p>';
$result = $db->query( $sqlinsert );
} // end while
?>
while( ( $line = fgetcsv($csvFile ) ) !== FALSE )
{
echo '<pre>' . print_r( $line, TRUE ) . '</pre>';
// Get rij data
$Naam = $line[0];
$Voornaam = $line[1];
$Geboortedatum = $line[2];
$Bestandsnaam = $line[3];
// Hier worden nog enkele vaste variabelen gemaakt.
$GeboorteGemeente = "/";
$OverledenDatum = "0000-00-00";
$OverledenGemeente = "/";
$Site = "https://****.be/";
$Map = "weterring/hk-wr-data/";
$Verzameling = "hk-westerring";
$Type = "RB";
$sqlinsert = "INSERT INTO rouwbrief SET
Naam = '$Naam',
Voornaam = '$Voornaam',
Geboortedatum = '$Geboortedatum',
GeboorteGemeente = '$GeboorteGemeente',
OverledenDatum = '$OverledenDatum',
OverledenGemeente = '$OverledenGemeente',
Site = '$Site',
Map = '$Map',
Bestandsnaam = '$Bestandsnaam',
Verzameling = '$Verzameling',
Type = '$Type'
ON DUPLICATE UPDATE Bestandsnaam = '$Bestandsnaam';";
echo '<p>' . $sqlinsert . '</p>';
$result = $db->query( $sqlinsert );
} // end while
?>
Enne:
Dit blijft misgaan als er in je invoer ergens een ' staat.
In elk geval aan iedereen bedankt voor de voorbeelden. Ik neem in ieder geval die ON DUPLICATE UPDATE mee naar de toekomst.
Ik heb in elk geval nu een oplossing om een index van ruim 20000 records te updaten met de bestandsnaam. Het spaart enorm vel werk ten opzichte van het manueel aanpassen en toevoegen.
Ikzelf gebruik utf8mb4, die ook ondersteuning voor emoji's heeft. Als je die gebruikt moet je afhankelijk van je serversetting deze collation ook gebruiken in de charset functie van MySQLi. En uiteraard moet het hele script ook UTF-8 headers hebben.
KEY ontbreekt in ON DUPLICATE KEY UPDATE
Maar als je dat hebt: zorg dat je html in elkgeval een link tussen "" heeft staan.
Dus niet <a href=bestand.pdf> maar <a href="bestand.php"> want anders snapt je browser niet waar je linkje eindigt.
<a href=bestand met spaties.pdf> zal zoeken naar een bestand genaamd "bestand" en "met" is kennelijk een property die de browser niet kent en dus negeert.
Maar met een _ is een stabielere oplossing.
daarbij is het ook zo, dat het liefst jouw script en niet de uploader kiest voor de bestandsnaam.
Een é in een bestandsnaam gaat ook niet per se goed :-).
Converteren naar een "e" is een goede oplossing, maar met rawurlencode() zou ook kunnen. Dan wordt een spatie %20 en op vergelijkbare manier wordt een é omgevormd. (zoek ik even niet op). De browser weet dat vervolgens weer terug te zetten naar een spatie of een é. MAar het leest voor de mens moeizaam.
Sowieso is dat wel een goed idee op naast jouw conversie naar "e" die rawurlencode() in te zetten, voor het geval jouw lijstje omzettingen niet uitputtend is.
@Ivo P. Ondertussen hebben we geleerd om de indexen die we maken zo simpel mogelijk te houden. Een naam aan Bourdheau'dhui of D'Huyvetter kan met of zonder afkappingsteken zijn. Dus laten we deze er allemaal uit. Ook spaties. Namen zoals Van den Bossche, vanden Bossche, Vandenbossche schrijven we op eenzelfde manier. Voor degene die opzoekt is de regel dan duidelijk zoek met de naam zonder spaties of speciale tekens. De juiste schrijfwijze kan hij dan terug vinden in de scan van het document. Maar wat is juist? Iedereen die zich met familiekunde bezig houdt weet dat familienamen door de eeuwen heen soms veranderen. Ondertussen ben ik anderhalf jaar bezig met onze site. Ik heb al veel geleerd. Leer nog elke dag bij om een index van ondertussen 100 000 namen bij te houden waar ruim 60 000 reeds voorzien zijn van een scan. Dat komt uit 7 verschillende verzamelingen van kringen of particulieren, alleen al het combineren vraagt veel werk. Van het scannen nog niet gesproken.