Probleem met simpele if statement
Ik ben bezig met een inlogsysteem (nu nog super simpel), maar hij loopt vast op een simpel if statement..
De code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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'];
}
?>
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)
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
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>";
}
?>
$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
Wat krijg je als je if(md5($_POST['password']) == $user['password_md5']) { omdraait.. Dus: if($user['password_md5'] == md5($_POST['password'])) { ?
Had ik al geprobeerd, net weer gedaan en hij geeft alweer die error..
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.
Heb ik net toegevoegd, is dit genoeg of moet ik hele code toevoegen?
Dit is beter:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.';
}
?>
$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.
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
denk ook om sql injection => mysql_real_escape_string()
Dillen Meijboom op 30/08/2011 21:56:58:
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.
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()
- SanThe - op 31/08/2011 03:27:42:
Beetje erg tegenstrijdig.
$user['0'] zal niet bestaan bij mysql_fetch_assoc()
Dillen Meijboom op 30/08/2011 21:56:58:
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.
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 )
Vergeet trouwens ook niet je post velden te beveiligen voor sql injectie in je query!
Voorbeeld
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
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.
*/
}
?>
$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
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. ;)
Ik kom er nu achter dat ik erg heb zitten klooien gisteravond, hopelijk gaat het nu beter:D