Log in systeem
Ik ben net begonnen met php (al wel bekend met andere talen) en wil een inlogsysteem maken met mySQL en met een aanmeld form en een log uit knop. Ik heb al wat geprobeerd maar ik krijg telkens een fout te zien. Dit inlog systeem komt in een webapp dus gebruik ik ook jquery. Het volgende is wat ik al heb:
aanmelden.php:
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
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
<html>
<head>
<title> Aanmelden </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script>
<style>
.alaangemeld{
text-align:center;
}
a{
text-decoration: none;
}
.hier{
color: #fbc406;
}
</style>
</head>
<body>
<h1 style="text-align:center;"> Aanmelden </h1>
<form action="aanmelden.inc.php" method="post" data-ajax="false">
<input type="text" name="mail" value="" placeholder="E-mail">
<input type="password" name="ww" placeholder="Wachtwoord">
<input type="password" name="wwhh" placeholder="Herhaal wachtwoord">
<button type="submit" name="signup-verzend">Aanmelden</button>
</form>
<br>
<div class="alaangemeld">
<p> Al aangemeld? Klik dan <a href="login.php"><span class="hier">hier</span></a></p>
</div>
</body>
</html
<head>
<title> Aanmelden </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script>
<style>
.alaangemeld{
text-align:center;
}
a{
text-decoration: none;
}
.hier{
color: #fbc406;
}
</style>
</head>
<body>
<h1 style="text-align:center;"> Aanmelden </h1>
<form action="aanmelden.inc.php" method="post" data-ajax="false">
<input type="text" name="mail" value="" placeholder="E-mail">
<input type="password" name="ww" placeholder="Wachtwoord">
<input type="password" name="wwhh" placeholder="Herhaal wachtwoord">
<button type="submit" name="signup-verzend">Aanmelden</button>
</form>
<br>
<div class="alaangemeld">
<p> Al aangemeld? Klik dan <a href="login.php"><span class="hier">hier</span></a></p>
</div>
</body>
</html
aanmelden.inc.php:
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
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
<?php
session_start();
require "../includes/connect.php"; //hier wordt verbinding gemaakt met de database phpmyAdmin
$errors = 0;
$mail = "";
if(isset($_POST['signup-verzend'])){
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$wwhh = $_POST['wwhh'];
// checken voor fouten in invoer
if(empty($mail)) {
$errors = $errors + 1;
}
if(empty($ww)) {
$errors = $errors + 1;
}
if(empty($wwhh)) {
$errors = $errors + 1;
}
if($ww !== $wwhh) {
$errors = $errors + 1;
}
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$errors = $errors + 1;
}
//kijken of er al iemand is met dezelfde mail
$mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
$stmt = $conn->prepare($mailQuery);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$mailCount = $result->num_rows;
$stmt->close();
if($mailcount > 0){
$errors = $errors + 1;
}
if(count($errors === 0)) {
$wwSecure = password_hash($ww, PASSWORD_DEFAULT);
$token = bin2hex(random_bytes(50));
$verified = false;
$sql ="INSERT INTO gb (mail, ww, verified, token, ww) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
if($stmt->execute()){
//log automatisch in
$gb_id = $connect->insert_id;
$_SESSION['id'] = $gb_id;
$_SESSION['mail'] = $mail;
$_SESSION['verified'] = $verified;
//een bericht instellen
header("Location:geslaagd.html");
exit();
} else{
$errors = $errors + 1;
}
}else(count($errors > 0)){
header("Location:signup.php/?error=ErIsIetsFoutIngevuld");
exit();
}
}else{
header("Location:signup.php");
}
?>
session_start();
require "../includes/connect.php"; //hier wordt verbinding gemaakt met de database phpmyAdmin
$errors = 0;
$mail = "";
if(isset($_POST['signup-verzend'])){
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$wwhh = $_POST['wwhh'];
// checken voor fouten in invoer
if(empty($mail)) {
$errors = $errors + 1;
}
if(empty($ww)) {
$errors = $errors + 1;
}
if(empty($wwhh)) {
$errors = $errors + 1;
}
if($ww !== $wwhh) {
$errors = $errors + 1;
}
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$errors = $errors + 1;
}
//kijken of er al iemand is met dezelfde mail
$mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
$stmt = $conn->prepare($mailQuery);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$mailCount = $result->num_rows;
$stmt->close();
if($mailcount > 0){
$errors = $errors + 1;
}
if(count($errors === 0)) {
$wwSecure = password_hash($ww, PASSWORD_DEFAULT);
$token = bin2hex(random_bytes(50));
$verified = false;
$sql ="INSERT INTO gb (mail, ww, verified, token, ww) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
if($stmt->execute()){
//log automatisch in
$gb_id = $connect->insert_id;
$_SESSION['id'] = $gb_id;
$_SESSION['mail'] = $mail;
$_SESSION['verified'] = $verified;
//een bericht instellen
header("Location:geslaagd.html");
exit();
} else{
$errors = $errors + 1;
}
}else(count($errors > 0)){
header("Location:signup.php/?error=ErIsIetsFoutIngevuld");
exit();
}
}else{
header("Location:signup.php");
}
?>
geslaagd.html:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p> U bent aangemeld!</p>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p> U bent aangemeld!</p>
</body>
</html>
login.php:
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
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
<html>
<head>
<title> Inloggen </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script>
<style>
.alaangemeld{
text-align:center;
}
a{
text-decoration: none;
}
.hier{
color: #fbc406;
}
</style>
</head>
<body>
<h1 style="text-align:center;"> Inloggen </h1>
<form action="login.inc.php" method="post" data-ajax="false">
<input type="text" name="mail" value="" placeholder="E-mail">
<input type="password" name="ww" placeholder="Wachtwoord">
<button type="submit" name="signup-verzend">Log in</button>
</form>
<br>
<div class="alaangemeld">
<p> Nog niet aangemeld? Klik dan <a href="aanmelden.php"><span class="hier">hier</span></a></p>
</div>
</body>
</html>
<head>
<title> Inloggen </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.0/jquery.mobile-1.4.0.min.js"></script>
<style>
.alaangemeld{
text-align:center;
}
a{
text-decoration: none;
}
.hier{
color: #fbc406;
}
</style>
</head>
<body>
<h1 style="text-align:center;"> Inloggen </h1>
<form action="login.inc.php" method="post" data-ajax="false">
<input type="text" name="mail" value="" placeholder="E-mail">
<input type="password" name="ww" placeholder="Wachtwoord">
<button type="submit" name="signup-verzend">Log in</button>
</form>
<br>
<div class="alaangemeld">
<p> Nog niet aangemeld? Klik dan <a href="aanmelden.php"><span class="hier">hier</span></a></p>
</div>
</body>
</html>
Voor login.inc.php heb ik nog niets en weet ook nog niet hoe dit moet. Ik wil eerst ervoor kunnen zorgen dat je kan aanmelden in de website. Ik heb een tutorial gevolgd op youtube dus het zou kunnen dat ik wat heb overgenomen heb en niet heb verklaard, zou u dit ook kunnen vertellen wat ik zou moeten toevoegen, aanpassen, etc.?
Ik hoop dat u mij snapt en mij kan helpen! Ik zie uw bericht graag!
PS: Ik gebruik PHP versie 7.3 op mijn server met de volgende extensies: bcmath, dom, fileinfo, gd, intl, ioncube_loader, json, mbstring,mcrypt, mysqlnd, nd_mysqli, pdo, pdo_mysql, pdo_sqlite, phar, posix, soap, sockets, xmlwriter, xmlreader, xsl, zip
,groetjes Sem
Gewijzigd op 30/03/2020 20:29:21 door - Ariën -
Dat leest wat makkelijker.
Gewijzigd op 30/03/2020 20:10:23 door Sem Bakker
Waarom maak je van $errors geen array?
Code (php)
Pas op met de empty() functie die geeft TRUE als $email = '0'; gebruik liever strlen()
Toevoeging op 30/03/2020 20:49:28:
Gebruik ook een php editor, bijvoorbeeld Netbeans.
$sql ="INSERT INTO gb (mail, ww, verified, token, ww) VALUES (?, ?, ?, ?)";
5 kolommen en daar ga je 4 waarden in stoppen?
En sowieso lijkt het 2x gebruiken van dezelfde kolomnaam me fout.
Toevoeging op 30/03/2020 21:49:49:
" Ik heb al wat geprobeerd maar ik krijg telkens een fout te zien. "
Afgezien van die ene melding in het hebreews zijn de meeste foutmeldingen wel vrij duidelijk.
Maar dan moet je hem lezen.
en eventueel ook hier delen.
PHP zegt eigenlijk nooit "error, zoek het maar uit"
($errors === 0) geeft true of false.
En dat ga je tellen met count()?
Frank Nietbelangrijk op 30/03/2020 20:47:54:
Weet je zeker dat er op regel 68 een else moet staan?
Waarom maak je van $errors geen array?
Pas op met de empty() functie die geeft TRUE als $email = '0'; gebruik liever strlen()
Toevoeging op 30/03/2020 20:49:28:
Gebruik ook een php editor, bijvoorbeeld Netbeans.
Waarom maak je van $errors geen array?
Code (php)
Pas op met de empty() functie die geeft TRUE als $email = '0'; gebruik liever strlen()
Toevoeging op 30/03/2020 20:49:28:
Gebruik ook een php editor, bijvoorbeeld Netbeans.
Hi, bedankt. Moet ik dus regel 68 veranderen naar een array. Ik zal het doen! Danku!
Als programma gebruik ik nu Visual Studio Code. Wat doet NetBeans dan beter?
Gewijzigd op 31/03/2020 09:12:42 door Sem Bakker
Daar hebben mensen ook wat meer aan.
Ik zou zelf behoorlijk gefrustreerd raken als ik iets fout heb ingevuld, terwijl ik geen flauw idee heb wát ik fout heb ingevuld. ;-)
Geef bij foute inlogpogingen wel enkel weer de melding: "Inloggen mislukt", en niet apart of je username fout is, en of het password fout is. Je wilt niemand wat wijzer maken. ;-)
Gewijzigd op 31/03/2020 09:28:35 door - Ariën -
Nee inderdaad je hebt gelijk, lijkt me best frustrerend. Ik heb het volgende gemaakt en weet niet zeker of dit voldoet aan alle regels en wellicht kan het wel makkelijker.
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
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
<?php
session_start();
require "../includes/connect.php";
$errors = array(); //errors tellen
$mail = "";
if(isset($_POST['signup-verzend'])){
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$wwhh = $_POST['wwhh'];
// checken voor fouten in invoer
// kijken of e-mail niet leeg is
if(empty($mail)) {
header("Location:../signup.php?error=eMailIsLeeg");
exit();
}
//kijken of wachtwoord niet ingevuld is
if(empty($ww)) {
header("Location:../signup.php?error=WachtwoordIsLeeg");
exit();
}
//kijken of wachtwoordherhaal niet ingevuld is
if(empty($wwhh)) {
header("Location:../signup.php?error=WachtwoordHerhaalIsLeeg");
exit();
}
//kijken of de twee ww hetzelfde zijn
if($ww !== $wwhh) {
header("Location:../signup.php?error=WachtwoordenNietHetzelfde");
exit();
}
//kijken of het een geldig e-mail adres is
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
header("Location:../signup.php?error=eMailNietGeldig");
exit();
}
//kijken of er al iemand is met dezelfde mail
$mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
$stmt = $conn->prepare($mailQuery);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$mailCount = $result->num_rows;
$stmt->close();
//als er meerdere accounts bestaan moet er een error komen
if($mailcount > 0){
$errors = $errors + 1;
header("Location:../signup.php?error=EmailAlBekend");
exit();
}
//als er geen fouten zijn bij invoer krijg je een token en ben je dus niet verified
if(strlen($errors) == 0)) {
$wwSecure = password_hash($ww, PASSWORD_DEFAULT);
$token = bin2hex(random_bytes(50));
$verified = false;
//persoon toevoegen aan database
$sql ="INSERT INTO gb (mail, verified, token, ww) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
if($stmt->execute()){
//log automatisch in
$gb_id = $connect->insert_id;
$_SESSION['id'] = $gb_id;
$_SESSION['mail'] = $mail;
$_SESSION['verified'] = $verified;
//een bericht instellen
$_SESSION['message'] = "U bent ingelogd!";
header("Location:../");
exit();
//een of andere manier niet gelukt om de gebruiker toe te voegen aan database
} else{
header("Location:../signup.php?error=ToevoegenAanDbMislukt");
exit();
}
}
}
//als je op deze site komt niet via signup.php dan word je naar home gestuurd
else{
header("Location:../");
}
?>
session_start();
require "../includes/connect.php";
$errors = array(); //errors tellen
$mail = "";
if(isset($_POST['signup-verzend'])){
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$wwhh = $_POST['wwhh'];
// checken voor fouten in invoer
// kijken of e-mail niet leeg is
if(empty($mail)) {
header("Location:../signup.php?error=eMailIsLeeg");
exit();
}
//kijken of wachtwoord niet ingevuld is
if(empty($ww)) {
header("Location:../signup.php?error=WachtwoordIsLeeg");
exit();
}
//kijken of wachtwoordherhaal niet ingevuld is
if(empty($wwhh)) {
header("Location:../signup.php?error=WachtwoordHerhaalIsLeeg");
exit();
}
//kijken of de twee ww hetzelfde zijn
if($ww !== $wwhh) {
header("Location:../signup.php?error=WachtwoordenNietHetzelfde");
exit();
}
//kijken of het een geldig e-mail adres is
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
header("Location:../signup.php?error=eMailNietGeldig");
exit();
}
//kijken of er al iemand is met dezelfde mail
$mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
$stmt = $conn->prepare($mailQuery);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$mailCount = $result->num_rows;
$stmt->close();
//als er meerdere accounts bestaan moet er een error komen
if($mailcount > 0){
$errors = $errors + 1;
header("Location:../signup.php?error=EmailAlBekend");
exit();
}
//als er geen fouten zijn bij invoer krijg je een token en ben je dus niet verified
if(strlen($errors) == 0)) {
$wwSecure = password_hash($ww, PASSWORD_DEFAULT);
$token = bin2hex(random_bytes(50));
$verified = false;
//persoon toevoegen aan database
$sql ="INSERT INTO gb (mail, verified, token, ww) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
if($stmt->execute()){
//log automatisch in
$gb_id = $connect->insert_id;
$_SESSION['id'] = $gb_id;
$_SESSION['mail'] = $mail;
$_SESSION['verified'] = $verified;
//een bericht instellen
$_SESSION['message'] = "U bent ingelogd!";
header("Location:../");
exit();
//een of andere manier niet gelukt om de gebruiker toe te voegen aan database
} else{
header("Location:../signup.php?error=ToevoegenAanDbMislukt");
exit();
}
}
}
//als je op deze site komt niet via signup.php dan word je naar home gestuurd
else{
header("Location:../");
}
?>
Edit:
Het integraal quoten van het eerste voorgaande bericht is niet nodig.
Gewijzigd op 31/03/2020 09:46:36 door - Ariën -
Steeds maar weer los tonen is behoorlijk vervelend, waarbij de gebruiker steeds maar heen en weer moet klikken.
Gewijzigd op 31/03/2020 09:49:27 door - Ariën -
Gewijzigd op 31/03/2020 09:49:51 door - Ariën -
Gewijzigd op 31/03/2020 09:51:26 door - Ariën -
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
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
<?php
session_start();
require "../includes/connect.php";
$errors = array[]; //errors tellen
$mail = "";
if(isset($_POST['signup-verzend'])){
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$wwhh = $_POST['wwhh'];
// checken voor fouten in invoer
// kijken of e-mail niet leeg is
if(empty($mail)) {
header("Location:../signup.php?error=eMailIsLeeg");
exit();
}
//kijken of wachtwoord niet ingevuld is
if(empty($ww)) {
header("Location:../signup.php?error=WachtwoordIsLeeg");
exit();
}
//kijken of wachtwoordherhaal niet ingevuld is
if(empty($wwhh)) {
header("Location:../signup.php?error=WachtwoordHerhaalIsLeeg");
exit();
}
//kijken of de twee ww hetzelfde zijn
if($ww !== $wwhh) {
header("Location:../signup.php?error=WachtwoordenNietHetzelfde");
exit();
}
//kijken of het een geldig e-mail adres is
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
header("Location:../signup.php?error=eMailNietGeldig");
exit();
}
//kijken of er al iemand is met dezelfde mail
$mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
$stmt = $conn->prepare($mailQuery);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$mailCount = $result->num_rows;
$stmt->close();
//als er meerdere accounts bestaan moet er een error komen
if($mailcount > 0){
$errors = $errors + 1;
header("Location:../signup.php?error=EmailAlBekend");
exit();
}
//als er geen fouten zijn bij invoer krijg je een token en ben je dus niet verified
if(count($errors) == 0)) {
$wwSecure = password_hash($ww, PASSWORD_DEFAULT);
$token = bin2hex(random_bytes(50));
$verified = false;
//persoon toevoegen aan database
$sql ="INSERT INTO gb (mail, verified, token, ww) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
if($stmt->execute()){
//log automatisch in
$gb_id = $connect->insert_id;
$_SESSION['id'] = $gb_id;
$_SESSION['mail'] = $mail;
$_SESSION['verified'] = $verified;
//een bericht instellen
$_SESSION['message'] = "U bent ingelogd!";
header("Location:../");
exit();
//een of andere manier niet gelukt om de gebruiker toe te voegen aan database
} else{
header("Location:../signup.php?error=ToevoegenAanDbMislukt");
exit();
}
}
//als je op deze site komt niet via signup.php dan word je naar home gestuurd
}else{
header("Location:../");
}
?>
session_start();
require "../includes/connect.php";
$errors = array[]; //errors tellen
$mail = "";
if(isset($_POST['signup-verzend'])){
$mail = $_POST['mail'];
$ww = $_POST['ww'];
$wwhh = $_POST['wwhh'];
// checken voor fouten in invoer
// kijken of e-mail niet leeg is
if(empty($mail)) {
header("Location:../signup.php?error=eMailIsLeeg");
exit();
}
//kijken of wachtwoord niet ingevuld is
if(empty($ww)) {
header("Location:../signup.php?error=WachtwoordIsLeeg");
exit();
}
//kijken of wachtwoordherhaal niet ingevuld is
if(empty($wwhh)) {
header("Location:../signup.php?error=WachtwoordHerhaalIsLeeg");
exit();
}
//kijken of de twee ww hetzelfde zijn
if($ww !== $wwhh) {
header("Location:../signup.php?error=WachtwoordenNietHetzelfde");
exit();
}
//kijken of het een geldig e-mail adres is
if(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
header("Location:../signup.php?error=eMailNietGeldig");
exit();
}
//kijken of er al iemand is met dezelfde mail
$mailQuery = "SELECT * FROM gb WHERE mail=? LIMIT 1";
$stmt = $conn->prepare($mailQuery);
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
$mailCount = $result->num_rows;
$stmt->close();
//als er meerdere accounts bestaan moet er een error komen
if($mailcount > 0){
$errors = $errors + 1;
header("Location:../signup.php?error=EmailAlBekend");
exit();
}
//als er geen fouten zijn bij invoer krijg je een token en ben je dus niet verified
if(count($errors) == 0)) {
$wwSecure = password_hash($ww, PASSWORD_DEFAULT);
$token = bin2hex(random_bytes(50));
$verified = false;
//persoon toevoegen aan database
$sql ="INSERT INTO gb (mail, verified, token, ww) VALUES (?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ssbs', $mail, $verified, $token, $wwSecure);
if($stmt->execute()){
//log automatisch in
$gb_id = $connect->insert_id;
$_SESSION['id'] = $gb_id;
$_SESSION['mail'] = $mail;
$_SESSION['verified'] = $verified;
//een bericht instellen
$_SESSION['message'] = "U bent ingelogd!";
header("Location:../");
exit();
//een of andere manier niet gelukt om de gebruiker toe te voegen aan database
} else{
header("Location:../signup.php?error=ToevoegenAanDbMislukt");
exit();
}
}
//als je op deze site komt niet via signup.php dan word je naar home gestuurd
}else{
header("Location:../");
}
?>
Gewijzigd op 31/03/2020 10:07:31 door - Ariën -
Stel: Jij bent op visite, en je gooit per ongeluk een vaas om. Loop je dan ook zomaar weg om het huis van je vriend te verlaten? :-D
Nee, exit; is hier NOOIT de oplossing. Je script moet juist NIET stoppen en gewoon netjes doorgaan.
Wel hoort er een exit; na een location-header. Maar location-headers zijn weer niet de oplossing om foutmeldingen te tonen.
- Je verzamelt eerst alle foutmeldingen in je array.
- Je telt deze
- Is het aantal hoger dan 0: "Er is iets niet ingevuld" en toon alle fouten.
Is het aantal 0: Hoera! Alles is goed ingevuld. Ga door met het proces en voeg de data toe.
Gewijzigd op 31/03/2020 10:11:13 door - Ariën -
Als je het onderstaande doet creëer je volgens mij alleen een pop-up in de signup.php, maar deze moet alleen ontstaan als de message nodig is.
Code (php)
1
2
3
4
5
2
3
4
5
function function_alert($message) {
// Display the alert box
echo "<script>alert('$message');</script>";
}
// Display the alert box
echo "<script>alert('$message');</script>";
}
Toevoeging op 31/03/2020 10:12:21:
- Ariën - op 31/03/2020 10:07:42:
Een exit; na een fout?
Stel: Jij bent op visite, en je gooit per ongeluk een vaas om. Loop je dan ook zomaar weg om het huis van je vriend te verlaten? :-D
Nee, exit; is hier NOOIT de oplossing. Je script moet juist NIET stoppen en gewoon netjes doorgaan.
Wel hoort er een exit; na een location-header. Maar location-headers zijn weer niet de oplossing om foutmeldingen te tonen.
- Je verzamelt eerst alle foutmeldingen in je array.
- Je telt deze
- Is het aantal hoger dan 0: "Er is iets niet ingevuld" en toon alle fouten.
Is het aantal 0: Hoera! Alles is goed ingevuld. Ga door met het proces en voeg de data toe.
Stel: Jij bent op visite, en je gooit per ongeluk een vaas om. Loop je dan ook zomaar weg om het huis van je vriend te verlaten? :-D
Nee, exit; is hier NOOIT de oplossing. Je script moet juist NIET stoppen en gewoon netjes doorgaan.
Wel hoort er een exit; na een location-header. Maar location-headers zijn weer niet de oplossing om foutmeldingen te tonen.
- Je verzamelt eerst alle foutmeldingen in je array.
- Je telt deze
- Is het aantal hoger dan 0: "Er is iets niet ingevuld" en toon alle fouten.
Is het aantal 0: Hoera! Alles is goed ingevuld. Ga door met het proces en voeg de data toe.
Ooooohhh ik snap hem! Ahh dankuwel. Het is natuurlijk handig om te weten welke fouten je allemaal hebt als je er meerdere hebt. De exit moet dus weg bij alle errors. Maar wat moet er voor in de plaats komen van de
Gewijzigd op 31/03/2020 10:14:24 door Sem Bakker
Wat is dat de reden van? Het is overigens ook een potentieel risico voor phishing.
Iemand kan een fake-site maken om je logins te onderscheppen, om vervolgens naar www.jouwsite.nl/?error=LogInFout te linken.
De gebruiker ziet dat het fout gaat, maar denkt gelukkig toch op jouw site ingelogd te zijn, wat niet zo is.
Dus geen location-headers, maar je array steeds verder opbouwen. Het stappenplan heb ik al geschreven net.
Gewijzigd op 31/03/2020 10:17:12 door - Ariën -
Dat zou inhouden dat je de informatie, of in ieder geval zoveel mogelijk informatie, op een of andere manier zult moeten onthouden om deze weer terug in het formulier te plaatsen, dit is ook een stukje gebruiksvriendelijkheid, zodat iemand die een fout maakt niet elke keer alles opnieuw hoeft in te vullen. Dit (onthouden en terugplaatsen) zou je kunnen bewerkstelligen door gebruikmaking van een sessie.
Dit is dus ook een uitgelezen moment om na te gaan denken over de algemene structuur van je webpagina/-applicatie en hoe je hier doorheen navigeert. Vooral wanneer jouw applicatie veel formulieren bevat is het belangrijk -en het bespaart je later ook enorm veel tijd- om dit proces te stroomlijnen.
En als je een aanzienlijke hoeveelheid / heel veel formulieren hebt is het mogelijk zelfs interessant om een apart formuliersysteem te bouwen. Maar soms kan het ook handig zijn om hier geen gebruik van te maken, ingeval het zeer specialistische formulieren betreft, zoals bijvoorbeeld een login- of zoekformulier. Maar die gevallen vormen dan de uitzondering op de regel.
EDIT: ook is het verstandig om na te denken over hoe je informatie structureert in je sessie. Nu stop je "id", "mail" en "verified" los in je sessie, waarom?
"id" zal nodig zijn om een gebruiker te identificeren
"mail" is afleidbaar
"verified" is nogal zinloos (te meer deze waarde false blijft na registratie?), stop gewoon niets in je sessie als er niets "geverifieerd" is, jij hebt de controle over je sessie.
Maar dan wil je niet dat formulierdata "botst" met deze user data, of nog erger, dat je door een hack in je formulier het "id" veld zou kunnen overschrijven ofzo. Je zult dus verschillende segmenten in je sessie moeten creëren. Bijvoorbeeld $_SESSION['form'] als "root" (tis nog steeds geen boom :p) / uitgangspunt voor al jouw formulieren.
Gewijzigd op 31/03/2020 17:03:02 door Thomas van den Heuvel
Al denk ik misschien van wel, kan het niet hard maken omdat ik Visual Studio Code niet ken (of misschien van heel vroeger). Het punt waarom ik het zei is omdat Netbeans bij mij direct een rode markering liet zien op die else statement.
Met andere woorden zit een goede PHP editor vol vernuft om jou te helpen. En als er dit soort slordigheidjes blijken te zijn dan is het vaak zo dat er geen php editor gebruikt wordt.
Toevoeging op 31/03/2020 18:46:44:
Zoals Arien al verteld heeft moet je een gebruiker juist wijzen op een invoerfout en natuurlijk niet gelijk je programma afbreken. Het voordeel van de fouten toevoegen aan een array is dat je deze dan netjes kunt laten zien aan de gebruikers.
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
<?php
$errors = [];
if(strlen($mail) == 0) {
$errors[] = 'U moet een ander email adres opgeven';
}
?>
<!-- ERGENS TUSSEN DE HTML: -->
<!-- controleren of er errors zijn en dan netjes weergeven -->
<?php if(count($errors)): ?>
<div class="alert alert-warning">
<ul>
<?php foreach($errors as $error): ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
$errors = [];
if(strlen($mail) == 0) {
$errors[] = 'U moet een ander email adres opgeven';
}
?>
<!-- ERGENS TUSSEN DE HTML: -->
<!-- controleren of er errors zijn en dan netjes weergeven -->
<?php if(count($errors)): ?>
<div class="alert alert-warning">
<ul>
<?php foreach($errors as $error): ?>
<li><?php echo $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
Gewijzigd op 31/03/2020 18:49:48 door Frank Nietbelangrijk
Thomas van den Heuvel op 31/03/2020 16:37:56:
Het is wel een goede gewoonte om na de validatie en/of verwerking van een POST te redirecten.
Dat zou inhouden dat je de informatie, of in ieder geval zoveel mogelijk informatie, op een of andere manier zult moeten onthouden om deze weer terug in het formulier te plaatsen, dit is ook een stukje gebruiksvriendelijkheid, zodat iemand die een fout maakt niet elke keer alles opnieuw hoeft in te vullen. Dit (onthouden en terugplaatsen) zou je kunnen bewerkstelligen door gebruikmaking van een sessie.
Dit is dus ook een uitgelezen moment om na te gaan denken over de algemene structuur van je webpagina/-applicatie en hoe je hier doorheen navigeert. Vooral wanneer jouw applicatie veel formulieren bevat is het belangrijk -en het bespaart je later ook enorm veel tijd- om dit proces te stroomlijnen.
En als je een aanzienlijke hoeveelheid / heel veel formulieren hebt is het mogelijk zelfs interessant om een apart formuliersysteem te bouwen. Maar soms kan het ook handig zijn om hier geen gebruik van te maken, ingeval het zeer specialistische formulieren betreft, zoals bijvoorbeeld een login- of zoekformulier. Maar die gevallen vormen dan de uitzondering op de regel.
EDIT: ook is het verstandig om na te denken over hoe je informatie structureert in je sessie. Nu stop je "id", "mail" en "verified" los in je sessie, waarom?
"id" zal nodig zijn om een gebruiker te identificeren
"mail" is afleidbaar
"verified" is nogal zinloos (te meer deze waarde false blijft na registratie?), stop gewoon niets in je sessie als er niets "geverifieerd" is, jij hebt de controle over je sessie.
Maar dan wil je niet dat formulierdata "botst" met deze user data, of nog erger, dat je door een hack in je formulier het "id" veld zou kunnen overschrijven ofzo. Je zult dus verschillende segmenten in je sessie moeten creëren. Bijvoorbeeld $_SESSION['form'] als "root" (tis nog steeds geen boom :p) / uitgangspunt voor al jouw formulieren.
Dat zou inhouden dat je de informatie, of in ieder geval zoveel mogelijk informatie, op een of andere manier zult moeten onthouden om deze weer terug in het formulier te plaatsen, dit is ook een stukje gebruiksvriendelijkheid, zodat iemand die een fout maakt niet elke keer alles opnieuw hoeft in te vullen. Dit (onthouden en terugplaatsen) zou je kunnen bewerkstelligen door gebruikmaking van een sessie.
Dit is dus ook een uitgelezen moment om na te gaan denken over de algemene structuur van je webpagina/-applicatie en hoe je hier doorheen navigeert. Vooral wanneer jouw applicatie veel formulieren bevat is het belangrijk -en het bespaart je later ook enorm veel tijd- om dit proces te stroomlijnen.
En als je een aanzienlijke hoeveelheid / heel veel formulieren hebt is het mogelijk zelfs interessant om een apart formuliersysteem te bouwen. Maar soms kan het ook handig zijn om hier geen gebruik van te maken, ingeval het zeer specialistische formulieren betreft, zoals bijvoorbeeld een login- of zoekformulier. Maar die gevallen vormen dan de uitzondering op de regel.
EDIT: ook is het verstandig om na te denken over hoe je informatie structureert in je sessie. Nu stop je "id", "mail" en "verified" los in je sessie, waarom?
"id" zal nodig zijn om een gebruiker te identificeren
"mail" is afleidbaar
"verified" is nogal zinloos (te meer deze waarde false blijft na registratie?), stop gewoon niets in je sessie als er niets "geverifieerd" is, jij hebt de controle over je sessie.
Maar dan wil je niet dat formulierdata "botst" met deze user data, of nog erger, dat je door een hack in je formulier het "id" veld zou kunnen overschrijven ofzo. Je zult dus verschillende segmenten in je sessie moeten creëren. Bijvoorbeeld $_SESSION['form'] als "root" (tis nog steeds geen boom :p) / uitgangspunt voor al jouw formulieren.
Heel veel informatie om zo in 1 keer te lezen, maar zeker goed te gebruiken dankjewel! Dit ga ik zeker te weten gebruiken ook in de documentatie die ik moet aanleggen bij dit project. Dankuwel!
Frank Nietbelangrijk op 31/03/2020 18:40:01:
>> Als programma gebruik ik nu Visual Studio Code. Wat doet NetBeans dan beter?
Al denk ik misschien van wel, kan het niet hard maken omdat ik Visual Studio Code niet ken (of misschien van heel vroeger). Het punt waarom ik het zei is omdat Netbeans bij mij direct een rode markering liet zien op die else statement.
Met andere woorden zit een goede PHP editor vol vernuft om jou te helpen. En als er dit soort slordigheidjes blijken te zijn dan is het vaak zo dat er geen php editor gebruikt wordt.
Al denk ik misschien van wel, kan het niet hard maken omdat ik Visual Studio Code niet ken (of misschien van heel vroeger). Het punt waarom ik het zei is omdat Netbeans bij mij direct een rode markering liet zien op die else statement.
Met andere woorden zit een goede PHP editor vol vernuft om jou te helpen. En als er dit soort slordigheidjes blijken te zijn dan is het vaak zo dat er geen php editor gebruikt wordt.
Oke ik ga het downloaden, bedankt voor de tip! Welke versie van NetBeans kan ik het beste downloaden op de NetBeans site (https://netbeans.apache.org/download/). De Apache NetBeans 11 feature update 3 (NB 11.3) versie?
,groetjes Sem