Error laten verdwijnen
Hoe kan ik zorgen dat een error verdwijnt als je de pagina reload, zonder AJAX te gebruiken. Want nu blijft de error als je ctrl+r gebruikt omdat die dan de POST opnieuw doet, maar ik wil juist dat dit niet kan. Atm heb ik nog geen code, maar hier had ik eerder een probleem mee. Ik zal code toevoegen als ik 't heb. ;)
Edit:
Wellicht bedoel je de POST refresh die opnieuw wordt uitgevoerd.
Je kan d.m.v. een header("Location: /link.php"); iemand door-/terugsturen, daarmee vervalt de POST.
Gewijzigd op 03/01/2017 11:25:13 door E vH
Ja, maar dan reload page bv. na 3 seconden, misschien heeft die gene dan al informatie ingevuld wat dan weg is.
Dan is mijn oplossing, ZONDER ajax en heeft het niks t emaken met "reloaden" na 3 seconden.
Post relevante code en we kunnen verder kijken :)
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
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
<?php
session_start(); // START SESSION \\
// INCLUDE SOME FILES \\
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/init.php';
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/functions.php';
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/login.php';
if (empty($_CONFIG['configuration'])) {
header('Location: /configuration');
exit();
}
if ($_CONFIG['configuration'] == 1) {
if(empty($_CONFIG['installation'])) {
if($_CONFIG['language'] == "nl") {
header('Location: /installeren');
} else {
header('Location: /installation');
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Welkom - <?=$_CONFIG['company'];?></title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="stylesheet" href="paneel/assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
<link rel="stylesheet" href="paneel/assets/css/paneel.css">
<link rel="stylesheet" href="paneel/assets/plugins/iCheck/square/blue.css">
</head>
<body class="hold-transition login-page">
<div style="margin-top: 40px;" class="login-box">
<div class="login-logo">
<a href="/"><b><?=$_CONFIG['company']?></b></a>
</div>
<div class="login-box-body">
<p class="login-box-msg">Login om je sessie te starten</p>
<?php if (!empty($loginerrornl)) { echo '<p>'.$loginerrornl.'</p>'; } ?>
<?php if (!empty($loginduccesnl)) { echo '<p>'.$loginsuccesnl.'</p>'; } ?>
<form action="" method="post">
<div class="form-group has-feedback">
<input type="text" name="username" class="form-control" placeholder="Gebruikersnaam">
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" name="password" class="form-control" placeholder="Wachtwoord">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox icheck">
<label class="">
<div class="icheckbox_square-blue" aria-checked="false" aria-disabled="false" style="position: relative;"><input type="checkbox" style="position: absolute; top: -20%; left: -20%; display: block; width: 140%; height: 140%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;"><ins class="iCheck-helper" style="position: absolute; top: -20%; left: -20%; display: block; width: 140%; height: 140%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;"></ins></div> Onthoud mijn gegevens
</label>
</div>
</div>
<div class="col-xs-4">
<button style="padding-left: 5px;" name="login" type="submit" class="btn btn-primary btn-block btn-flat">Inloggen</button>
</div>
</div>
</form>
<div class="social-auth-links text-center">
<p>- OF -</p>
<a href="#" class="btn btn-block btn-social btn-facebook btn-flat"> Maak een nieuw account aan!</a>
<a href="#" class="btn btn-block btn-social btn-google btn-flat"> Ik ben mijn wachtwoord vergeten!</a>
</div>
</div>
<p style="text-align: center; margin-top: 10px; font-size: 13pt;">Copyright <?=date('Y');?> <b><?=$_CONFIG['company']?></b></p>
<p style="text-align: center; margin-top: -5px;"><i>Alle rechten voorbehouden aan de rechtmatige eigenaar.</i></p>
</div>
<script src="paneel/assets/plugins/jQuery/jquery-2.2.3.min.js"></script>
<script src="paneel/assets/bootstrap/js/bootstrap.min.js"></script>
<script src="paneel/assets/plugins/iCheck/icheck.min.js"></script>
<script>
$(function () {
$('input').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass: 'iradio_square-blue',
increaseArea: '20%'
});
});
</script>
</body>
</html>
session_start(); // START SESSION \\
// INCLUDE SOME FILES \\
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/init.php';
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/functions.php';
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/login.php';
if (empty($_CONFIG['configuration'])) {
header('Location: /configuration');
exit();
}
if ($_CONFIG['configuration'] == 1) {
if(empty($_CONFIG['installation'])) {
if($_CONFIG['language'] == "nl") {
header('Location: /installeren');
} else {
header('Location: /installation');
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Welkom - <?=$_CONFIG['company'];?></title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="stylesheet" href="paneel/assets/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css">
<link rel="stylesheet" href="paneel/assets/css/paneel.css">
<link rel="stylesheet" href="paneel/assets/plugins/iCheck/square/blue.css">
</head>
<body class="hold-transition login-page">
<div style="margin-top: 40px;" class="login-box">
<div class="login-logo">
<a href="/"><b><?=$_CONFIG['company']?></b></a>
</div>
<div class="login-box-body">
<p class="login-box-msg">Login om je sessie te starten</p>
<?php if (!empty($loginerrornl)) { echo '<p>'.$loginerrornl.'</p>'; } ?>
<?php if (!empty($loginduccesnl)) { echo '<p>'.$loginsuccesnl.'</p>'; } ?>
<form action="" method="post">
<div class="form-group has-feedback">
<input type="text" name="username" class="form-control" placeholder="Gebruikersnaam">
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" name="password" class="form-control" placeholder="Wachtwoord">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox icheck">
<label class="">
<div class="icheckbox_square-blue" aria-checked="false" aria-disabled="false" style="position: relative;"><input type="checkbox" style="position: absolute; top: -20%; left: -20%; display: block; width: 140%; height: 140%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;"><ins class="iCheck-helper" style="position: absolute; top: -20%; left: -20%; display: block; width: 140%; height: 140%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;"></ins></div> Onthoud mijn gegevens
</label>
</div>
</div>
<div class="col-xs-4">
<button style="padding-left: 5px;" name="login" type="submit" class="btn btn-primary btn-block btn-flat">Inloggen</button>
</div>
</div>
</form>
<div class="social-auth-links text-center">
<p>- OF -</p>
<a href="#" class="btn btn-block btn-social btn-facebook btn-flat"> Maak een nieuw account aan!</a>
<a href="#" class="btn btn-block btn-social btn-google btn-flat"> Ik ben mijn wachtwoord vergeten!</a>
</div>
</div>
<p style="text-align: center; margin-top: 10px; font-size: 13pt;">Copyright <?=date('Y');?> <b><?=$_CONFIG['company']?></b></p>
<p style="text-align: center; margin-top: -5px;"><i>Alle rechten voorbehouden aan de rechtmatige eigenaar.</i></p>
</div>
<script src="paneel/assets/plugins/jQuery/jquery-2.2.3.min.js"></script>
<script src="paneel/assets/bootstrap/js/bootstrap.min.js"></script>
<script src="paneel/assets/plugins/iCheck/icheck.min.js"></script>
<script>
$(function () {
$('input').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass: 'iradio_square-blue',
increaseArea: '20%'
});
});
</script>
</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
35
36
37
38
39
40
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
<?php
$loginerrornl = '';
$loginerroren = '';
$loginsuccesnl = '';
$loginsuccesen = '';
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']);
if (isset($_POST['login'])) { // CHECK IF THERE'S A LOGIN REQUEST \\
// PREVEND SQL INJECTIONS \\
$username = $mysqli->real_escape_string($_POST['username']);
$password = $_POST['password'];
if (empty($username) || empty($password)) {
$loginerrornl = 'Vul alstublieft alle velden in.';
$loginerroren = 'Please fill in all fields.';
} else {
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']);
$table = $prefix.'users';
$result = $mysqli->query("SELECT * FROM `$table` WHERE `username`='$username'");
if(FALSE === $result) {
$loginerrornl = 'Er is een fout opgetreden.';
$loginerroren = 'There is an error occurred.';
exit();
}
$row = $result->fetch_assoc();
if ($username == $row['username']) {
if (password_verify($password, $row['password'])) {
$loginsuccesnl = 'U bent met succes ingelogd.';
$loginsuccesen = 'You are logged in successfully.';
} else {
$loginerrornl = 'Foutive login gegevens.';
$loginerroren = 'Wrong login details.';
}
} else {
$loginerrornl = 'Foutive login gegevens.';
$loginerroren = 'Wrong login details.';
}
}
}
?>
$loginerrornl = '';
$loginerroren = '';
$loginsuccesnl = '';
$loginsuccesen = '';
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']);
if (isset($_POST['login'])) { // CHECK IF THERE'S A LOGIN REQUEST \\
// PREVEND SQL INJECTIONS \\
$username = $mysqli->real_escape_string($_POST['username']);
$password = $_POST['password'];
if (empty($username) || empty($password)) {
$loginerrornl = 'Vul alstublieft alle velden in.';
$loginerroren = 'Please fill in all fields.';
} else {
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']);
$table = $prefix.'users';
$result = $mysqli->query("SELECT * FROM `$table` WHERE `username`='$username'");
if(FALSE === $result) {
$loginerrornl = 'Er is een fout opgetreden.';
$loginerroren = 'There is an error occurred.';
exit();
}
$row = $result->fetch_assoc();
if ($username == $row['username']) {
if (password_verify($password, $row['password'])) {
$loginsuccesnl = 'U bent met succes ingelogd.';
$loginsuccesen = 'You are logged in successfully.';
} else {
$loginerrornl = 'Foutive login gegevens.';
$loginerroren = 'Wrong login details.';
}
} else {
$loginerrornl = 'Foutive login gegevens.';
$loginerroren = 'Wrong login details.';
}
}
}
?>
"Want nu blijft de error als je ctrl+r gebruikt omdat die dan de POST opnieuw doet"
Euhm, je maakt overal een variabele aan, om JUIST een melding te tonen, zodra er een POST wordt gedaan.
Je hebt zelfs een variabele wanneer men juist is ingelogd.
"maar ik wil juist dat dit niet kan"
Wat wil je dan dat die wel doet?
Edit: regel 45, je gebruikt loginduccesnl, ik neem aan dat je loginsuccesnl bedoelt.
Gewijzigd op 03/01/2017 12:56:14 door E vH
Ja klopt, maar als ik de persoon de pagina reload, ook met ctrl+r dat de error verdwijnd. Nu als ik de pagina reload blijft de error staan totdat ik in de adresbalk het selecteer en op enter druk.
Als alles goed gaat na de validatie, dan kan je het beste een redirect doen met:
header("Location: /link.php");
Zorg er dan wel voor dat je geen HTML-output of witregels er voor hebt staan.
Gewijzigd op 03/01/2017 13:03:59 door - Ariën -
Ja maar 't is de bedoeling dat de error verdwijnd na reload ;P
Elke keer zodra er een "submit" gedaan word, dan controleert login.php de velden.
Een refresh, is tevens een submit en dus een ctrl+r ook.
Wat wil je precies bereiken?
--> Zodra men een post doet, moet er een melding komen.
--> Zodra men refresht --> Logischerwijs voer je dan je controles opnieuw uit.
Wanneer komt dan het moment dat er GEEN melding getoond moet worden dan?
Gewijzigd op 03/01/2017 13:05:26 door - Ariën -
Toevoeging op 03/01/2017 13:08:40:
Elmar vH op 03/01/2017 13:03:57:
... dat is toch ook precies wat je nu uitvoert...
Elke keer zodra er een "submit" gedaan word, dan controleert login.php de velden.
Een refresh, is tevens een submit en dus een ctrl+r ook.
Wat wil je precies bereiken?
--> Zodra men een post doet, moet er een melding komen.
--> Zodra men refresht --> Logischerwijs voer je dan je controles opnieuw uit.
Wanneer komt dan het moment dat er GEEN melding getoond moet worden dan?
Elke keer zodra er een "submit" gedaan word, dan controleert login.php de velden.
Een refresh, is tevens een submit en dus een ctrl+r ook.
Wat wil je precies bereiken?
--> Zodra men een post doet, moet er een melding komen.
--> Zodra men refresht --> Logischerwijs voer je dan je controles opnieuw uit.
Wanneer komt dan het moment dat er GEEN melding getoond moet worden dan?
als je reload, dan moet die geen post meer doen
<form method="post" action="login.php">
en de include er bovenin weghalen.
Dan krijg je de volgende route:
--> men komt binnen op index.php
--> drukt op submit
--> form stuurt je naar login.php
--> in login.php kun je desnoods een sessie aanmaken met error.
--> header location gebruiken naar index.php
--> Indien sessie bestaat --> error tonen en unset gelijk de sessie
men kan dan refreshen totdat ze een ons wegen... er wordt geen post gedaan.. en de sessie is direct leeg gemaakt.
Quote:
Indien sessie bestaat --> error tonen en unset gelijk de sessie
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
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
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") { // er is ge-POST
$errors = array(); // maak array aan.
// validatie controleren
if(trim($_POST['naam']='')) { // naam is niet ingevuld
$errors[] = "Naam is niet ingevuld";
}
if(trim($_POST['plaats']='')) { // plaats is niet ingevuld
$errors[] = "Plaats is niet ingevuld";
}
if(trim($_POST['emailadres']='')) { // emailadres is niet ingevuld
$errors[] = "E-mailadres is niet ingevuld";
}
if(count($errors)==0) { // er zijn geen errors in de error-array $errors geplaatst
// Je eigen vrijheid: Doe hier je afhandeling. Schrijf het naar de database, stuur het per mail of wat dan ook.
} else {
echo 'Je formulier is niet goed ingevuld:';
echo '<ul>'; // lijstje in HTML maken
foreach($errors as $error) { // loop de array af, en laat alle foutmeldingen zien die er zijn.
echo '<li>'.$error.'</li>'; // elke error is een list-element
}
echo '</ul>'; // lijstje afsluiten
}
?>
if($_SERVER['REQUEST_METHOD'] == "POST") { // er is ge-POST
$errors = array(); // maak array aan.
// validatie controleren
if(trim($_POST['naam']='')) { // naam is niet ingevuld
$errors[] = "Naam is niet ingevuld";
}
if(trim($_POST['plaats']='')) { // plaats is niet ingevuld
$errors[] = "Plaats is niet ingevuld";
}
if(trim($_POST['emailadres']='')) { // emailadres is niet ingevuld
$errors[] = "E-mailadres is niet ingevuld";
}
if(count($errors)==0) { // er zijn geen errors in de error-array $errors geplaatst
// Je eigen vrijheid: Doe hier je afhandeling. Schrijf het naar de database, stuur het per mail of wat dan ook.
} else {
echo 'Je formulier is niet goed ingevuld:';
echo '<ul>'; // lijstje in HTML maken
foreach($errors as $error) { // loop de array af, en laat alle foutmeldingen zien die er zijn.
echo '<li>'.$error.'</li>'; // elke error is een list-element
}
echo '</ul>'; // lijstje afsluiten
}
?>
Het is handig voor een uitgebreid formulier. Voor een inlogsysteem zou ik het niet zo snel doen, omdat je toch maar één validatie error wilt tonen, en dat is dat 'de gegevens fout zijn' of 'dat het niet gelukt is om technische redenen'.
vervolgens kun je een sessie aanmaken net zoals variabelen:
en dan ophalen:
meer info: http://www.w3schools.com/php/php_sessions.asp
Gewijzigd op 03/01/2017 13:55:53 door - Rob -
Hoe onthoud je dat iemand succesvol is ingelogd? Dit zou moeten gebeuren in het if-blok in regel 27-30.