Hallo iedereen,
Ik ben bezig met een inlogsysteem (nu nog super simpel), maar hij loopt vast op een simpel if statement..
De code:

<?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:

<?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>";
	}
?>
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?
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:


<?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.
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!
denk ook om sql injection => mysql_real_escape_string()
Dillen Meijboom op 30/08/2011 21:56:58


<?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()
- SanThe - op 31/08/2011 03:27:42

[quote="Dillen Meijboom op 30/08/2011 21:56:58"]

<?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()
[/quote]

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 )
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

<?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.
	*/
}
?>

Reageren