Fout met returnen
dit PHP login script geeft geen foutmelding, maar het doet het voor een deel niet.
De functie SelectFromDb() doet niks met de variabele $resultInt en $resultArray
De variabelen bestaan niet als ik ze controleer met isset()
Dit is het probleem, als deze niet bestaan kan het natuurlijk niet verder gaan.
Wat is hier dus verkeerd gedaan? Ik heb al iets met return geprobeerd in de functie.
Het gaat er dus om dat er niets met deze 2 variabelen wordt gedaan.
Als er vervolgens met een if statement wordt gecontroleerd of $resultInt 1 is, dan geeft dat dus false, omdat $resultInt niet bestaat.
Daarom doet hij altijd de melding "Onjuiste combinatie van gebruikersnaam en wachtwoord" geven.
Dus ook als je inlogt met de juiste gegevens.
Hier is mijn script:
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
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
<?PHP
session_start();
include "connect.php";
$Database = new Database;
$Database->Connect();
class Login {
public function CheckFields() {
if(!empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
return 3;
} else if(empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
return 2;
} else if(!empty($_POST['emailadres']) && empty($_POST['wachtwoord'])) {
return 1;
} else {
return 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);
return $resultInt;
return $resultArray;
}
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() {
$fieldStatus = $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'];
unset($_SESSION['loginError']);
}
?>
<form method="post" action="">
Emailadres: <input type="text" name="emailadres"><br>
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'])) {
return 3;
} else if(empty($_POST['emailadres']) && !empty($_POST['wachtwoord'])) {
return 2;
} else if(!empty($_POST['emailadres']) && empty($_POST['wachtwoord'])) {
return 1;
} else {
return 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);
return $resultInt;
return $resultArray;
}
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() {
$fieldStatus = $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'];
unset($_SESSION['loginError']);
}
?>
<form method="post" action="">
Emailadres: <input type="text" name="emailadres"><br>
Wachtwoord: <input type="password" name="wachtwoord">
<input type="submit" name="login" value="Log in">
</form>
De class die bovenaan het script wordt aangeroepen komt uit connect.php, en maakt verbinding met de database.
Gewijzigd op 15/10/2012 19:28:26 door Jan terhuijzen
return betekent letterlijk 'terugkeren'. ofwel verlaat de functie en keer terug naar de regel waar de functie werd aangeroepen. de tweede return in de function SelectFromDb wordt dus nooit uitgevoerd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
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);
return $resultInt;
return $resultArray; // deze code wordt nooit uitgevoerd
}
?>
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);
return $resultInt;
return $resultArray; // deze code wordt nooit uitgevoerd
}
?>
En dan nog iets, als ik een echo in de functie SelectFromDb() zet, dan wordt die niet uitgevoerd. Het lijkt dus net alsof de hele functie het niet doet.
Gewijzigd op 15/10/2012 19:37:40 door jan terhuijzen
En als je dit doet:
Dan komt toch de waarde van beide variabelen door elkaar in $resultInt ?
Ofzo... Ik weet het niet.
Of ik moet van deze functie gewoon 2 aparte functies maken.
mysql_fetch_assoc levert JE MAXIMAAL maar één rij met kolomwaardes op. om alle rijen te doorlopen zul je iets moeten doen als
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}
?>
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}
?>
Toevoeging op 15/10/2012 19:52:02:
om kort door de bocht te gaan, regel 27 en 30 moeten er uit. je kunt hiervoor gewoon desnoods een nieuwe functie maken.
Toevoeging op 15/10/2012 19:54:51:
als de hele functie niet uitgevoerd wordt dan wordt ie niet aangeroepen. waarschijnlijk geeft
dan een false en wordt er door gesprongen naar regel 69 en dan wordt de aanroep op regel 54 dus overgeslagen
Toevoeging op 15/10/2012 20:10:18:
Nog één ding: mysql_fetch_assoc($query); geeft een false als er geen rij wordt teruggegeven. $resultArray is in dat geval dus ook false bij het verlaten van de functie. Dus je kunt gewoon testen door
Gewijzigd op 15/10/2012 19:58:49 door Frank Nietbelangrijk