mysqli toch niet simpel vind ik
maar stoot toch op een paar problemen
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
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
<?php
include("admin/entrance/login.inc.php"); // hier zit de var $link
function to_login () {
header ('Location: http://***/index.php?fout=1' ); // indien je fout user-pasw combi geeft hij error boodschap
}
function check_login ($username, $password) {
$sql = "
SELECT id
FROM admin
WHERE username = '" . mysqli_real_escape_string ($link,$username) . "'
AND password = SHA1('" . mysqli_real_escape_string ($link,$password) . "')
";
if ($res = mysqli_query($link,$sql)) {
if (mysqli_num_rows ($link,$res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysqli_fetch_assoc($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}
// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>
include("admin/entrance/login.inc.php"); // hier zit de var $link
function to_login () {
header ('Location: http://***/index.php?fout=1' ); // indien je fout user-pasw combi geeft hij error boodschap
}
function check_login ($username, $password) {
$sql = "
SELECT id
FROM admin
WHERE username = '" . mysqli_real_escape_string ($link,$username) . "'
AND password = SHA1('" . mysqli_real_escape_string ($link,$password) . "')
";
if ($res = mysqli_query($link,$sql)) {
if (mysqli_num_rows ($link,$res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysqli_fetch_assoc($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}
// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>
nu stuurt hij mij altijd naar de header...
Gewijzigd op 15/11/2015 16:24:45 door Chris Bosmans
Dan weet je welke route het script doorloopt.
Gewijzigd op 15/11/2015 16:32:47 door - Ariën -
deze pagina wordt aangestuurd van een form waar user en paswoord ingevuld wordt
de to_login wordt aangesproken als er geen goede combinatie wordt gegeven in het formulier.
ik heb niks aan de code veranderd buiten de msqli functies.
Verder zou ik ook een melding tonen als de voorwaarde van mysqli_num_rows geen 1 is. je kan bijvoorbeeld een foutmelding meegeven in die functie, zodat je foutmeldingen kan tonen op je formulier, met de reden waarom het inloggen niet gelukt is.
Gewijzigd op 15/11/2015 16:53:57 door - Ariën -
Zet (nogmaals) het melden + weergeven van fouten eens aan.
Ook zou je een "wrapper" voor je database-functies kunnen schrijven en/of (zoals tevens eerder voorgesteld) de object georienteerde schrijfwijze kunnen toepassen zodat je niet elke keer $link hoeft toe te voegen.
Bezint eer gij begint.
Enne: een header('Location: ...') zonder navolgend exit; statement... Dat is vragen om ongelukken/veiligheidsgaten.
header('Location: ...') transporteert je niet direct automagisch naar de nieuwe locatie, maar dat gebeurt pas aan het einde van het script. Alle code volgend op header('Location: ...') zal dus gewoon uitgevoerd worden en na afloop zul je doorgestuurd worden naar de nieuwe locatie.