Vraag bij php opdracht vwo 6
Ik heb een probleem. De bedoeling is dat je een melding krijgt op het inlogpagina als je iets verkeerd doet bij account aanmaken of bij het inloggen. Dit is gelukt door sessies te gebruiken. Maar het probleem is dat bij het herstarten/refreshen van de pagina de melding blijft staan, wat eigenlijk niet de bedoeling is.
Dit is de code voor de inlogpagina.
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
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
<?php
require("connection1.php");
session_start();
?>
<form action = "verwerking.php" method = "POST">
Gebruikersnaam:
<input type = "text" name = "gebruikersnaam"><br>
Wachtwoord:
<input type = "password" name = "wachtwoord"><br>
<input type = "submit" value = "Inloggen">
</form>
OF:
<form action = "accountaanmaken.php" method = "POST">
Gebruikersnaam:
<input type = "text" name = "gebruikersnaamnieuw"><br>
Wachtwoord:
<input type = "password" name = "wachtwoordnieuw"><br>
Wachtwoord controle:
<input type = "password" name = "wachtwoordcontrole"><br>
<input type = "submit" value = "Account Aanmaken">
</form>
<?php
$melding = $_SESSION['melding'];
if ($melding == "GB") {
echo "Deze gebruikersnaam bestaat al";
}
else if ($melding == "WNG") {
echo "De opgegeven wachtwoorden zijn niet gelijk aan elkaar";
}
else if ($melding == "VL") {
echo "Vul in elk veld iets in";
}
else if ($melding == "IN") {
echo "De gebruikersnaam of wachtwoord klopt niet";
}
else if ($melding == "S") {
echo "U heeft een account gemaakt. Log in om gebruik te maken<br> van onze services te maken";
}
?>
En dit is de code voor de verwerkingspagina van het inloggen:
<?php
session_start();
require("connection1.php");
$gebruiker = $_POST['gebruikersnaam'];
$wachtwoord = $_POST['wachtwoord'];
$adminquery = "SELECT *
FROM gebruikers
WHERE gebruikersnaam = '$gebruiker' AND wachtwoord = '$wachtwoord' AND admin = '1';";
$gebruikerquery = "SELECT *
FROM gebruikers
WHERE gebruikersnaam = '$gebruiker' AND wachtwoord = '$wachtwoord' AND admin = '0';";
$adminresultaat = mysqli_query($connectie1, $adminquery);
$gebruikerresultaat = mysqli_query($connectie1, $gebruikerquery);
if (mysqli_num_rows($adminresultaat)>0) {
$_SESSION['id'] = "2";
$_SESSION['username'] = $gebruiker;
include('admin.php');
$melding = "NULL";
$_SESSION['melding'] = $melding;
}
else if (mysqli_num_rows($gebruikerresultaat)>0) {
$_SESSION['id'] = "1";
$_SESSION['username'] = $gebruiker;
include('liedjeszoeken.php');
$melding = "NULL";
$_SESSION['melding'] = $melding;
}
else {
$melding = "IN";
$_SESSION['melding'] = $melding;
header('Location: inloggen.php');
exit;
}
?>
require("connection1.php");
session_start();
?>
<form action = "verwerking.php" method = "POST">
Gebruikersnaam:
<input type = "text" name = "gebruikersnaam"><br>
Wachtwoord:
<input type = "password" name = "wachtwoord"><br>
<input type = "submit" value = "Inloggen">
</form>
OF:
<form action = "accountaanmaken.php" method = "POST">
Gebruikersnaam:
<input type = "text" name = "gebruikersnaamnieuw"><br>
Wachtwoord:
<input type = "password" name = "wachtwoordnieuw"><br>
Wachtwoord controle:
<input type = "password" name = "wachtwoordcontrole"><br>
<input type = "submit" value = "Account Aanmaken">
</form>
<?php
$melding = $_SESSION['melding'];
if ($melding == "GB") {
echo "Deze gebruikersnaam bestaat al";
}
else if ($melding == "WNG") {
echo "De opgegeven wachtwoorden zijn niet gelijk aan elkaar";
}
else if ($melding == "VL") {
echo "Vul in elk veld iets in";
}
else if ($melding == "IN") {
echo "De gebruikersnaam of wachtwoord klopt niet";
}
else if ($melding == "S") {
echo "U heeft een account gemaakt. Log in om gebruik te maken<br> van onze services te maken";
}
?>
En dit is de code voor de verwerkingspagina van het inloggen:
<?php
session_start();
require("connection1.php");
$gebruiker = $_POST['gebruikersnaam'];
$wachtwoord = $_POST['wachtwoord'];
$adminquery = "SELECT *
FROM gebruikers
WHERE gebruikersnaam = '$gebruiker' AND wachtwoord = '$wachtwoord' AND admin = '1';";
$gebruikerquery = "SELECT *
FROM gebruikers
WHERE gebruikersnaam = '$gebruiker' AND wachtwoord = '$wachtwoord' AND admin = '0';";
$adminresultaat = mysqli_query($connectie1, $adminquery);
$gebruikerresultaat = mysqli_query($connectie1, $gebruikerquery);
if (mysqli_num_rows($adminresultaat)>0) {
$_SESSION['id'] = "2";
$_SESSION['username'] = $gebruiker;
include('admin.php');
$melding = "NULL";
$_SESSION['melding'] = $melding;
}
else if (mysqli_num_rows($gebruikerresultaat)>0) {
$_SESSION['id'] = "1";
$_SESSION['username'] = $gebruiker;
include('liedjeszoeken.php');
$melding = "NULL";
$_SESSION['melding'] = $melding;
}
else {
$melding = "IN";
$_SESSION['melding'] = $melding;
header('Location: inloggen.php');
exit;
}
?>
Vantevoren bedankt voor uw hulp. :)
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 08/11/2018 19:06:01 door - Ariën -
Je zou dit dus aan het begin van het verwerkscript kunnen doen nadat je de sessie hebt gestart/hebt voortgezet, bijvoorbeeld met unset(). Het maakt hierbij niet uit of $_SESSION['melding'] bestaat of niet.
Je zou dit ook op kunnen lossen door het hele loginformulier (inclusief boodschappen over foutmeldingen) weg te laten op het moment dat je al ingelogd bent.
Gewijzigd op 08/11/2018 17:25:11 door Thomas van den Heuvel
Om de fouten eruit te pikken kan je met count() kijken of de array errors groter is dan 0. In dat geval toon je een foreach, en lees je alles uit.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST") { // controleer of het formulier verstuurd is...
$errors = array(); // array initialiseren
// valideer de velden op simpele wijze, en als ze niet voldoen aan de invoer, stop de foutmeldingen in een array $errors[].
// Haal eerst in de velden met trim() de voor en/of achterlopende spaties weg. Dit voorkomt de spatie-spammers. Dan vergelijken we met een lege string.
if (trim($_POST['name']) == "") {
$errors[] = "Naam is niet ingevuld";
} elseif (trim($_POST['password']) == "")) {
$errors[] = "Het wachtwoord is vergeten";
// valideer verder je username en password met een nieuwe elseif
} else {
// hier je afhandeling. Plaats sessie omdat er ingelogd is.
}
?>
Hier je formulier plaatsen.
if ($_SERVER['REQUEST_METHOD'] == "POST") { // controleer of het formulier verstuurd is...
$errors = array(); // array initialiseren
// valideer de velden op simpele wijze, en als ze niet voldoen aan de invoer, stop de foutmeldingen in een array $errors[].
// Haal eerst in de velden met trim() de voor en/of achterlopende spaties weg. Dit voorkomt de spatie-spammers. Dan vergelijken we met een lege string.
if (trim($_POST['name']) == "") {
$errors[] = "Naam is niet ingevuld";
} elseif (trim($_POST['password']) == "")) {
$errors[] = "Het wachtwoord is vergeten";
// valideer verder je username en password met een nieuwe elseif
} else {
// hier je afhandeling. Plaats sessie omdat er ingelogd is.
}
?>
Hier je formulier plaatsen.
Ik weet niet welke cursus je volgt, maar onthoud wel dat je inlog-formulier gi-gan-tisch lek is, en dat je dit niet in de praktijk moet gebruiken zonder escaping met mysqli_real_escape_string()en een moderne vorm van password-hashing. Wat je dan moet doen is de wachtwoorden hashen met password_hash en controleren met password_verify.
Gewijzigd op 08/11/2018 19:20:32 door - Ariën -