Probleem met simpele if statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees van Kempen

Kees van Kempen

30/08/2011 21:29:22
Quote Anchor link
Hallo iedereen,
Ik ben bezig met een inlogsysteem (nu nog super simpel), maar hij loopt vast op een simpel if statement..
De code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if(md5($_POST['password']) == $user['password_md5']) {
    $_SESSION['login'] = $_POST['username'];
    echo "<span style='color: #FFF'>Logged in.</span>";
}

else {
    echo "<span style='color: #FFF'>User found but password wrong.</span><br />";
    echo md5($_POST['password']) . '<br />';
    echo $user['password_md5'];
}

?>

Als ik het goede wachtwoord invoer, geeft ie toch een error met daaronder beide MD5 wachtwoorden die dan hetzelfde zijn..
Voorbeeld:
Ik probeer in te loggen met de username sjaak met het wachtwoord truus dat in MD5 98e07194bf7b5c2b8258b52e6f4d259e is. In de database staat dus 98e07194bf7b5c2b8258b52e6f4d259e en hij vergelijkt hem. Daarna krijg ik alsnog een error dat het niet klopt. Weet iemand hoe dit zit? Heb ik een beginnersfout gemaakt:3?

Groeten, Kees.

EDIT: Groter stuk code:
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
<?php
$sql
= "SELECT *
FROM `users`
WHERE username = '"
. $_POST['username'] . "'";
    /*$sql2 = "SELECT *
FROM `users`
WHERE password_md5 = '" . md5($_POST['password']) . "'";*/

    $query = mysql_query($sql);
    //$query2 = mysql_query($sql2);
    if($query) {
        $user = mysql_fetch_array($query);
        $pass_db = md5($user['password']);
        if($user['password_md5'] == md5($_POST['password'])) {
            $_SESSION['login'] = $_POST['username'];
            echo "<span style='color: #FFF'>Logged in.</span>";
        }

        /*if($query2) {
            echo 'HAK';
        }*/

        else {
            echo "<span style='color: #FFF'>User found but password wrong.</span><br />";
            echo md5($_POST['password']) . '<br />';
            echo $user['password_md5'];
        }
    }

    else if(!$query) {
        echo "<span style='color: #FFF'>User not found.</span>";
    }

?>
Gewijzigd op 30/08/2011 21:48:54 door Kees van Kempen
 
PHP hulp

PHP hulp

07/11/2024 09:55:55
 

30/08/2011 21:39:32
Quote Anchor link
Wat krijg je als je if(md5($_POST['password']) == $user['password_md5']) { omdraait.. Dus: if($user['password_md5'] == md5($_POST['password'])) { ?
 
Kees van Kempen

Kees van Kempen

30/08/2011 21:45:24
Quote Anchor link
Had ik al geprobeerd, net weer gedaan en hij geeft alweer die error..
 

30/08/2011 21:46:34
Quote Anchor link
Kees van Kempen op 30/08/2011 21:45:24:
Had ik al geprobeerd, net weer gedaan en hij geeft alweer die error..


Oke. Uhm kun je een stukje meer van je code laten zien? Want ik heb nu geen idee wat $user is.. Heb ook geen idee wat de inhoud van de rest is.
Gewijzigd op 30/08/2011 21:50:35 door
 
Kees van Kempen

Kees van Kempen

30/08/2011 21:51:27
Quote Anchor link
Heb ik net toegevoegd, is dit genoeg of moet ik hele code toevoegen?
 

30/08/2011 21:56:58
Quote Anchor link
Okee wat me wel opvalt is dat je query een beetje apart is. Waarom een query uitvoeren daarna fetchen en nog een keer controleren?

Dit is beter:

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
<?php
$query
= mysql_query( "SELECT username, password
FROM users
WHERE username = '"
. $_POST['username'] . "' AND password = '" . md5( $_POST['password'] ) . "'" );
$user = mysql_fetch_assoc( $query )

if ( isset( $user['0'] ) )
{

    $_SESSION['login'] = $_POST['username'];
}

else
{
    echo 'Niet ingelogd.';
}

?>


Paar opmerkingen:

- Gebruik mysql_fetch_assoc in plaats van mysql_fetch_array waarom? Omdat mysql_fetch_array 2 arrays teruggeeft. 1 met nummers en 1 met letters en mysql_fetch_assoc maar 1.
- Gebruik liever geen wildcard (*) maar selecteer wat je nodig hebt.
- Gebruik geen backtricks (`) in sql.
Gewijzigd op 30/08/2011 21:58:38 door
 
Kees van Kempen

Kees van Kempen

30/08/2011 21:59:31
Quote Anchor link
Oke, bedankt ik ga het uitproberen. Ben beetje slaperig en heb delen letterlijk van ander script gekopieert, klinkt als slecht smoesje maar ben half ziek in de vakantie:( #teveelinfo

EDIT: De code werkte niet direct, moest wat dingen aanpassen waaronder dat password in de database password_md5 heet. Alsnog bedankt!
Gewijzigd op 30/08/2011 22:12:00 door Kees van Kempen
 
Vincent Huisman

Vincent Huisman

30/08/2011 23:28:38
Quote Anchor link
denk ook om sql injection => mysql_real_escape_string()
 
- SanThe -

- SanThe -

31/08/2011 03:27:42
Quote Anchor link
Dillen Meijboom op 30/08/2011 21:56:58:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// ....
$user = mysql_fetch_assoc( $query )
if ( isset( $user['0'] ) )
?>


Paar opmerkingen:

- Gebruik mysql_fetch_assoc in plaats van mysql_fetch_array waarom? Omdat mysql_fetch_array 2 arrays teruggeeft. 1 met nummers en 1 met letters en mysql_fetch_assoc maar 1.


Beetje erg tegenstrijdig.
$user['0'] zal niet bestaan bij mysql_fetch_assoc()
 

31/08/2011 09:36:11
Quote Anchor link
- SanThe - op 31/08/2011 03:27:42:
Dillen Meijboom op 30/08/2011 21:56:58:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// ....
$user = mysql_fetch_assoc( $query )
if ( isset( $user['0'] ) )
?>


Paar opmerkingen:

- Gebruik mysql_fetch_assoc in plaats van mysql_fetch_array waarom? Omdat mysql_fetch_array 2 arrays teruggeeft. 1 met nummers en 1 met letters en mysql_fetch_assoc maar 1.


Beetje erg tegenstrijdig.
$user['0'] zal niet bestaan bij mysql_fetch_assoc()


Wat een verschrikkelijk domme fout -.-' Ag het was avond..

Anyway.

In plaats van $array['0'] zou je gewoon het volgende kunnen doen:

if ( count( $array ) > 0 )
 
Milo S

Milo S

31/08/2011 09:52:39
Quote Anchor link
Ik zou het allemaal in me query doen, dan geef je een minder gedetailleerde fout aan, maar tis veel makkelijker :D
Vergeet trouwens ook niet je post velden te beveiligen voor sql injectie in je query!

Voorbeeld
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
<?php
$sql
=
"
SELECT
    username,
    password
FROM
    users
WHERE
    username = '"
.mysql_real_escape_string( $_POST['username'] )."'
AND
    password = '"
.mysql_real_escape_string( $_POST['password'] )."'
"
;

if( !$res = mysql_query( $sql ) )
{

    # Fout
    echo 'Er is een fout in de query opgetreden.';
}

elseif( mysql_num_rows( $res ) == 0 )
{

    # Fout
    echo 'Deze gebruikersnaam / wachtwoord combinatie bestaat niet.';
}

else
{
    /*
    Ingelogd
        - Melding geven
        - Sessie aanmaken
        - Doorsturen?
        etc. etc.
    */

}
?>
Gewijzigd op 31/08/2011 10:27:46 door Milo S
 
Jasper DS

Jasper DS

31/08/2011 09:54:52
Quote Anchor link
Het is trouwens niet aangeraden om zo'n specifieke info te geven je kan beter een algemenere melding geven zoals "gegevens komen niet overeen". Gebruik Milo zijn script maar, lijkt me goed. En let ook op z'n tips. ;)
 
Kees van Kempen

Kees van Kempen

31/08/2011 14:15:02
Quote Anchor link
Ik kom er nu achter dat ik erg heb zitten klooien gisteravond, hopelijk gaat het nu beter:D
 



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.