registratieformulier
Ik schrijf dit bericht naar aanleiding van mijn eindwerk. Ik moet namelijk een website programmeren met een webshop, en daarbij heb ik een registratieformulier.
Dit doe ik met behulp van de usbwebserver (phpmyadmin, php en html). Nadat ik alles geprogrammeerd had en uitgetest had viel mij iets op. De connectie met mijn database is geslaagd, maar de waarden worden niet in de database opgeslagen (er komt een nieuwe id in, maar de overige vakjes blijven leeg).
Ook in de url komen de gegevens tevoorschijn terwijl ik gebruik maak van een "post" dit zou dus niet mogen.
Kunnen jullie mij eventueel helpen? Ik heb nog maar 3 weken tijd voor alles inorde te brengen en ben letterlijk mijn hoofd al 5 dagen aan het breken op de eventuele fout.
Dit is mijn code:
!DOCTYPE html>
<html>
<style>
.error {color: #FF0000;}
</style>
<body>
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
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
<?php
session_start();
$db = mysqli_connect("localhost", "root", "EXPNcK2FKC68yBYN", "authenticatie");
$gebruikersnaam = $email = $paswoord = $paswoord2 = "";
$gebruikersnaamErr = $emailErr = $paswoordErr = $paswoord2Err = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["gebruikersnaam"]))
{
$gebruikersnaamErr = "Gebruikersnaam is nodig";
}
else
{
$gebruikersnaam = test_input($_POST["gebruikersnaam"]);
if (!preg_match("/^[a-zA-Z ]*$/",$gebruikersnaam))
{
$gebruikersnaamErr = "Er zijn enkel letters en spaties toegelaten";
}
}
if (empty($_POST["email"]))
{
$emailErr = "Email is verplicht";
}
else
{
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$emailErr = "Uw email is ongeldig";
}
}
if (empty($_POST["paswoord"]))
{
$paswoordErr = "Paswoord is verplicht";
}
else
{
$paswoord = test_input($_POST["paswoord"]);
if (!preg_match("/^[0-9-a-zA-Z ]*$/",$paswoord))
{
$paswoordErr = "Er zijn enkel letters en cijfers toegelaten";
}
}
if (empty($_POST["paswoord2"]))
{
$paswoord2Err = "Paswoord is verplicht";
}
else
{
$paswoord2 = test_input($_POST["paswoord2"]);
if (!preg_match("/^[0-9-a-zA-Z ]*$/",$paswoord2))
{
$paswoord2Err = "Er zijn enkel letters en cijfers toegelaten";
}
}
if ($paswoord != $paswoord2)
{
echo "De twee paswoorden zijn niet gelijk";
}
else
{
$paswoord = md5($paswoord); //hash paswoord
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$sql = "INSERT INTO users(gebruikersnaam, email, paswoord) VALUES ('$gebruikersnaam', '$email', '$paswoord')";
if (mysqli_query($db, $sql))
{
echo "U bent succesvol geregistreerd";
}
else
{
echo "Error: " . $sql . "<br>" . mysqli_error($connect);
}
Alvast bedankt!
Groetjes Sarah
session_start();
$db = mysqli_connect("localhost", "root", "EXPNcK2FKC68yBYN", "authenticatie");
$gebruikersnaam = $email = $paswoord = $paswoord2 = "";
$gebruikersnaamErr = $emailErr = $paswoordErr = $paswoord2Err = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["gebruikersnaam"]))
{
$gebruikersnaamErr = "Gebruikersnaam is nodig";
}
else
{
$gebruikersnaam = test_input($_POST["gebruikersnaam"]);
if (!preg_match("/^[a-zA-Z ]*$/",$gebruikersnaam))
{
$gebruikersnaamErr = "Er zijn enkel letters en spaties toegelaten";
}
}
if (empty($_POST["email"]))
{
$emailErr = "Email is verplicht";
}
else
{
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
$emailErr = "Uw email is ongeldig";
}
}
if (empty($_POST["paswoord"]))
{
$paswoordErr = "Paswoord is verplicht";
}
else
{
$paswoord = test_input($_POST["paswoord"]);
if (!preg_match("/^[0-9-a-zA-Z ]*$/",$paswoord))
{
$paswoordErr = "Er zijn enkel letters en cijfers toegelaten";
}
}
if (empty($_POST["paswoord2"]))
{
$paswoord2Err = "Paswoord is verplicht";
}
else
{
$paswoord2 = test_input($_POST["paswoord2"]);
if (!preg_match("/^[0-9-a-zA-Z ]*$/",$paswoord2))
{
$paswoord2Err = "Er zijn enkel letters en cijfers toegelaten";
}
}
if ($paswoord != $paswoord2)
{
echo "De twee paswoorden zijn niet gelijk";
}
else
{
$paswoord = md5($paswoord); //hash paswoord
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$sql = "INSERT INTO users(gebruikersnaam, email, paswoord) VALUES ('$gebruikersnaam', '$email', '$paswoord')";
if (mysqli_query($db, $sql))
{
echo "U bent succesvol geregistreerd";
}
else
{
echo "Error: " . $sql . "<br>" . mysqli_error($connect);
}
Alvast bedankt!
Groetjes Sarah
1. Waar is de escaping van je database invoer?
2. De test_input functie is gevaarlijk voor je data, en kan het erg eenvoudig slopen. Door htmlspecialchars daar tussenuit te halen is het al een stuk beter, al zou ik functies als strip_tags ook niet gebruiken: htmlspecialchars en consorten zijn bedoeld om te gebruiken bij weergave, en niet bij het opslaan in de database.
Mijn html code ziet er als volgt uit:
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
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
<form class="signup-page">
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div class="signup-header">
<h2>Maak een nieuwe account aan</h2>
<p>Heeft u al een account?
<a href="login.html" class="color-green"> log in</a></p>
</div>
<label>Gebruikersnaam</label>
<input class="form-control margin-bottom-20" name="gebruikersnaam" type="text" value="<?php $gebruikersnaam;?>">
<span class="error">* <?php echo $gebruikersnaamErr;?></span>
<label>Email</label>
<input class="form-control margin-bottom-20" name="email" type="text" value="<?php $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<div class="row">
<div class="col-sm-6">
<label>Paswoord</label>
<input class="form-control margin-bottom-20" name="paswoord" type="password" value="<?php $paswoord;?>">
<span class="error">* <?php echo $paswoordErr;?></span>
</div>
<div class="col-sm-6">
<label>Bevestig Paswoord</label>
<input class="form-control margin-bottom-20" name="paswoord2" type="password" value="<?php $paswoord2;?>">
<span class="error">* <?php echo $paswoord2Err;?></span>
</div>
</div>
<hr>
<div class="row">
<div class="col-lg-8">
<label class="checkbox">
<input type="checkbox">Ik ben akkoord met de
<a href="#">algemene voorwaarden</a>
</label>
</div>
<div class="col-lg-4 text-right">
<button class="btn btn-primary" type="submit" value="Submit" method="post">Registreer</button>
</div>
</div>
</form>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div class="signup-header">
<h2>Maak een nieuwe account aan</h2>
<p>Heeft u al een account?
<a href="login.html" class="color-green"> log in</a></p>
</div>
<label>Gebruikersnaam</label>
<input class="form-control margin-bottom-20" name="gebruikersnaam" type="text" value="<?php $gebruikersnaam;?>">
<span class="error">* <?php echo $gebruikersnaamErr;?></span>
<label>Email</label>
<input class="form-control margin-bottom-20" name="email" type="text" value="<?php $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<div class="row">
<div class="col-sm-6">
<label>Paswoord</label>
<input class="form-control margin-bottom-20" name="paswoord" type="password" value="<?php $paswoord;?>">
<span class="error">* <?php echo $paswoordErr;?></span>
</div>
<div class="col-sm-6">
<label>Bevestig Paswoord</label>
<input class="form-control margin-bottom-20" name="paswoord2" type="password" value="<?php $paswoord2;?>">
<span class="error">* <?php echo $paswoord2Err;?></span>
</div>
</div>
<hr>
<div class="row">
<div class="col-lg-8">
<label class="checkbox">
<input type="checkbox">Ik ben akkoord met de
<a href="#">algemene voorwaarden</a>
</label>
</div>
<div class="col-lg-4 text-right">
<button class="btn btn-primary" type="submit" value="Submit" method="post">Registreer</button>
</div>
</div>
</form>
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 08/05/2017 21:12:45 door - Ariën -
<form class="signup-page">
<form method="post" action="....
En waarom geen echo?
<?php $paswoord;?>
Gewijzigd op 08/05/2017 12:09:17 door - SanThe -
Nee, je gebruikt de test_input functie om je data om te vormen. De functie controleert niets. Feitelijk heeft deze functie dus een verkeerde naam.
>> <form class="signup-page">
En dit is het deel dat de request GET maakt en niet POST.
ja inderdaad bedankt voor jullie hulp! ik had gewoon over ene paar dingen over gekeken en in mijn eerste class stond inderdaad een get ipv een post... toch bedankt voor jullie tijd allemaal!
Houd ook rekening met de rest, want je script is nu ontzettend lek voor SQL injections. Hier kun je beter eerder dan later iets aan gaan doen.
En md5() als wachtwoord-hashing is ook behoorlijk achterhaald.