speciale karakters zoals é in regular expressions
Ik probeer een regular expressions te vinden die volgende strings matched:
Amé rosé
Grünwalder
Wakamé
Dit is wat ik heb tot hiertoe:
^[a-zA-Z0-9.,()\/\-*+ ]{0,50}$
De string moet bestaan uit 0-50 tekens (letters en of cijfers, .,()/-*+ en spatie). Werkt perfect tot er dus sprake is van een é, è, ê, ü, enz. Na wat opzoekingen vond ik een mogelijke oplossing: [[=e=]], maar om één of andere reden wil het niet, ik denk dat ik het verkeerd gebruik, maar hoe moet het dan wel? ik geraak er niet uit.
Dit heb ik geprbeerd voor é, è en ê:
^[a-zA-Z0-9.,()\/\-*+[=e=] ]{0,50}$
^[a-zA-Z0-9.,()\/\-*+[[=e=]] ]{0,50}$
^[a-zA-Z0-9.,()\/\-*+([=e=]) ]{0,50}$
Geen werkte.
Als ik dan enkel
[[=e=]] doe en probeer het te matchen met string 'é', werkt het ook niet... wat doe ik verkeerd?
alvast bedankt
Gewijzigd op 05/06/2010 16:49:30 door Hans Vereyken
eerst gebruiken en daarna je controle uitvoeren?
Gewijzigd op 05/06/2010 17:11:35 door jo colling
maar het resultaat is wel dat verschillende tekens die niet toegestaan zijn plotseling mee door de contole komen (<>[]ea)
is er geen manier om het te integreren in de regex?
ik kan natuurlijk ook zelf een functie schrijven om de betreffende tekens (éèëêü enz) zelf te vervangen, maar ik heb zo het gevoel dat het efficiënter kan, en dat ik iets kan leren
Het werkt wel, maar ik vraag me af of het niet beter kan.
Dit werkt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$search = array ("ê", "ë", "é", "è");
$replace = "e";
$subject = "dit is één test met ä en ê en á";
$subject = str_replace ($search, $replace, $subject);
$search = array ("â", "ä", "á", "à");
$replace = "a";
$result = str_replace ($search, $replace, $subject);
echo $subject;
echo "<br>";
echo $result;
?>
$search = array ("ê", "ë", "é", "è");
$replace = "e";
$subject = "dit is één test met ä en ê en á";
$subject = str_replace ($search, $replace, $subject);
$search = array ("â", "ä", "á", "à");
$replace = "a";
$result = str_replace ($search, $replace, $subject);
echo $subject;
echo "<br>";
echo $result;
?>
Dit werkt niet, maar zou wel mooier zijn moest het zo kunnen:
Code (php)
Doe ik iets verkeerd of probeer ik iets dat niet kan?
alvast bedankt
Gewijzigd op 08/06/2010 17:49:57 door Hans Vereyken
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php (onderste). Dus:
Ook (,),* en + moet je escapen.
Als _ ook mag matchen, dan zou je \w kunnen gebruiken. Dat gelijk aan: A-Za-z0-9_
Zou het kunnen dat de string UTF8 is? Zo ja, probeer eens met de u modifier: Ook (,),* en + moet je escapen.
Als _ ook mag matchen, dan zou je \w kunnen gebruiken. Dat gelijk aan: A-Za-z0-9_
Gewijzigd op 08/06/2010 18:43:02 door Piet Verhagen
Dit is wat ik zocht, ik heb echter een probleem bij het implementeren in het script.
Dit werkt:
Code (php)
Resultaat:
Code (php)
1
2
3
4
2
3
4
dit is n test met en en
dit is een test met a en e en a aaaaeee e i i iio o oo uu uu
aaaaeeeeiiiioooouuuu
dit is een test met a en e en a aaaaeee e i i iio o oo uu uu
aaaaeeeeiiiioooouuuu
Maar als ik die code in mijn script zet, zonder er iets aan te wijzigen dan is het resultaat:
Code (php)
1
2
3
4
2
3
4
dit is ??n test met ? en ? en ? ??????? ? ? ? ??? ? ?? ?? ??
dit is een test met a en e en a aaaaeee e i i iio o oo uu uu
????????????????????
aaaaeeeeiiiioooouuuu
dit is een test met a en e en a aaaaeee e i i iio o oo uu uu
????????????????????
aaaaeeeeiiiioooouuuu
Ik weet dat het iets met karaktersets te maken heeft, maar ik geraak er niet uit, ik gebruik UTF-8..., dit zijn de headers die in de html staan:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
...
</head>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
...
</head>
Waar gaat dit fout?
@Piet Verhagen
Ik had niet gezien dat er ondertussen twee reacties waren, antwoord op het tweede:
Ik gebruik nu deze regex:
en dat werkt, zonder problemen, dank!
Gewijzigd op 08/06/2010 19:24:59 door Hans Vereyken
Toch nog een probleem met de regular expression: '°' moet er ook door komen...
Edit:
Gevonden op deze site: http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_symbol_characters_web_page
Nu ziet de regex er zo uit:
Nu ziet de regex er zo uit:
Gewijzigd op 08/06/2010 19:42:00 door Hans Vereyken
De komma hoef je overigens weer niet te escapen, die punt juist wel. Anders komt alles er door.
Wat betreft UTF8: uit ervaring weet ik dat je nog een hele lange weg te gaan hebt. Ik heb het geneuzel met UTF8 nu gelukkig behoorlijk onder de knie, zowel in PHP als in Perl, maar als je net komt kijken en je wil leuke dingen doen met strings met vreemde tekens is het soms flink tobben.
Gewijzigd op 08/06/2010 19:59:45 door Piet Verhagen
lol, die ervaring heb ik ook, tot hiertoe snap ik helemaal niet wanneer en waarom die tekens vraagtekens worden. Is er nergens op internet een goede troubleshooter hiervoor? Het lijkt mij een vaak terugkerend probleem...
Dit is het enige begrijpbare dat ik terugvind:
Code (php)
1
2
2
The target encoding can be controlled with the xml_parser_set_option function. Any incoming characters outside the range of the target encoding are replaced with a question mark. That means if the source encoding is UTF-8 and the target encoding is US-ASCII, multibyte UTF-8 characters will be replaced with a question mark.
http://www.phpwact.org/php/i18n/utf-8
http://www.phpwact.org/php/i18n/utf-8
maar dat is bij mij niet het geval lijkt me...
Even terug naar:
Quote:
Maar als ik die code in mijn script zet
Hoe heb je dat gedaan? Want eerst zeg je dat het werkt, maar dan vervolgens als je het in je script zet ...
Gewijzigd op 09/06/2010 00:13:44 door Piet Verhagen
Ervan uitgaande dat je met UTF-8 werkt kun je \pL gebruiken om alle soorten letters te matchen.
Als ik iets nieuws probeer zet ik het altijd eerst in een klein scriptje, zoals het daar staat was het bestand volledig.
Als ik dat stukje dan kopieer in het script waar het moet dienen ging het fout. Dit is het script (zitten nog veel fouten in, ik weet het, is niet af), ik heb de code er even terug tussen geplakt:
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
<?php
include ('functies.php');
$admin = true;
include ('beveiliging.php');
//Functie voor het checken van grote csv toestanden, regex voorzien per veld, in juiste volgorde en aantal
function validCsv ($csv, $regexps) {
$data = nl2br ($csv); //nl2br
$numberOfLines = substr_count($data, "<br />"); //Count occurances of <br />
$result[0] = true;
$result[1] = $numberOfLines;
$result[2] = "";
$lineNumber = 0;
while ($lineNumber < $numberOfLines) {
$lineNumber++;
list ($lineString, $data) = explode ("<br />", $data, 2); //First line in $lineString, rest in $data
$lineArray = str_getcsv ($lineString, ","); // split values of $lineString in array in $lineArray
if (!$lineArray) {
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber."</strong>: can not split the string (".$lineString.") (".$lineString.")<br />";
}
$offset = 0;
while (isset ($regexps[$offset])) { // as long as there are regular expressions set hold them against the next field, if field count doesn't match --> false
$field = preg_match ($regexps[$offset], $lineArray[$offset]);
$offset++;
if (!$field | $field == "0") { //if regular expression didn't match or preg_match fails/dies
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber.", field ".$offset."</strong>: no match with regular expression (".$lineArray[$offset-1].") (".$lineString.")<br />";
}
}
if (isset ($lineArray[$offset])) { //If there are more line's than regular expressions
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber."</strong>: to many fields (".$lineString.")<br />";
}
}
return $result;
}
$importeren = "";
if (isset ($_POST['import'])) {
$lijnen = substr_count(nl2br ($_POST['hoofdgroepen']), "<br />");
if ($lijnen == "0" | $_POST['hoofdgroepen'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (hoofdgroepen): incompatibele data (Foutcode i1)<br />";
}
$lijnen = substr_count(nl2br ($_POST['subgroepen']), "<br />");
if ($lijnen == "0" | $_POST['subgroepen'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (subgroepen): incompatibele data (Foutcode i2)<br />";
}
$lijnen = substr_count(nl2br ($_POST['producten']), "<br />");
if ($lijnen == "0" | $_POST['producten'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (producten): incompatibele data (Foutcode i3)<br />";
}
$getal = "/^[1-9]{1}[0-9]{0,3}$/";
$tekst = "/^[\w\.,:!'()\/\-\+\*%&\x{00B0} ]{0,50}$/u";
$csv = true;
$hoofdgroepen = $_POST['hoofdgroepen'];
$regexps = array ($getal, $tekst, $getal);
$result = validCsv ($hoofdgroepen, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (hoofdgroepen) (Foutcode i4), validCsv:<br> ".$result[2]."<br>";
}
$subgroepen = $_POST['subgroepen'];
$regexps = array ($getal, $tekst, $getal, $getal);
$result = validCsv ($subgroepen, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (subgroepen) (Foutcode i5), validCsv:<br> ".$result[2]."<br>";
}
$producten = $_POST['producten'];
$regexps = array ($getal, $tekst, $tekst, $tekst, "/^[1-5]{1}$/", "/^[0-9\-]{1,4}[.]{1}[0-9]{2}/", $getal);
$result = validCsv ($producten, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (producten) (Foutcode i6), validCsv:<br> ".$result[2]."<br>";
}
if ($csv) {
$search = "'";
$replace = "\'";
$hoofdgroepen = str_replace ($search, $replace, $hoofdgroepen);
$subgroepen = str_replace ($search, $replace, $subgroepen);
$producten = str_replace ($search, $replace, $producten);
//Data als 3 lange teksten in de database gooien
$query = "INSERT INTO import VALUES ('$hoofdgroepen','$subgroepen','$producten')";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het toevoegen van de csv in import (Foutcode i7)<br>";
}
//Gegevens uit de database dumpen in drie bestanden waar mysql aan kan
$query = "SELECT hoofdgroepen INTO DUMPFILE 'hoofdgroepen.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (hoofdgroepen) (Foutcode i8)<br>";
}
$query = "SELECT subgroepen INTO DUMPFILE 'subgroepen.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (subgroepen) (Foutcode i9)<br>";
}
$query = "SELECT producten INTO DUMPFILE 'producten.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (producten) (Foutcode i10)<br>";
}
//Veelheid aan gegevens verwijderen uit database import
$query = "DELETE FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het verwijderen van de csv uit import (Foutcode i11)<br>";
}
if ($csv) {
//Leegmaken van de tabellen
$query = "DELETE FROM hoofdgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van hoofdgroepen (Foutcode i12)<br>";
}
$query = "DELETE FROM subgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van subgroepen (Foutcode i13)<br>";
}
$query = "DELETE FROM producten";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van producten (Foutcode i14)<br>";
}
//importeren van de csv bestanden
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/hoofdgroepen.csv'
INTO TABLE hoofdgroepen
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (hoofdgroepen) (Foutcode i15)<br>";
}
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/subgroepen.csv'
INTO TABLE subgroepen
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (subgroepen) (Foutcode i16)<br>";
}
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/producten.csv'
INTO TABLE producten
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (producten) (Foutcode i17)<br>";
}
if ($csv && $error == "" && $dberror == ""){
$importeren = "<h2>Geslaagd</h2>";
$importeren .= "<p>Het importeren is geslaagd!</p>";
//controleren op valse verwijzingen
$query = "SELECT id,naam,id_hoofdgroep FROM subgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het uitlezen van de subgroepen (Foutcode i18)<br>";
}
$num = mysql_num_rows ($result);
$i = 0;
while ($i < $num) {
$id = mysql_result ($result, $i, 'id');
$naam = mysql_result ($result, $i, 'naam');
$hoofdgroep = mysql_result ($result, $i, 'id_hoofdgroep');
$query2 = "SELECT id FROM hoofdgroepen WHERE id = '$hoofdgroep'";
$result2 = mysql_query ($query2);
if (!$result2) {
$dberror .= "Fout bij het uitlezen van de bijbehorende hoofdgroep (Foutcode i19)<br>";
}
$num2 = mysql_num_rows ($result2);
if ($num2 != "1") {
$query3 = "DELETE FROM subgroepen WHERE id = '$id'";
$result3 = mysql_query ($query3);
if (!$result3) {
$dberror .= "Fout bij het verwijderen van niet gelinkte subgroep (Foutcode i20)<br>";
} else {
$importeren .= "Subgroep ".$naam." (".$id.") werd verwijderd omdat deze verwijst naar een niet bestaande hoofdgroep (".$hoofdgroep.")<br>";
}
}
$i++;
}
$query = "SELECT id,naam,id_subgroep FROM producten";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het uitlezen van de producten (Foutcode i21)<br>";
}
$num = mysql_num_rows ($result);
$i = 0;
while ($i < $num) {
$id = mysql_result ($result, $i, 'id');
$naam = mysql_result ($result, $i, 'naam');
$subgroep = mysql_result ($result, $i, 'id_subgroep');
$query2 = "SELECT id FROM subgroepen WHERE id = '$subgroep'";
$result2 = mysql_query ($query2);
if (!$result2) {
$dberror .= "Fout bij het uitlezen van de bijbehorende subgroep (Foutcode i22)<br>";
}
$num2 = mysql_num_rows ($result2);
if ($num2 != "1") {
$query3 = "DELETE FROM producten WHERE id = '$id'";
$result3 = mysql_query ($query3);
if (!$result3) {
$dberror .= "Fout bij het verwijderen van niet gelinkte product (Foutcode i23)<br>";
} else {
$importeren .= "Product ".$naam." (".$id.") werd verwijderd omdat deze verwijst naar een niet bestaande subgroep (".$subgroep.")<br>";
}
}
$i++;
}
}
}
//verwijderen csv bestanden van server
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/hoofdgroepen.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (hoofdgroepen) (Foutcode i24)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (hoofdgroepen) (Foutcode i25)<br />";
}
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/subgroepen.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (subgroepen) (Foutcode i26)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (subgroepen) (Foutcode i27)<br />";
}
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/producten.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (producten) (Foutcode i28)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (producten) (Foutcode i29)<br />";
}
}
}
//html
include ('start.php');
//HIER HEB IK LETTERLIJK GEPLAKT OM TE TESTEN
$subject = "dit is één test met ä en ê en á âäáàêëé è ï î íìö ô óò üû úù";
$search = "âäáàêëéèïîíìöôóòüûúù";
$replace = "aaaaeeeeiiiioooouuuu";
$result = strtr ($subject, $search, $replace);
echo $subject."<br />".$result."<br />".$search."<br />".$replace;
echo $importeren;
?>
<h2>Importeren (CSV)</h2>
<form action = "<?php echo $_SERVER['PHP_SELF']."?lang=nl".addSessieUrl ($cookie, $sessie); ?>" method = "post">
<h3>Hoofdgroepen</h3>
<textarea name = "hoofdgroepen" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['hoofdgroepen']; } ?></textarea>
<h3>Subgroepen</h3>
<textarea name = "subgroepen" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['subgroepen']; } ?></textarea>
<h3>Producten</h3>
<textarea name = "producten" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['producten']; } ?></textarea>
<br><br>
<input type = "submit" name = "import" value = "Importeren">
<input type = "reset" value = "Opnieuw beginnen">
</form>
<?php
include ('stop.php');
?>
include ('functies.php');
$admin = true;
include ('beveiliging.php');
//Functie voor het checken van grote csv toestanden, regex voorzien per veld, in juiste volgorde en aantal
function validCsv ($csv, $regexps) {
$data = nl2br ($csv); //nl2br
$numberOfLines = substr_count($data, "<br />"); //Count occurances of <br />
$result[0] = true;
$result[1] = $numberOfLines;
$result[2] = "";
$lineNumber = 0;
while ($lineNumber < $numberOfLines) {
$lineNumber++;
list ($lineString, $data) = explode ("<br />", $data, 2); //First line in $lineString, rest in $data
$lineArray = str_getcsv ($lineString, ","); // split values of $lineString in array in $lineArray
if (!$lineArray) {
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber."</strong>: can not split the string (".$lineString.") (".$lineString.")<br />";
}
$offset = 0;
while (isset ($regexps[$offset])) { // as long as there are regular expressions set hold them against the next field, if field count doesn't match --> false
$field = preg_match ($regexps[$offset], $lineArray[$offset]);
$offset++;
if (!$field | $field == "0") { //if regular expression didn't match or preg_match fails/dies
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber.", field ".$offset."</strong>: no match with regular expression (".$lineArray[$offset-1].") (".$lineString.")<br />";
}
}
if (isset ($lineArray[$offset])) { //If there are more line's than regular expressions
$result[0] = false;
$result[2] .= "Error in <strong>line ".$lineNumber."</strong>: to many fields (".$lineString.")<br />";
}
}
return $result;
}
$importeren = "";
if (isset ($_POST['import'])) {
$lijnen = substr_count(nl2br ($_POST['hoofdgroepen']), "<br />");
if ($lijnen == "0" | $_POST['hoofdgroepen'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (hoofdgroepen): incompatibele data (Foutcode i1)<br />";
}
$lijnen = substr_count(nl2br ($_POST['subgroepen']), "<br />");
if ($lijnen == "0" | $_POST['subgroepen'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (subgroepen): incompatibele data (Foutcode i2)<br />";
}
$lijnen = substr_count(nl2br ($_POST['producten']), "<br />");
if ($lijnen == "0" | $_POST['producten'] == "") {
$csv = false;
$error .= "Fout bij het lezen van inkomende data (producten): incompatibele data (Foutcode i3)<br />";
}
$getal = "/^[1-9]{1}[0-9]{0,3}$/";
$tekst = "/^[\w\.,:!'()\/\-\+\*%&\x{00B0} ]{0,50}$/u";
$csv = true;
$hoofdgroepen = $_POST['hoofdgroepen'];
$regexps = array ($getal, $tekst, $getal);
$result = validCsv ($hoofdgroepen, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (hoofdgroepen) (Foutcode i4), validCsv:<br> ".$result[2]."<br>";
}
$subgroepen = $_POST['subgroepen'];
$regexps = array ($getal, $tekst, $getal, $getal);
$result = validCsv ($subgroepen, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (subgroepen) (Foutcode i5), validCsv:<br> ".$result[2]."<br>";
}
$producten = $_POST['producten'];
$regexps = array ($getal, $tekst, $tekst, $tekst, "/^[1-5]{1}$/", "/^[0-9\-]{1,4}[.]{1}[0-9]{2}/", $getal);
$result = validCsv ($producten, $regexps);
if (!$result[0]) {
$csv = false;
$error .= "Fout bij het valideren van de csv (producten) (Foutcode i6), validCsv:<br> ".$result[2]."<br>";
}
if ($csv) {
$search = "'";
$replace = "\'";
$hoofdgroepen = str_replace ($search, $replace, $hoofdgroepen);
$subgroepen = str_replace ($search, $replace, $subgroepen);
$producten = str_replace ($search, $replace, $producten);
//Data als 3 lange teksten in de database gooien
$query = "INSERT INTO import VALUES ('$hoofdgroepen','$subgroepen','$producten')";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het toevoegen van de csv in import (Foutcode i7)<br>";
}
//Gegevens uit de database dumpen in drie bestanden waar mysql aan kan
$query = "SELECT hoofdgroepen INTO DUMPFILE 'hoofdgroepen.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (hoofdgroepen) (Foutcode i8)<br>";
}
$query = "SELECT subgroepen INTO DUMPFILE 'subgroepen.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (subgroepen) (Foutcode i9)<br>";
}
$query = "SELECT producten INTO DUMPFILE 'producten.csv' FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het dumpen van de csv in bestand (producten) (Foutcode i10)<br>";
}
//Veelheid aan gegevens verwijderen uit database import
$query = "DELETE FROM import";
$result = mysql_query ($query);
if (!$result) {
$csv = false;
$dberror .= "Fout bij het verwijderen van de csv uit import (Foutcode i11)<br>";
}
if ($csv) {
//Leegmaken van de tabellen
$query = "DELETE FROM hoofdgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van hoofdgroepen (Foutcode i12)<br>";
}
$query = "DELETE FROM subgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van subgroepen (Foutcode i13)<br>";
}
$query = "DELETE FROM producten";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het leegmaken van producten (Foutcode i14)<br>";
}
//importeren van de csv bestanden
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/hoofdgroepen.csv'
INTO TABLE hoofdgroepen
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (hoofdgroepen) (Foutcode i15)<br>";
}
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/subgroepen.csv'
INTO TABLE subgroepen
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (subgroepen) (Foutcode i16)<br>";
}
$query = "LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/producten.csv'
INTO TABLE producten
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het importeren van de csv in database (producten) (Foutcode i17)<br>";
}
if ($csv && $error == "" && $dberror == ""){
$importeren = "<h2>Geslaagd</h2>";
$importeren .= "<p>Het importeren is geslaagd!</p>";
//controleren op valse verwijzingen
$query = "SELECT id,naam,id_hoofdgroep FROM subgroepen";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het uitlezen van de subgroepen (Foutcode i18)<br>";
}
$num = mysql_num_rows ($result);
$i = 0;
while ($i < $num) {
$id = mysql_result ($result, $i, 'id');
$naam = mysql_result ($result, $i, 'naam');
$hoofdgroep = mysql_result ($result, $i, 'id_hoofdgroep');
$query2 = "SELECT id FROM hoofdgroepen WHERE id = '$hoofdgroep'";
$result2 = mysql_query ($query2);
if (!$result2) {
$dberror .= "Fout bij het uitlezen van de bijbehorende hoofdgroep (Foutcode i19)<br>";
}
$num2 = mysql_num_rows ($result2);
if ($num2 != "1") {
$query3 = "DELETE FROM subgroepen WHERE id = '$id'";
$result3 = mysql_query ($query3);
if (!$result3) {
$dberror .= "Fout bij het verwijderen van niet gelinkte subgroep (Foutcode i20)<br>";
} else {
$importeren .= "Subgroep ".$naam." (".$id.") werd verwijderd omdat deze verwijst naar een niet bestaande hoofdgroep (".$hoofdgroep.")<br>";
}
}
$i++;
}
$query = "SELECT id,naam,id_subgroep FROM producten";
$result = mysql_query ($query);
if (!$result) {
$dberror .= "Fout bij het uitlezen van de producten (Foutcode i21)<br>";
}
$num = mysql_num_rows ($result);
$i = 0;
while ($i < $num) {
$id = mysql_result ($result, $i, 'id');
$naam = mysql_result ($result, $i, 'naam');
$subgroep = mysql_result ($result, $i, 'id_subgroep');
$query2 = "SELECT id FROM subgroepen WHERE id = '$subgroep'";
$result2 = mysql_query ($query2);
if (!$result2) {
$dberror .= "Fout bij het uitlezen van de bijbehorende subgroep (Foutcode i22)<br>";
}
$num2 = mysql_num_rows ($result2);
if ($num2 != "1") {
$query3 = "DELETE FROM producten WHERE id = '$id'";
$result3 = mysql_query ($query3);
if (!$result3) {
$dberror .= "Fout bij het verwijderen van niet gelinkte product (Foutcode i23)<br>";
} else {
$importeren .= "Product ".$naam." (".$id.") werd verwijderd omdat deze verwijst naar een niet bestaande subgroep (".$subgroep.")<br>";
}
}
$i++;
}
}
}
//verwijderen csv bestanden van server
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/hoofdgroepen.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (hoofdgroepen) (Foutcode i24)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (hoofdgroepen) (Foutcode i25)<br />";
}
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/subgroepen.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (subgroepen) (Foutcode i26)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (subgroepen) (Foutcode i27)<br />";
}
$filename = 'C:/wamp/bin/mysql/mysql5.1.36/data/appelboom/producten.csv';
if (file_exists($filename)) {
$result = unlink($filename);
if (!$result) {
$error .= "Fout bij het verwijderen van het csv bestand (producten) (Foutcode i28)<br>";
}
} else {
$error .= "Fout bij verwijderen van het csv bestand (producten) (Foutcode i29)<br />";
}
}
}
//html
include ('start.php');
//HIER HEB IK LETTERLIJK GEPLAKT OM TE TESTEN
$subject = "dit is één test met ä en ê en á âäáàêëé è ï î íìö ô óò üû úù";
$search = "âäáàêëéèïîíìöôóòüûúù";
$replace = "aaaaeeeeiiiioooouuuu";
$result = strtr ($subject, $search, $replace);
echo $subject."<br />".$result."<br />".$search."<br />".$replace;
echo $importeren;
?>
<h2>Importeren (CSV)</h2>
<form action = "<?php echo $_SERVER['PHP_SELF']."?lang=nl".addSessieUrl ($cookie, $sessie); ?>" method = "post">
<h3>Hoofdgroepen</h3>
<textarea name = "hoofdgroepen" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['hoofdgroepen']; } ?></textarea>
<h3>Subgroepen</h3>
<textarea name = "subgroepen" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['subgroepen']; } ?></textarea>
<h3>Producten</h3>
<textarea name = "producten" cols = "75" rows = "10"><?php if (isset ($_POST['import'])) { echo $_POST ['producten']; } ?></textarea>
<br><br>
<input type = "submit" name = "import" value = "Importeren">
<input type = "reset" value = "Opnieuw beginnen">
</form>
<?php
include ('stop.php');
?>
@Richard van Velzen: Idd, dat werkt ook. Bedankt!
En je hebt geen gebruik gemaakt van htmlentities toen je die vraagtekens kreeg? Mogelijk komt het doordat het tussen de html stond.