Waarom werkt dit niet?
De classe boven aan het script is van connect.php en maakt verbinding met de database.
Als ik nu mijn script test, de velden emailadres en wachtwoord invul, en het formulier verzend dan gebeurt er niks.
Ik heb al hier en daar een echo er in gezet ter controle.
PHP geeft zelf geen foutmelding.
Het probleem is dat de functie CheckFields() niks doet, tenminste zo lijkt het.
Er gebeurt niks met de variabele $fieldStatus in de functie.
Er wordt dan bij de functie Submit() gecontroleerd welk nummertje $fieldStatus heeft, maar die is leeg.
Vervolgens wordt de functie LoginError() aangeroepen die dus ook niks kan omdat er een lege waarde wordt gegeven.
Hier is mijn code. Het kan ook een ander probleem zijn dan dat ik hier beschrijf natuurlijk.
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
session_start();
include "connect.php";
$Database = new Database;
$Database->Connect();
class Login {
public function CheckFields() {
if(!empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
$fieldStatus = 3;
} else if(empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
$fieldStatus = 2;
} else if(!empty($_POST['emailadres']) && empty($_POST['wachtwoord'])) {
$fieldStatus = 1;
} else {
$fieldStatus = 0;
}
}
public function SelectFromDb() {
$sql = "SELECT id,naam,email,emailbevestigd,wachtwoord,blokkade FROM gebruikers WHERE email='".mysql_real_escape_string($_POST['emailadres'])."' AND wachtwoord='".mysql_real_escape_string($_POST['wachtwoord'])."'";
$query = mysql_query($sql);
$resultInt = mysql_num_rows($query);
$resultArray = mysql_fetch_assoc($query);
}
public function LoginError($nummer) {
$errors = array();
$errors[0] = 'Vul je emailadres en wachtwoord in om in te loggen';
$errors[1] = 'Vul je wachtwoord in';
$errors[2] = 'Vul je emailadres in';
$errors[3] = 'Onjuiste combinatie van emailadres en wachtwoord';
$errors[4] = 'Je emailadres is nog niet bevestigd';
$errors[5] = 'Dit account is geblokkeerd, bij blokkering is de volgende reden opgegeven:'.$resultArray['blokkade'];
$_SESSION['loginError'] = $errors[$nummer];
//header('Location: login.php');
echo 'Fout '.$nummer.'<br>';
}
public function Submit() {
$this->CheckFields();
if($fieldStatus == 3) {
echo 'Velden 3<br>';
$this->SelectFromDb();
if($resultInt == 1) {
if($resultArray['emailbevestigd'] == 0) {
$this->LoginError(4);
} else {
if(!empty($resultArray['blokkade'])) {
$this->loginError(5);
$Database->Close();
} else {
header('Location: me.php');
}
}
} else {
$this->LoginError(3);
}
} else {
$this->LoginError($fieldStatus);
echo 'Fout met velden';
}
}
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$Login = new Login;
$Login->Submit();
}
if(isset($_SESSION['loginError'])) {
echo $_SESSION['loginError'];
}
?>
<form method="post" action="">
Emailadres: <input type="text" name="emailadres">
Wachtwoord: <input type="password" name="wachtwoord">
<input type="submit" name="login" value="Log in">
</form>
session_start();
include "connect.php";
$Database = new Database;
$Database->Connect();
class Login {
public function CheckFields() {
if(!empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
$fieldStatus = 3;
} else if(empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
$fieldStatus = 2;
} else if(!empty($_POST['emailadres']) && empty($_POST['wachtwoord'])) {
$fieldStatus = 1;
} else {
$fieldStatus = 0;
}
}
public function SelectFromDb() {
$sql = "SELECT id,naam,email,emailbevestigd,wachtwoord,blokkade FROM gebruikers WHERE email='".mysql_real_escape_string($_POST['emailadres'])."' AND wachtwoord='".mysql_real_escape_string($_POST['wachtwoord'])."'";
$query = mysql_query($sql);
$resultInt = mysql_num_rows($query);
$resultArray = mysql_fetch_assoc($query);
}
public function LoginError($nummer) {
$errors = array();
$errors[0] = 'Vul je emailadres en wachtwoord in om in te loggen';
$errors[1] = 'Vul je wachtwoord in';
$errors[2] = 'Vul je emailadres in';
$errors[3] = 'Onjuiste combinatie van emailadres en wachtwoord';
$errors[4] = 'Je emailadres is nog niet bevestigd';
$errors[5] = 'Dit account is geblokkeerd, bij blokkering is de volgende reden opgegeven:'.$resultArray['blokkade'];
$_SESSION['loginError'] = $errors[$nummer];
//header('Location: login.php');
echo 'Fout '.$nummer.'<br>';
}
public function Submit() {
$this->CheckFields();
if($fieldStatus == 3) {
echo 'Velden 3<br>';
$this->SelectFromDb();
if($resultInt == 1) {
if($resultArray['emailbevestigd'] == 0) {
$this->LoginError(4);
} else {
if(!empty($resultArray['blokkade'])) {
$this->loginError(5);
$Database->Close();
} else {
header('Location: me.php');
}
}
} else {
$this->LoginError(3);
}
} else {
$this->LoginError($fieldStatus);
echo 'Fout met velden';
}
}
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$Login = new Login;
$Login->Submit();
}
if(isset($_SESSION['loginError'])) {
echo $_SESSION['loginError'];
}
?>
<form method="post" action="">
Emailadres: <input type="text" name="emailadres">
Wachtwoord: <input type="password" name="wachtwoord">
<input type="submit" name="login" value="Log in">
</form>
De sessie loginError bevat de foutmelding die er wordt gegeven als er fout is ingelogd.
Dit is omdat de fout ook moet kunnen worden weergegeven op andere pagina's
Gewijzigd op 15/10/2012 16:01:47 door Jan terhuijzen
je zou in CheckFields(); de fieldStatus kunnen returnen en dan in submit doe je:
Het was idd een fout met het returnen
Gewijzigd op 15/10/2012 17:19:27 door jan terhuijzen
Let goed op de scope waar je variabele zich binnen bevindt. In jou geval is $fieldStatus alleen beschikbaar binnen de method scope.