Archief - PHP: Fout bij login

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Sprits

Legacy Member
PHP:
<div align="center">
<h3>Log in</h3>

<p></p>
<?php
ob_start();
session_start();
	
include("admin/config.php");

if (empty($_POST['login']))
	{
?>    
<form action="index.php?a=login" method="post">
	username:<br />
	<input type="text" name="username" size="30">
	<p></p>
	
	password:<br />
	<input type="password" name="password" size="30">
	<p></p>
	
	<input type="submit" name="login" value="Log In"> 
</form>


<?php
} else {
    $result  = mysql_query("SELECT userID,username,password,random FROM users WHERE username = '".$_POST['username']."'") or die (mysql_error());
    $count = mysql_num_rows($result);
    $rij = mysql_fetch_array($result);

    function validate_name($username)
    {
        $u_length = strlen($username);
        if ($u_length <= "3" OR $username = "")
        {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    function validate_login($username,$password,$password2,$count)
    {
        if ($count != "1")
        {
            return FALSE;
        } else {
			$string = 'hgfdhimqnkvmqneziie sdsjqmc{#{@}|^{#||@izhiaohfsikhdfsqnknvdfskze qiopjndk sq\{{{|@@mnkelzjizqnklqdsfn&kqsjioze564317855niodnkoq ni ioj';
			$query = mysql_query("SELECT random FROM users WHERE username = '".$_POST['username']."'") or die(mysql_error());
			while ($rand = mysql_fetch_array($query)) {
				$random = $rand['random'];
			}
			$password = md5(md5($string).md5($password).md5($random));
            if ($password2 != $password)
            {
                return FALSE;
            } else {
                return TRUE;
            }
        }
    }

    if (!validate_name($_POST['username']))
    {
        $err = "Wrong username.";
    } elseif (!validate_login($_POST['username'], $_POST['password'], $rij['password'], $count)) {
        $err = "Wrong password.";
    }

    if (isset($err))
    {
        echo $err;
    } else {
        
		$tijd = 31536000;
        setcookie("user_id", $rij['id'],time()+$tijd,"/");
        if ($_COOKIE['user_id'])
        {
            $_SESSION['user_id'] = $_COOKIE['user_id'];
            $_SESSION['user_name'] = $rij['username'];
            echo "Succesfully logged in!<br />Click <a href=\"index.php?a=list\">here</a> if you don't get redirected in 3 seconds.";
			header('Refresh: 3; URL=index.php?a=list'); 
        }
		else {
			echo "error";
		}
    }
}
ob_end_flush();
?>
</div>

als ik wil inloggen met mijn username en pass dan krijg ik dus "error" te zien.
als ik een verkeerde username of een verkeerd pass ingeef, dan geeft het de errors weer die moete gezien worde.
maar inloggen lukt echt ni!

iemand die de fout ziet?

Rvl

Legacy Member
ob_start();
session_start();

moet helemaal bovenaan je code komen (voor er iets anders geparsed wordt dus). Verder heb ik nog niet gekeken wegens te weinig tijd

if (empty($_POST['login'])) >> beter if(! isset($_POST['login']))
Eigelijk ben ik niet zo een voorstander van deze methode en vergelijk ik liever met een value (zodat wanneer je met meerdere forms werkt er geen problemen kunnen ontstaan in je scripts).

Persoonlijk vind ik het verder maar crappy code (na snel gekeken te hebben)

Sprits

Legacy Member
kheb het aangepast

PHP:
<?php 
ob_start();
session_start();
?>
<div align="center">
<h3>Log in</h3>

<p></p>
<?php

include("admin/config.php");

if (!isset($_POST['login']))
	{
?>    
<form action="index.php?a=login" method="post">
	username:<br />
	<input type="text" name="username" size="30">
	<p></p>
	
	password:<br />
	<input type="password" name="password" size="30">
	<p></p>
	
	<input type="submit" name="login" value="Log In"> 
</form>


<?php
} else {
    $result  = mysql_query("SELECT userID,username,password,random FROM users WHERE username = '".$_POST['username']."'") or die (mysql_error());
    $count = mysql_num_rows($result);
    $rij = mysql_fetch_array($result);

    function validate_name($username)
    {
        $u_length = strlen($username);
        if ($u_length <= "3" OR $username = "")
        {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    function validate_login($username,$password,$password2,$count)
    {
        if ($count != "1")
        {
            return FALSE;
        } else {
			$string = 'hgfdhimqnkvmqneziie sdsjqmc{#{@}|^{#||@izhiaohfsikhdfsqnknvdfskze qiopjndk sq\{{{|@@mnkelzjizqnklqdsfn&kqsjioze564317855niodnkoq ni ioj';
			$query = mysql_query("SELECT random FROM users WHERE username = '".$_POST['username']."'") or die(mysql_error());
			while ($rand = mysql_fetch_array($query)) {
				$random = $rand['random'];
			}
			$password = md5(md5($string).md5($password).md5($random));
            if ($password2 != $password)
            {
                return FALSE;
            } else {
                return TRUE;
            }
        }
    }

    if (!validate_name($_POST['username']))
    {
        $err = "Wrong username.";
    } elseif (!validate_login($_POST['username'], $_POST['password'], $rij['password'], $count)) {
        $err = "Wrong password.";
    }

    if (isset($err))
    {
        echo $err;
    } else {
        
		$tijd = 31536000;
        setcookie("user_id", $rij['id'],time()+$tijd,"/");
        if ($_COOKIE['user_id'])
        {
            $_SESSION['user_id'] = $_COOKIE['user_id'];
            $_SESSION['user_name'] = $rij['username'];
            echo "Succesfully logged in!<br />Click <a href=\"index.php?a=list\">here</a> if you don't get redirected in 3 seconds.";
			header('Refresh: 3; URL=index.php?a=list'); 
        }
		else {
			echo "error";
		}
    }
}

?>
</div>
<?php
ob_end_flush();
?>

Sprits

Legacy Member
juist vanalles aan het probere geweest, same me nen oude schoolkameraad en we gerake der ni aan uit!

alles wordt doorgegeve maar blijkbaar maakt hij de cookie ni aan! hetgeen ik dus vrij weird vin

Dokterice

Legacy Member
setcookie("id",$row["id"],time()+60*60*24*365*10);

if(isset($_COOKIE["id"]))

Tyfius

Legacy Member
Of hij daar nu $tijd gebruikt of de tijd voluit zet maakt geen reet uit, 't is die '/' die er niet mag staan.

Of course, die mag daar wel staan, want die '/' maakt uw cookie in principe toegankelijk voor heel uw domein, maar dan kun je die evengoed weglaten, en volgens mij zit daar uw probleem. Laat die eens gewoon weg, en kijk of het dan wel werkt.
Je kan bij je controle ook best isset($_COOKIE['user_id']) gebruiken, in plaats van alleen $_COOKIE['id'].

Sprits

Legacy Member
PHP:
if (isset($err))
    {
        echo $err;
    } else {
        
		
        setcookie("user_id", $rij['id'],time()+60*60*24*365*10);
		echo $_COOKIE['user_id'];
        if (isset($_COOKIE['user_id']))
        {
            $_SESSION['user_id'] = $_COOKIE['user_id'];
            $_SESSION['user_name'] = $rij['username'];
            echo "Succesfully logged in!<br />Click <a href=\"index.php?a=list\">here</a> if you don't get redirected in 3 seconds.";
			header('Refresh: 3; URL=index.php?a=list'); 
        }
		else {
			echo "error";
		}
    }

kblijf nog altij diene error krijge.

Tyfius

Legacy Member
Print die echo het juiste ID af, of print die niets af?
En wordt je cookie geset (in firefox kan je dit nagaan bij preferences - privacy - show cookies)?

Sprits

Legacy Member
diene echo print niks af

en er is ne cookie in firefox die 'user_id' bevat met inhoud '1'

de user_id moet normaal 2 zijn

*edit*
kheb ffkes mijn cookies gedelete en nog is geprobeert en hij maakt dus duidelijk gene nieuwe cookie aan!

ik heb op mijne website nog ne cookie om de templatenummer in te steke die de bezoeker kiest en die maakt hij dus wel aan (deze staat ni op login.php)

Radiance

Legacy Member
Het invullen van de $_COOKIE array gebeurd niet real-time, je mag jij nog zoveel cookies setten als je wil, pas bij de volgende refresh worden die effectief ingelezen.

dJeez

Legacy Member
nibbler.be zei:
ahzo... da wist ik ni!
Ik zou voorstellen om bij problemen eerst de PHP reference eens te raadplegen, want doorgaans vind je daar de informatie die relevant is om je probleem op te lossen (ofwel bij de voorbeelden ofwel in de comments). Het feit dat de cookies pas uitgelezen kunnen worden op de volgende pagina waarvoor de cookie zichtbaar is staat trouwens vermeld bij de vaak voorkomende fouten op de setcookie pagina :
http://be.php.net/setcookie

BTW De engelse versie van de PHP reference is veel uitgebreider en qua formulering doorgaans ook correcter (de vertalingen zijn soms erg verwarrend heb ik net gemerkt bij de NL uitleg over setcookie).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan