Geen foutmelding en geen loginproces...
Waar moet ik de fout gaan zoeken?
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
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
<?php
include('Inc/config.inc.php');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
require('Inc/db-connection.php');
$errors=array();
// Controleer het mailadres:
$mailadres = filter_var($_POST['mailadres'], FILTER_VALIDATE_EMAIL);
if ((empty($mailadres)) || (!filter_var($mailadres, FILTER_VALIDATE_EMAIL))) {
$errors['$merror'] = "Jij bent vergeten your mailadres in te typen of het maildres formaat is niet correct";
}
// Controleer het wachtwoord:
$wachtwoord = filter_var($_POST['wachtwoord'], FILTER_SANITIZE_STRING);
if (empty($wachtwoord)) {
$errors['$werror'] ="Wachtwoord mag niet leeg zijn";
}
if (count($errors) == 0) {
// Retrieve the user_id, psword, first_name and user_level for that// email/password combination
$query = "SELECT BehandelaarID, Wachtwoord, Voornaam, Achternaam, GebruikerLevel FROM Behandelaars WHERE Mailadres=?";
$q= mysqli_stmt_init($dbc);
if (!mysqli_stmt_prepare($q, $query)) {
echo "SQL statement failed";
} else {
// bind $id to SQL Statement
mysqli_stmt_bind_param($q,"s", $mailadres);
//execute query
mysqli_stmt_execute($q);
$result = mysqli_stmt_get_result($q);
$row = mysqli_fetch_array($result, MYSQL_NUM);
if (mysqli_num_rows($result) == 1){
//als er een DB record is gevonden en matcht met de gebruikesinput, doe dan het volgende
//start de sessie, haal de record de uit de DB en zet ze in een array
if (password_verify($wachtwoord, $row[1])){
session_start();
//verzeker dat gebruikerslevel een integer is.
$_SESSION['GebruikerLevel'] = (int) $row[3];
// Use a ternary operation to set the URL
$url = ($_SESSION['GebruikerLevel'] === 1 ) ? "index.php" : "admin.php";
header('Location: ' . $url);
} else { // geen wachtwoord match gevonden
$errors['$gwnmatch']="Jouw wachtwoord klopt niet";
}
} else { // geen mail match gevonden
$errors['$gmmatch'] = "Er zijn geen records gevonden met dit mailadres";
}
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="Inc/main.css">
<title>Logina pagina</title>
</head>
<body>
<p>Login pagina</p>
<?php
if (isset($errors['$gwnmatch'])) {
echo $errors['$gwnmatch'];
}
if (isset($errors['$gmmatch'])) {
echo $errors['$gmmatch'];
}
?>
<form ation="login.php" method="POST">
<label for="mailadres">E-mailadres:</label><br>
<input type="text" id="mailadres" name="mailadres" required><span class="regp"><?php if (isset($errors['$merror'])) { echo $errors['$merror']; } ?></span></br>
<label for="wachtwoord">Wachtwoord:</label><br>
<input type="password" id="wachtwoord" name="wachtwoord" required><span class="regp"><?php if (isset($errors['$werror'])) { echo $errors['$werror']; } ?></span></br>
<input type="submit" value="Inloggen">
<p>Nog geen geregistreerd account?<a href="register.php">Registreer</a></p>
</form>
</body>
</html>
include('Inc/config.inc.php');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
require('Inc/db-connection.php');
$errors=array();
// Controleer het mailadres:
$mailadres = filter_var($_POST['mailadres'], FILTER_VALIDATE_EMAIL);
if ((empty($mailadres)) || (!filter_var($mailadres, FILTER_VALIDATE_EMAIL))) {
$errors['$merror'] = "Jij bent vergeten your mailadres in te typen of het maildres formaat is niet correct";
}
// Controleer het wachtwoord:
$wachtwoord = filter_var($_POST['wachtwoord'], FILTER_SANITIZE_STRING);
if (empty($wachtwoord)) {
$errors['$werror'] ="Wachtwoord mag niet leeg zijn";
}
if (count($errors) == 0) {
// Retrieve the user_id, psword, first_name and user_level for that// email/password combination
$query = "SELECT BehandelaarID, Wachtwoord, Voornaam, Achternaam, GebruikerLevel FROM Behandelaars WHERE Mailadres=?";
$q= mysqli_stmt_init($dbc);
if (!mysqli_stmt_prepare($q, $query)) {
echo "SQL statement failed";
} else {
// bind $id to SQL Statement
mysqli_stmt_bind_param($q,"s", $mailadres);
//execute query
mysqli_stmt_execute($q);
$result = mysqli_stmt_get_result($q);
$row = mysqli_fetch_array($result, MYSQL_NUM);
if (mysqli_num_rows($result) == 1){
//als er een DB record is gevonden en matcht met de gebruikesinput, doe dan het volgende
//start de sessie, haal de record de uit de DB en zet ze in een array
if (password_verify($wachtwoord, $row[1])){
session_start();
//verzeker dat gebruikerslevel een integer is.
$_SESSION['GebruikerLevel'] = (int) $row[3];
// Use a ternary operation to set the URL
$url = ($_SESSION['GebruikerLevel'] === 1 ) ? "index.php" : "admin.php";
header('Location: ' . $url);
} else { // geen wachtwoord match gevonden
$errors['$gwnmatch']="Jouw wachtwoord klopt niet";
}
} else { // geen mail match gevonden
$errors['$gmmatch'] = "Er zijn geen records gevonden met dit mailadres";
}
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="Inc/main.css">
<title>Logina pagina</title>
</head>
<body>
<p>Login pagina</p>
<?php
if (isset($errors['$gwnmatch'])) {
echo $errors['$gwnmatch'];
}
if (isset($errors['$gmmatch'])) {
echo $errors['$gmmatch'];
}
?>
<form ation="login.php" method="POST">
<label for="mailadres">E-mailadres:</label><br>
<input type="text" id="mailadres" name="mailadres" required><span class="regp"><?php if (isset($errors['$merror'])) { echo $errors['$merror']; } ?></span></br>
<label for="wachtwoord">Wachtwoord:</label><br>
<input type="password" id="wachtwoord" name="wachtwoord" required><span class="regp"><?php if (isset($errors['$werror'])) { echo $errors['$werror']; } ?></span></br>
<input type="submit" value="Inloggen">
<p>Nog geen geregistreerd account?<a href="register.php">Registreer</a></p>
</form>
</body>
</html>
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
- Ariën - op 01/02/2021 00:01:07:
Haal de single-quotes eens weg:
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
Die single-quotes gebruik ik ook bij mijn andere formulier en werkt daar prima. Ik zie dus geen relatie tot dat het loginproces niet werkt om eerlijk te zijn. Verder gebruik ik een error['vnerror'] als een identifier om naast voornaam input de foutmelding weer te geven
Toevoeging op 01/02/2021 14:47:32:
Adoptive Solution op 01/02/2021 12:32:59:
Welk deel ontbreek er dan? Dezelfde code gebruik ik bijv op registratiepagina werkt daar prima...
Gewijzigd op 01/02/2021 14:48:49 door Mohamed nvt
Verder staat er in je code 'ation' in plaats van 'action'.
- Ariën - op 01/02/2021 14:54:04:
Die single-quotes horen er niet als je in de index een variabele gebruikt. Anders zal je een warning krijgen.
Verder staat er in je code 'ation' in plaats van 'action'.
Verder staat er in je code 'ation' in plaats van 'action'.
Oh dat wist ik niet. Tnx!
Die Ation heb ik over het hoofd gezien.
Ik heb het nu aangepast en na het invullen van de juiste gegevens klik op verzenden en ik krijg een wit loginpagina en geen redirect en geen foutmelding helaas...
Enig idee waar ik de fout moet gaan zoeken?
In het eerste geval raad ik aan om je error_log erbij te pakken
In het tweede geval raad ik aan om defensief te werken en elk statement met een true of false af te handelen. Blijkbaar evalueert je statement in een true of false waarbij je één van beiden niet controleert. En dan gebeurt er in die statement niks waarna je script weer verder gaat. Het neergooien van een aantal echo's helpt hierbij om te zien welk pad er wordt doorlopen.
Gewijzigd op 01/02/2021 15:15:19 door - Ariën -
- Ariën - op 01/02/2021 00:01:07:
Haal de single-quotes eens weg:
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
Ik vermoed dat niet de single quotes wegmoeten, maar het $-teken. Dat hoort waarschijnlijk geen variabele te zijn. Dus: $errors['merror']
- Ariën - op 01/02/2021 15:14:21:
Een hele hagel-witte pagina? Of een normale pagina met lege inhoud?
In het eerste geval raad ik aan om je error_log erbij te pakken
In het tweede geval raad ik aan om defensief te werken en elk statement met een true of false af te handelen. Blijkbaar evalueert je statement in een true of false waarbij je één van beiden niet controleert. En dan gebeurt er in die statement niks waarna je script weer verder gaat. Het neergooien van een aantal echo's helpt hierbij om te zien welk pad er wordt doorlopen.
In het eerste geval raad ik aan om je error_log erbij te pakken
In het tweede geval raad ik aan om defensief te werken en elk statement met een true of false af te handelen. Blijkbaar evalueert je statement in een true of false waarbij je één van beiden niet controleert. En dan gebeurt er in die statement niks waarna je script weer verder gaat. Het neergooien van een aantal echo's helpt hierbij om te zien welk pad er wordt doorlopen.
Ik krijg een hagel-witte pagina en helemaal geen errors zowel niet in mijn eigen error_handler als die van mijn hosting.
Ik ga nogmaals kijken naar de logica in het pagina..
Toevoeging op 01/02/2021 22:38:59:
Ozzie PHP op 01/02/2021 16:07:45:
Ik vermoed dat niet de single quotes wegmoeten, maar het $-teken. Dat hoort waarschijnlijk geen variabele te zijn. Dus: $errors['merror']
- Ariën - op 01/02/2021 00:01:07:
Haal de single-quotes eens weg:
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
$errors[$merror]
Maar waarom gebruik je variabelen in je index?
Een error is toch een error?
Ik vermoed dat niet de single quotes wegmoeten, maar het $-teken. Dat hoort waarschijnlijk geen variabele te zijn. Dus: $errors['merror']
Het vreemde is dat ik $errors['$merror'] gebruik bij een andere pagina, nl het registratie pagina en daar werkt het prima en op dit pagina met een $ of zonder krijg ik een witte pagina en geen errors helaas.
Gewijzigd op 01/02/2021 22:43:16 door - Ariën -
- Ariën - op 01/02/2021 22:43:02:
Waar komt $merror vandaan?
Nu ik nogmaals over na denk heb je eigenlijk wel gelijk in, want deze variabel is nergens aangemaakt en daarom heb ik het verwijderd.
Dus heb ik nu staan:
Dan lijkt het wel raadzaam om in die array die errors te plaatsen.
Een voordeel: Je kan ze makkelijk vertalen.
AH01215: Stack trace:: /nergiz_nl/login.php
AH01215: #0 {main}: /nergiz_nl/login.php
AH01215: thrown in /nergiz_nl/login.php on line 30: /nergiz_nl/login.php
op lijn 30 heb ik staan:
van regel 21 t/m 31 heb ik staan de gehele prepared statement
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$q= mysqli_stmt_init($dbc);
if (!mysqli_stmt_prepare($q, $query)) {
echo "SQL statement failed";
} else {
// bind $mailadres to SQL Statement
mysqli_stmt_bind_param($q,"s", $mailadres);
//execute query
mysqli_stmt_execute($q);
$result = mysqli_stmt_get_result($q);
$row = mysqli_fetch_array($result, MYSQL_NUM);
if (!mysqli_stmt_prepare($q, $query)) {
echo "SQL statement failed";
} else {
// bind $mailadres to SQL Statement
mysqli_stmt_bind_param($q,"s", $mailadres);
//execute query
mysqli_stmt_execute($q);
$result = mysqli_stmt_get_result($q);
$row = mysqli_fetch_array($result, MYSQL_NUM);
Ik heb even op het net gezocht en ik denk misschien zit er een fout in de versie van PHP van mijn hostingbedrijf. Ik gebruik daar 7.4 aanbevolen.
Wat denken jullie?
Staat er niet meer bij dan dat? Ik mis de foutmelding zelf.
Normaal moet je ook in de log de foutmelding zien, zoals Ozzie al zegt.
Volgens antwoorden op het net moet er bepaalde driver geïnstalleerd zijn, maar ikzelf kan dit niet doen en ik zit bij Strato.
Betekent deze foutmelding dat ik contact moet opnemen met Strato om dit op te lossen?
Ja, welke PHP-versie heb je?
- Ariën - op 02/02/2021 15:33:53:
Ja, welke PHP-versie heb je?
Volgens Strato gebrui ik:
Deze PHP-versie gebruik je nu: PHP 7.4
Wat vinden jullie hiervan?
Afscheid nemen van Strato of hebben zij gelijk?
Onderstaande is hun reactie:
STRATO verzorgd inderdaad de hosting van uw website, echter bieden bij problemen geen support met betrekking tot de de configuratie van de website. In dit soort gevallen kunnen we alleen algemene tips geven.
Bij een shared webhosting pakket zijn de instellingen van PHP gelimiteerd en deze kan je niet aanpassen.
mysqli_stmt_get_result() is overigens een gewone functie.
Vraag ze eens met welke reden die functie niet werkt?
Staat deze ook in phpinfo()'s informatie over de disabled functions?
Gewijzigd op 03/02/2021 19:18:27 door - Ariën -
- Ariën - op 03/02/2021 19:17:32:
Ondersteunen die lui dus mysqli voor de helft?
mysqli_stmt_get_result() is overigens een gewone functie.
Vraag ze eens met welke reden die functie niet werkt?
Staat deze ook in phpinfo()'s informatie over de disabled functions?
mysqli_stmt_get_result() is overigens een gewone functie.
Vraag ze eens met welke reden die functie niet werkt?
Staat deze ook in phpinfo()'s informatie over de disabled functions?
Haha! Daar lijkt het wel op helaas.
Precies ik denk ook dat mysqli_stmt_get_result() een hele gewone functie is. Het ergste vind ik dat zij de schuld bij de configuratie van mijn website neerleggen ipv dat zij zeggen dat zij het niet ondersteunen voor welke reden dan ook.
Ik ga kijken met phpinfo() over de disabled functions.