Htmlspecialchar of escape voor pdo gebruiken?
Hallo, allemaal is htmlspecialchar of escape voor pdo nodig? Ik wil een formulier maken dat bezoekers via front end kunnen invullen zodat in de database wordt opgeslagen.
escaping uiteraard wel, tenzij je prepared statements gebruikt. htmlspecialchars is NOOIT nodig bij database toegang. Dat is een weergave functie.
Hallo ben, eerst wil ik je bedanken. Zelf volg ik tutorial van PDO zou ik dan de code ook bij plaatsen? Dat meer zicht geeft en dan kan je nog misschien andere adviezen geven.
Je kunt uiteraard altijd code plaatsen. Dan is het in ieder geval duidelijk wat je doet.
Gewijzigd op 26/09/2016 00:12:29 door johan de wit
$_POST['wachtwoord'] zal niet bestaan, staat niet in het formulier.
Correct. Maar om de vraag te beantwoorden, je gebruikt hier prepared statements dus is escaping niet nodig. Zoals eerder gemeld moet je buiten escaping nooit andere dingen doen zoals htmlspecialchars, strip_tags oid. Ik kom die achterlijkheid veel te vaak tegen, met daarbij de vraag "waarom doet mijn query niet wat ik wil" ;-)
Ben: Dat zal ik onthouden.
Filter input, escape output..
Eerst wil ik je bedanken. Weet je misschien waarom bovenstaande script een blanco scherm geeft en als je melding aan zet krijg je ook geen meldingen te zien. Kan dat aan hosting zitten? Zo ja, dan wil ik bovenstaande script met mysql werken maar daar krijg ik lege waarde mee verstuurd.
htmlspecialchars
Dit dient om unieke of rare karakters om te zetten HTML entiteiten. Hierdoor is het leesbaar voor de browser zonder al te veel rompslomp. Dit is tevens uiterst handig ter beveiliging van een script. Omdat het verschillende HTML tekens omzet naar normale tekens. Zo wordt een < (kleiner dan) omgezet naar < en een > (groter dan) naar een >
De aanhalingstekens worden ook gefilterd.
Hierover kan je meer lezen op http://php.net/manual/en/function.htmlspecialchars.php
escaping
In de uitleg op php.net staat het volgende:
Quote:
This function is used to create a legal SQL string that you can use in an SQL statement. The given string is encoded to an escaped SQL string, taking into account the current character set of the connection.
Dat houdt simpelweg in dat waardes in MySQL(i) omgezet worden naar legale karakters kijkend naar de huidige karakterset zodat de string makkelijk plaatsbaar is voor de database.
Dit alles betekend in het kort dat een escape vooral wordt gebruikt om SQL injectie tegen te gaan en een htmlspecialchars wordt gebruikt om HTML tekens te filteren om bijvoorbeeld een Cross site scripting (XSS) tegen te gaan. Daarnaast ondersteund PDO ook geen escape.
Hier nog wat leesvoer om alles beter te begrijpen.
http://php.net/manual/en/mysqli.real-escape-string.php
http://php.net/manual/en/book.pdo.php
http://php.net/manual/en/function.htmlspecialchars.php
Succes!
Gewijzigd op 25/09/2016 23:17:47 door Koen Hollander
Ik wil een formulier maken dat de bezoekers formulier kunnen invullen zoals NAW gegevens etc etc, daarom kwam ik zo`n vraag.
Nu loop ik tegen een fout aan waar ik niet uit kan komen, moet ik hiervoor een nieuwe topic openen of hier met een nieuwe titel verder gaan?
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<form action="" method="post">
<div>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// close the mysqli connection
$mysqli->close();
?>
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<form action="" method="post">
<div>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// close the mysqli connection
$mysqli->close();
?>
Gewijzigd op 26/09/2016 00:11:31 door johan de wit
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
Dit moet je dus heel erg niet doen! htnlentities etc gebruik je bij WEERGAVE, nooit in je query.
Johan de wit op 25/09/2016 22:27:46:
Hartstikke bedankt Koen! Dit is veel duidelijk geworden.
Ik wil een formulier maken dat de bezoekers formulier kunnen invullen zoals NAW gegevens etc etc, daarom kwam ik zo`n vraag.
Nu loop ik tegen een fout aan waar ik niet uit kan komen, moet ik hiervoor een nieuwe topic openen of hier met een nieuwe titel verder gaan?
Hierbij een script wat goed werkt alleen ik kan een deel "wijzigen" niet verwijderen dan krijg ik een witte scherm zonder foutmeldingen (staat ook aan).
Ik wil een formulier maken dat de bezoekers formulier kunnen invullen zoals NAW gegevens etc etc, daarom kwam ik zo`n vraag.
Nu loop ik tegen een fout aan waar ik niet uit kan komen, moet ik hiervoor een nieuwe topic openen of hier met een nieuwe titel verder gaan?
Hierbij een script wat goed werkt alleen ik kan een deel "wijzigen" niet verwijderen dan krijg ik een witte scherm zonder foutmeldingen (staat ook aan).
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
function renderForm($first = '', $last ='', $error = '', $id = '')
{ ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>
<?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?>
</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h1><?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?></h1>
<?php if ($error != '') {
echo "<div style='padding:4px; border:1px solid red; color:red'>" . $error
. "</div>";
} ?>
<form action="" method="post">
<div>
<?php if ($id != '') { ?>
<input type="hidden" name="id" />
<p>ID: <?php echo $id; ?></p>
<?php } ?>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php }
/*
EDIT RECORD
*/
// if the 'id' variable is set in the URL, we know that we need to edit a record
if (isset($_GET['id']))
{
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// make sure the 'id' in the URL is valid
if (is_numeric($_POST['id']))
{
// get variables from the URL/form
$id = $_POST['id'];
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
$achternaam = htmlentities($_POST['achternaam'], ENT_QUOTES);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error, $id);
}
else
{
// if everything is fine, update the record in the database
if ($stmt = $mysqli->prepare("UPDATE players SET voornaam = ?, achternaam = ?
WHERE id=?"))
{
$stmt->bind_param("ssi", $voornaam, $achternaam, $id);
$stmt->execute();
$stmt->close();
}
// show an error message if the query has an error
else
{
echo "ERROR: could not prepare SQL statement.";
}
// redirect the user once the form is updated
header("Location: view.php");
}
}
// if the 'id' variable is not valid, show an error message
else
{
echo "Error!";
}
}
// if the form hasn't been submitted yet, get the info from the database and show the form
else
{
// make sure the 'id' value is valid
if (is_numeric($_GET['id']) && $_GET['id'] > 0)
{
// get 'id' from URL
$id = $_GET['id'];
// get the recod from the database
if($stmt = $mysqli->prepare("SELECT * FROM players WHERE id=?"))
{
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($id, $voornaam, $achternaam);
$stmt->fetch();
// show the form
renderForm($voornaam, $achternaam, NULL, $id);
$stmt->close();
}
// show an error if the query has an error
else
{
echo "Error: could not prepare SQL statement";
}
}
// if the 'id' value is not valid, redirect the user back to the view.php page
else
{
header("Location: view.php");
}
}
}
/*
NEW RECORD
*/
// if the 'id' variable is not set in the URL, we must be creating a new record
else
{
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
$achternaam = htmlentities($_POST['achternaam'], ENT_QUOTES);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// if the form hasn't been submitted yet, show the form
else
{
renderForm();
}
}
// close the mysqli connection
$mysqli->close();
?>
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
function renderForm($first = '', $last ='', $error = '', $id = '')
{ ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>
<?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?>
</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<h1><?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?></h1>
<?php if ($error != '') {
echo "<div style='padding:4px; border:1px solid red; color:red'>" . $error
. "</div>";
} ?>
<form action="" method="post">
<div>
<?php if ($id != '') { ?>
<input type="hidden" name="id" />
<p>ID: <?php echo $id; ?></p>
<?php } ?>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php }
/*
EDIT RECORD
*/
// if the 'id' variable is set in the URL, we know that we need to edit a record
if (isset($_GET['id']))
{
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// make sure the 'id' in the URL is valid
if (is_numeric($_POST['id']))
{
// get variables from the URL/form
$id = $_POST['id'];
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
$achternaam = htmlentities($_POST['achternaam'], ENT_QUOTES);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error, $id);
}
else
{
// if everything is fine, update the record in the database
if ($stmt = $mysqli->prepare("UPDATE players SET voornaam = ?, achternaam = ?
WHERE id=?"))
{
$stmt->bind_param("ssi", $voornaam, $achternaam, $id);
$stmt->execute();
$stmt->close();
}
// show an error message if the query has an error
else
{
echo "ERROR: could not prepare SQL statement.";
}
// redirect the user once the form is updated
header("Location: view.php");
}
}
// if the 'id' variable is not valid, show an error message
else
{
echo "Error!";
}
}
// if the form hasn't been submitted yet, get the info from the database and show the form
else
{
// make sure the 'id' value is valid
if (is_numeric($_GET['id']) && $_GET['id'] > 0)
{
// get 'id' from URL
$id = $_GET['id'];
// get the recod from the database
if($stmt = $mysqli->prepare("SELECT * FROM players WHERE id=?"))
{
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($id, $voornaam, $achternaam);
$stmt->fetch();
// show the form
renderForm($voornaam, $achternaam, NULL, $id);
$stmt->close();
}
// show an error if the query has an error
else
{
echo "Error: could not prepare SQL statement";
}
}
// if the 'id' value is not valid, redirect the user back to the view.php page
else
{
header("Location: view.php");
}
}
}
/*
NEW RECORD
*/
// if the 'id' variable is not set in the URL, we must be creating a new record
else
{
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
$achternaam = htmlentities($_POST['achternaam'], ENT_QUOTES);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// if the form hasn't been submitted yet, show the form
else
{
renderForm();
}
}
// close the mysqli connection
$mysqli->close();
?>
Kan je mij in een duidelijke tree structuur laten zien welke gegevens je van gebruikers wilt krijgen en wat je naamgeving is in de database. Wellicht dat ik je wat verder kan helpen.
Gewijzigd op 25/09/2016 23:20:40 door Koen Hollander
Ben van Velzen op 25/09/2016 23:13:41:
Ik zie dit alvast:
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
Dit moet je dus heel erg niet doen! htnlentities etc gebruik je bij WEERGAVE, nooit in je query.
$voornaam = htmlentities($_POST['voornaam'], ENT_QUOTES);
Dit moet je dus heel erg niet doen! htnlentities etc gebruik je bij WEERGAVE, nooit in je query.
Regel 54 tot 141 wil ik weg hebben.
Toevoeging op 25/09/2016 23:27:32:
Koen Hollander op 25/09/2016 23:17:16:
Kan je mij in een duidelijke tree structuur laten zien welke gegevens je van gebruikers wilt krijgen en wat je naamgeving is in de database. Wellicht dat ik je wat verder kan helpen.
Johan de wit op 25/09/2016 22:27:46:
Hartstikke bedankt Koen! Dit is veel duidelijk geworden.
Ik wil een formulier maken dat de bezoekers formulier kunnen invullen zoals NAW gegevens etc etc, daarom kwam ik zo`n vraag.
Nu loop ik tegen een fout aan waar ik niet uit kan komen, moet ik hiervoor een nieuwe topic openen of hier met een nieuwe titel verder gaan?
Ik wil een formulier maken dat de bezoekers formulier kunnen invullen zoals NAW gegevens etc etc, daarom kwam ik zo`n vraag.
Nu loop ik tegen een fout aan waar ik niet uit kan komen, moet ik hiervoor een nieuwe topic openen of hier met een nieuwe titel verder gaan?
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<form action="" method="post">
<div>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// close the mysqli connection
$mysqli->close();
?>
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<form action="" method="post">
<div>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// close the mysqli connection
$mysqli->close();
?>
Kan je mij in een duidelijke tree structuur laten zien welke gegevens je van gebruikers wilt krijgen en wat je naamgeving is in de database. Wellicht dat ik je wat verder kan helpen.
Ik wil alleen een formulier maken dat je na bevestigen NAW gegevens wordt opgeslagen, in de script heb ik alleen even voornaam en achternaam gelaten dat overzichtelijker blijft anders wordt de regels alleen maar langer en langer. Verder wordt er niks aangepast dus edit stuk wil weg hebben en verder wil ik gewoon zo veilig mogelijk maken. Met jullie tips wil ook blijven verbeteren zolang ik dat kan doen.
Voornaam
Tussenvoegsel
Achternaam
Geslacht
Adres
Huisnummer
Toevoeging
Postcode
Woonplaats
Telefoon/mobiel
Datum
Dit is nu wat ik heb:
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
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
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<form action="" method="post">
<div>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// close the mysqli connection
$mysqli->close();
?>
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
<?php
/*
Allows the user to both create new records and edit existing records
*/
// connect to the database
include("config.php");
// creates the new/edit record form
// since this form is used multiple times in this file, I have made it a function that is easily reusable
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<form action="" method="post">
<div>
<strong>First Name: *</strong> <input type="text" name="voornaam"
<br/>
<strong>Last Name: *</strong> <input type="text" name="achternaam"
/>
<p>* required</p>
<input type="submit" name="submit" value="Submit" />
</div>
</form>
</body>
</html>
<?php
// if the form's submit button is clicked, we need to process the form
if (isset($_POST['submit']))
{
// get the form data
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
// check that voornaam and achternaam are both not empty
if ($voornaam == '' || $achternaam == '')
{
// if they are empty, show an error message and display the form
$error = 'ERROR: Please fill in all required fields!';
renderForm($voornaam, $achternaam, $error);
}
else
{
// insert the new record into the database
if ($stmt = $mysqli->prepare("INSERT formulier (voornaam, achternaam) VALUES (?, ?)"))
{
$stmt->bind_param("ss", $voornaam, $achternaam);
$stmt->execute();
$stmt->close();
}
// show an error if the query has an error
else
{
echo "ERROR: Could not prepare SQL statement.";
}
// redirec the user
header("Location: view.php");
}
}
// close the mysqli connection
$mysqli->close();
?>
Er draait PHP versie 7.0.2.
Alles werkt goed tot dat ik Escape gebruik, nadat ik de waarde verstuur krijg ik onderstaande foutmeldingen. Als bij deze script ook niet nodig is dan haal ik Escape weg. Dan blijft nog server side controle nog over, ben ik dan misschien iets vergeten?
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in
Gewijzigd op 26/09/2016 07:38:15 door johan de wit
Je hebt in PHP 2 manieren van programmeren, grof genomen.
OOP en procedural.
Met OOP maak je objecten die elkaar uitbreiden, dus kan je $mysqli->real_escape_string() gebruiken
Jij gebruikt dat en daarom werkt mysqli_real_escape_string() niet. Die verwacht de connectiestring als in
mysqli_real_escape_string($mysqli,$value)
Zodoende
$voornaam = $mysqli->real_escape_string($_POST['voornaam']);
$achternaam = $mysqli->real_escape_string($_POST['achternaam']);
Maar weet wel, je pleurt PDO en MySQLi door elkaar.
Gewijzigd op 26/09/2016 11:12:06 door Ben van Velzen
Ben van Velzen op 26/09/2016 11:10:47:
Dat, en je maakt gebruik van prepared statements. Als je dan gaat escapen dan doe je de escaping dubbel, waardoor je data vervuild de database in gaat. Prepared statements doen de escaping voor je. Dat maakt ze zo krachtig. Haal de escaping dus gewoon weg. Is nergens goed voor. Het enige dat het nu zal doen is je data verknallen.
Als je alleen MySQL gebruikt, zonder de prepared statements, kan je inderdaad escapen. Anders geldt bovenstaand.
Het zijn kleine dingen waar rekening mee moet houden maar zo zie je het maar hoe belangrijk het is. Ik zal dan maar verwijderen en dit keer probeer ik validatie in te proppen. Ben ik misschien nog iets anders vergeten?
Ik heb nog geen validatie gemaakt en fouten afhandelen heb ik ook niet maar opeens krijg ik een error te zien. Als op Google zoek dan krijg alleen mysql te zien terwijl bij mij form() staat. Als ik formulier verstuur dan krijg ik de volgende error te zien. Fatal error: Uncaught Error: Call to undefined function renderForm() in
Quote:
Call to undefined function renderForm()
Dit betekend dat je op die regel de functie renderForm() aanroept, maar deze bestaat niet. Dus je moet of de functie toevoegen of in die regel het aanroepen weghalen.