Formulier met file
Ik heb geprobeerd een file input toe te voegen aan mijn formulier.
Krijg nu een foutmelding: unexpected else op 188 maar zie daar niets verkeerds aan..
Heb het het script al meerdere keren doorgelopen maar kom er niet uit.
Voor jullie experts zou dit daarentegen vast een makkie zijn.. HELP!
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
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
<?php
include_once('header.php');
require ('test2.php');
//todo: include class met databasefuncties
// zodra submit wordt gedrukt, stop input in variabelen voor verificatie en verzending naar database, uitgebreid met file
if(isset($_POST['submit']) && $_FILES['formfile']['size'] > 0) {
$voornaam = ($_POST["Voornaam"]);
$achternaam = ($_POST["Achternaam"]);
$straat = ($_POST["Straat"]);
$plaats = ($_POST["Plaats"]);
$email = ($_POST["Email"]);
$telefoon = ($_POST["Telefoon"]);
$fileName = ($_FILES['formfile']['name']);
$tmpName = ($_FILES['formfile']['tmp_name']);
$fileSize = ($_FILES['formfile']['size']);
$fileType = ($_FILES['formfile']['type']);
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc()){
$fileName = addslashes($fileName);
}
}
//define test input functie voor validatie, 3 soorten type input verwacht (varchar-tekst, varchar-email, int-telefoon) + restrict filename + restrict filetype
function test_input($var,$soort){
if ($soort == 'tekst'){
if(preg_match("/^[a-zA-Z -]*$/",$var) == FALSE)
return FALSE;
}elseif ($soort == 'email'){
if(filter_var($var, FILTER_VALIDATE_EMAIL) == FALSE){
return FALSE;
}
}
elseif($soort == 'telefoon'){
if(preg_match('/^[0-9]{10}$/',$var) == FALSE)
return FALSE;
}
else {
return TRUE;
}
}
// create error voor als leeg, validatie ja, validatie nee, voor elke variabele.
// todo: toevoegen errors voor bestandsvariabelen, tododo: vervangen in array voor overzichtelijkheid
$error = FALSE;
if (empty($voornaam)) {
$voornaamerr = "<li>Voornaam is verplicht</li>";
$error = TRUE;
}
elseif (test_input($voornaam, 'tekst') === FALSE) {
$voornaamerr = "<li>Voornaam ongeldig</li>";
$error = TRUE;
}
else {
$voornaamerr = "";
}
if (empty($achternaam)) {
$achternaamerr = "<li>Achternaam is verplicht</li>";
$error = TRUE;
}
elseif (test_input($achternaam, 'tekst') === FALSE) {
$achternaamerr = "<li>Achternaam is ongeldig</li>";
$error = TRUE;
}
else {
$achternaamerr = "";
}
if (empty($straat)) {
$straaterr = "<li>Straat is verplicht</li>";
$error = TRUE;
}
elseif (test_input($straat, 'tekst') === FALSE) {
$straaterr = "<li>Straatnaam is ongeldig</li>";
$error = TRUE;
}
else {
$straaterr = "";
}
if (empty($plaats)) {
$plaatserr = "<li>Plaats is verplicht</li>";
$error = TRUE;
}
elseif (test_input($plaats, 'tekst') === FALSE) {
$plaatserr = "<li>Plaatsnaam is ongeldig</li>";
$error = TRUE;
}
else {
$plaatserr = "";
}
if (empty($email)) {
$emailerr = "<li>Email is verplicht</li>";
$error = TRUE;
}
elseif (test_input($email, 'email') === FALSE) {
$emailerr = "<li>Email is ongeldig</li>";
$error = TRUE;
}
else {
$emailerr = "";
}
if (empty($telefoon)) {
$telefoonerr = "<li>Telefoonnummer is verplicht</li>";
$error = TRUE;
}
elseif (test_input($telefoon, 'telefoon') === FALSE) {
$telefoonerr = "<li>Telefoonnummer is ongeldig</li>";
$error = TRUE;
}
else {
$telefoonerr = "";
}
if (empty($telefoon)) {
$telefoonerr = "<li>Telefoonnummer is verplicht</li>";
$error = TRUE;
}
elseif (test_input($telefoon, 'telefoon') === FALSE) {
$telefoonerr = "<li>Telefoonnummer is ongeldig</li>";
$error = TRUE;
}
else {
$telefoonerr = "";
}
// controleer duplicate bestandsnaam
if(file_exists($_FILES['formfile']['name'])) {
$fileNameError = "<li>Bestandsnaam al in gebruik, probeer te hernoemen</li>";
$error - TRUE;
}
else {
$fileNameError = "";
}
// beperk bestandstype
if($fileType !="pdf" && $fileType !="gif" && $fileType !="jpeg" && $fileType !="jpg" && $fileType !="png" && $fileType !="PDF" && $fileType !="GIF" && $fileType !="JPEG" && $fileType !="JPG" && $fileType !="PNG") {
$fileTypeError = "<li>Ongeldig bestandstype, toegestaande bestandstypen: JPG, GIF, PNG & PDF";
$error = TRUE;
}
else{
$fileTypeError = "";
}
// wanneer error niet aanwezig, verwerk gegevens in database, wanneer wel, creeer error en geef deze weer via errormelding
if(!$error){
//todo: Doe de post shit naar database via class
// oude/huidige sql: insert query in losse variabelen stoppen, per databasetabel dmv loop
$sql1 = "INSERT INTO persoonsgegevens(voornaam,achternaam) VALUES('$voornaam','$achternaam')";
if (mysqli_query($connection->db_connection, $sql1)) {
$user_id = mysqli_insert_id($connection->db_connection);
$sql2 = "INSERT INTO contactgegevens (email,telefoon,user_id) VALUES('$email','$telefoon','$user_id')";
if (mysqli_query($connection->db_connection, $sql2)) {
$sql3 = "INSERT INTO adresgegevens (straat,plaats,user_id) VALUES('$straat','$plaats','$user_id')";
if (mysqli_query($connection->db_connection, $sql3)) {
$sql4 = "INSERT INTO bijlage (bestandsnaam, bestandsgrootte, bestandstype, bestand) ". "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
if(mysql_query($connection->db_connection,$sql4)) {
echo '<p style="width:100%; padding:10px; background-color:#32beeb;color:#000000;text-align:center;">Gelukt!</p>';
header ("Refresh: 3 url=overzicht.php");
} else {
echo "Er ging iets mis";
}
} else {
echo "Er ging iets mis";
}
} else {
echo "Er ging iets mis";
}
}else {
echo "Er ging iets mis";
}
}else {
// create 1 errormelding voor implementatie, combineer losse errors van elke variabele string (.=) om zo en kleine, overzichtelijke PHP code in de HTML shell te krijgen
$errormelding = '<ul>';
if(isset($voornaamerr) && !empty($voornaamerr)){
$errormelding .= $voornaamerr;
}
if(isset($achternaamerr) && !empty($achternaamerr)){
$errormelding .= $achternaamerr;
}
if(isset($straaterr) && !empty($straaterr)){
$errormelding .= $straaterr;
}
if(isset($plaatserr) && !empty($plaatserr)){
$errormelding .= $plaatserr;
}
if(isset($emailerr) && !empty($emailerr)){
$errormelding .= $emailerr;
}
if(isset($telefoonerr) && !empty($telefoonerr)){
$errormelding .= $telefoonerr;
}
if(isset($fileNameError) && !empty($fileNameError)){
$errormelding .= $fileNameError;
}
if(isset($fileTypeError) && !empty($fileTypeError)){
$errormelding .= $fileTypeError;
}
$errormelding .= '</ul>';
}
?>
include_once('header.php');
require ('test2.php');
//todo: include class met databasefuncties
// zodra submit wordt gedrukt, stop input in variabelen voor verificatie en verzending naar database, uitgebreid met file
if(isset($_POST['submit']) && $_FILES['formfile']['size'] > 0) {
$voornaam = ($_POST["Voornaam"]);
$achternaam = ($_POST["Achternaam"]);
$straat = ($_POST["Straat"]);
$plaats = ($_POST["Plaats"]);
$email = ($_POST["Email"]);
$telefoon = ($_POST["Telefoon"]);
$fileName = ($_FILES['formfile']['name']);
$tmpName = ($_FILES['formfile']['tmp_name']);
$fileSize = ($_FILES['formfile']['size']);
$fileType = ($_FILES['formfile']['type']);
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc()){
$fileName = addslashes($fileName);
}
}
//define test input functie voor validatie, 3 soorten type input verwacht (varchar-tekst, varchar-email, int-telefoon) + restrict filename + restrict filetype
function test_input($var,$soort){
if ($soort == 'tekst'){
if(preg_match("/^[a-zA-Z -]*$/",$var) == FALSE)
return FALSE;
}elseif ($soort == 'email'){
if(filter_var($var, FILTER_VALIDATE_EMAIL) == FALSE){
return FALSE;
}
}
elseif($soort == 'telefoon'){
if(preg_match('/^[0-9]{10}$/',$var) == FALSE)
return FALSE;
}
else {
return TRUE;
}
}
// create error voor als leeg, validatie ja, validatie nee, voor elke variabele.
// todo: toevoegen errors voor bestandsvariabelen, tododo: vervangen in array voor overzichtelijkheid
$error = FALSE;
if (empty($voornaam)) {
$voornaamerr = "<li>Voornaam is verplicht</li>";
$error = TRUE;
}
elseif (test_input($voornaam, 'tekst') === FALSE) {
$voornaamerr = "<li>Voornaam ongeldig</li>";
$error = TRUE;
}
else {
$voornaamerr = "";
}
if (empty($achternaam)) {
$achternaamerr = "<li>Achternaam is verplicht</li>";
$error = TRUE;
}
elseif (test_input($achternaam, 'tekst') === FALSE) {
$achternaamerr = "<li>Achternaam is ongeldig</li>";
$error = TRUE;
}
else {
$achternaamerr = "";
}
if (empty($straat)) {
$straaterr = "<li>Straat is verplicht</li>";
$error = TRUE;
}
elseif (test_input($straat, 'tekst') === FALSE) {
$straaterr = "<li>Straatnaam is ongeldig</li>";
$error = TRUE;
}
else {
$straaterr = "";
}
if (empty($plaats)) {
$plaatserr = "<li>Plaats is verplicht</li>";
$error = TRUE;
}
elseif (test_input($plaats, 'tekst') === FALSE) {
$plaatserr = "<li>Plaatsnaam is ongeldig</li>";
$error = TRUE;
}
else {
$plaatserr = "";
}
if (empty($email)) {
$emailerr = "<li>Email is verplicht</li>";
$error = TRUE;
}
elseif (test_input($email, 'email') === FALSE) {
$emailerr = "<li>Email is ongeldig</li>";
$error = TRUE;
}
else {
$emailerr = "";
}
if (empty($telefoon)) {
$telefoonerr = "<li>Telefoonnummer is verplicht</li>";
$error = TRUE;
}
elseif (test_input($telefoon, 'telefoon') === FALSE) {
$telefoonerr = "<li>Telefoonnummer is ongeldig</li>";
$error = TRUE;
}
else {
$telefoonerr = "";
}
if (empty($telefoon)) {
$telefoonerr = "<li>Telefoonnummer is verplicht</li>";
$error = TRUE;
}
elseif (test_input($telefoon, 'telefoon') === FALSE) {
$telefoonerr = "<li>Telefoonnummer is ongeldig</li>";
$error = TRUE;
}
else {
$telefoonerr = "";
}
// controleer duplicate bestandsnaam
if(file_exists($_FILES['formfile']['name'])) {
$fileNameError = "<li>Bestandsnaam al in gebruik, probeer te hernoemen</li>";
$error - TRUE;
}
else {
$fileNameError = "";
}
// beperk bestandstype
if($fileType !="pdf" && $fileType !="gif" && $fileType !="jpeg" && $fileType !="jpg" && $fileType !="png" && $fileType !="PDF" && $fileType !="GIF" && $fileType !="JPEG" && $fileType !="JPG" && $fileType !="PNG") {
$fileTypeError = "<li>Ongeldig bestandstype, toegestaande bestandstypen: JPG, GIF, PNG & PDF";
$error = TRUE;
}
else{
$fileTypeError = "";
}
// wanneer error niet aanwezig, verwerk gegevens in database, wanneer wel, creeer error en geef deze weer via errormelding
if(!$error){
//todo: Doe de post shit naar database via class
// oude/huidige sql: insert query in losse variabelen stoppen, per databasetabel dmv loop
$sql1 = "INSERT INTO persoonsgegevens(voornaam,achternaam) VALUES('$voornaam','$achternaam')";
if (mysqli_query($connection->db_connection, $sql1)) {
$user_id = mysqli_insert_id($connection->db_connection);
$sql2 = "INSERT INTO contactgegevens (email,telefoon,user_id) VALUES('$email','$telefoon','$user_id')";
if (mysqli_query($connection->db_connection, $sql2)) {
$sql3 = "INSERT INTO adresgegevens (straat,plaats,user_id) VALUES('$straat','$plaats','$user_id')";
if (mysqli_query($connection->db_connection, $sql3)) {
$sql4 = "INSERT INTO bijlage (bestandsnaam, bestandsgrootte, bestandstype, bestand) ". "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
if(mysql_query($connection->db_connection,$sql4)) {
echo '<p style="width:100%; padding:10px; background-color:#32beeb;color:#000000;text-align:center;">Gelukt!</p>';
header ("Refresh: 3 url=overzicht.php");
} else {
echo "Er ging iets mis";
}
} else {
echo "Er ging iets mis";
}
} else {
echo "Er ging iets mis";
}
}else {
echo "Er ging iets mis";
}
}else {
// create 1 errormelding voor implementatie, combineer losse errors van elke variabele string (.=) om zo en kleine, overzichtelijke PHP code in de HTML shell te krijgen
$errormelding = '<ul>';
if(isset($voornaamerr) && !empty($voornaamerr)){
$errormelding .= $voornaamerr;
}
if(isset($achternaamerr) && !empty($achternaamerr)){
$errormelding .= $achternaamerr;
}
if(isset($straaterr) && !empty($straaterr)){
$errormelding .= $straaterr;
}
if(isset($plaatserr) && !empty($plaatserr)){
$errormelding .= $plaatserr;
}
if(isset($emailerr) && !empty($emailerr)){
$errormelding .= $emailerr;
}
if(isset($telefoonerr) && !empty($telefoonerr)){
$errormelding .= $telefoonerr;
}
if(isset($fileNameError) && !empty($fileNameError)){
$errormelding .= $fileNameError;
}
if(isset($fileTypeError) && !empty($fileTypeError)){
$errormelding .= $fileTypeError;
}
$errormelding .= '</ul>';
}
?>
Gewijzigd op 23/09/2017 21:33:38 door Dennis Achternaam
Verder raad ik af om veel if-jes in elkaar te nesten!
Tip: Zorg dat je altijd netjes inspringt Bij { en weer terug bij }.
Regel 175/176 staat niet correct ingesprongen.
Wil je al die SQL foutmeldingen sowieso wel op het scherm knallen? Een gewone gebruiker snapt er toch geen snars van, en de gebruiker die d'r wel wat van snapt weet meteen hoe je query in elkaar zit. Je opzet is nl nogal gevoelig voor SQL-injectie (vul maar eens een ' in bij een van de velden). Je kunt je foutmeldingen beter naar een log schrijven, en dat in de gaten houden. Op het scherm toon je dan hooguit iets 'er ging iets fout - probeer het later nog eens'.
Ben nu al een stukje verder volgens mij! heb de aangepaste code nu aangepast in de topic post.
Heb alleen nu weer 2 errors:
* Undefined index: formfile on line 139
* Undefined variable: fileType on line 148, (ik dacht slim te zijn door $fileType aan te passen naar ($_FILES['formfile']['type']) maar dit gaf mij alleen een verschuiving naar dezelfde undefined index van de eerste error
@Rob: Bedankt voor de tip! Aangepast!
@SanThe: Bedankt voor de tip! Aangepast!
Gewijzigd op 23/09/2017 21:34:42 door Dennis Achternaam