Fout met returnen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan terhuijzen

jan terhuijzen

15/10/2012 19:26:04
Quote Anchor link
Hallo,
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>

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
 
PHP hulp

PHP hulp

28/11/2024 15:56:50
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/10/2012 19:34:39
Quote Anchor link
Beste jan,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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
        
    }
?>
 
Jan terhuijzen

jan terhuijzen

15/10/2012 19:35:45
Quote Anchor link
Ik dacht al zo iets, maar hoe los ik dat dan op?

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
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/10/2012 19:40:33
Quote Anchor link
om de return $resultInt; aan een variabele te koppelen zul je van regel 54 iets moeten maken als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $resultInt
= $this->SelectFromDb();
?>
 
Jan terhuijzen

jan terhuijzen

15/10/2012 19:45:45
Quote Anchor link
Oke, maar hoe doe je dat met de array $resultArray ?
En als je dit doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 $resultInt
= $this->SelectFromDb();
?>

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/10/2012 19:49:36
Quote Anchor link
meer dan één variabele kun je teruggeven door ze in een array te plaatsen. maar ook dat zou ik zo min mogelijk doen.
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if($fieldStatus == 3) { ?>
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
 if($resultInt = $this->SelectFromDb())
     // doe iets
?>
Gewijzigd op 15/10/2012 19:58:49 door Frank Nietbelangrijk
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.