Hoi,

ik ben nog vrij nieuw op het gebied van PHP, en ben nu bezig een website te maken die controleert of iemand is ingelogd. Nu is het volgende probleem. Als ik wil inloggen, voer ik het juiste username & password in, en druk ik op Submit. Nu zegt hij dat Username of Password fout is, terwijl ik zeker weet dat die goed is. Druk ik nu nog een keer op Submit, met ongewijzigde username en password, dan zegt hij: Ingelogd.

Hieronder staat het script dat ik zelf heb geschreven, het is een include van een inlogmenu op de index.php. Op deze index.php heb ik helemaal bovenaan staan: session_start();


inlogmenu.php:


<?
ob_start();

if ($HTTP_SESSION_VARS["Ok"] == 1)
{
	echo "ingelogd!";
}
else{
if ( isset ($_POST['Submit']) )//als er op Submit wordt gedrukt, doe dit:
	{
			$name = $_POST['name'];// $name = name
			$password = $_POST['password'];//password = password
				if ( $name == "" )//als een veld is leeggelaten, weergeef fout
			{
				$error_name = "<font color ='#FF0000'><strong>*</strong></font>";
				$error = 1;	
			}
				if ( $password == "" )
			{
				$error_password = "<font color ='#FF0000'><strong>*</strong></font>";
				$error = 1;
			}
					if ($error != 1)//als geen van beide velden fouten bevat, doe dit:
						{
							//log in in database
							include "/inc/connect.php";
						$sql = "SELECT * FROM users WHERE name = '$name' AND password = '$password'";
													$result = mysql_query($sql);
							if (mysql_num_rows($result) >= 0) 
							{
								while ($rij = mysql_fetch_array($result))
									{
							  					{	//geef een sesie mee met waarde 1
													$HTTP_SESSION_VARS["Ok"] = 1;
												}			
									}
							}
							if (name != $name && password != $password)//als dit niet gelijk is aan elkaar, weergeef dit:
						
							{ 
							echo "<font color ='#FF0000'><strong>Inlognaam of wachtwoord verkeerd!</strong></font>";
							}
						}
					else//als er wel fouten zijn, display dit:
					
						{
							echo "<font color ='#FF0000'><strong>Je bent een vak vergeten in te vullen!</strong></font>";
						}
						
	}



?>
<p>&nbsp;</p>
      <form name="invoegformulier" method="post" action="">
	&nbsp; <input name="name" value="<?=$_POST['name']?>">
	  
		gebruikersnaam:<?=$error_name?><br>
	
	&nbsp;  <input name="password" type="password" value="<?=$_POST['password']?>">
	    
		wachtwoord:<?=$error_password?><p>
   
    &nbsp;  <input type="Submit" name="Submit" value="Submit">
</form>
      </p>	 
	  
	  
<?
}
?> 



Mocht iemand opmerkingen/oplossingen hebben: GRAAG! Alvast bedankt!

@Jonathan Hogervorst: Thanks!
Zet even [ignore]
 en 
[/ignore] om je script heen.
Niemand een idee?
Je controleert bovenaan in je script al of

if ($HTTP_SESSION_VARS["Ok"] == 1)

maar die wordt pas verderop in je script gezet. Die levert dus de eerste keer altijd false op.

een inlogscript hoort te beginnen met session_start () helemaal bovenin je script. Die ob_start zou ik voorlopig even niet gebruiken. Verder is het moderner om $_SESSION['Ok'] te gebruiken ipv $HTTP_SESSION_VARS["Ok"].
Ik heb het script een beetje aangepast, ik heb uit de index.php "session_start" weggehaalt, en hier in gedaan als volgt:

inlogmenu.php:

<?
session_start();

if ( isset ($_POST['Submit']) )//als er op Submit wordt gedrukt, doe dit:
	{
			$name = $_POST['name'];// $name = name
			$password = $_POST['password'];//password = password
				if ( $name == "" )//als een veld is leeggelaten, weergeef fout
			{
				$error_name = "<font color ='#FF0000'><strong>*</strong></font>";
				$error = 1;	
			}
				if ( $password == "" )
			{
				$error_password = "<font color ='#FF0000'><strong>*</strong></font>";
				$error = 1;
			}
					if ($error != 1)//als geen van beide velden fouten bevat, doe dit:
						{
							//log in in database
							include "/inc/connect.php";
						$sql = "SELECT * FROM users WHERE name = '$name' AND password = '$password'";
													$result = mysql_query($sql);
							if (mysql_num_rows($result) >= 0) 
							{
								while ($rij = mysql_fetch_array($result))
									{
							  					{	//geef een sesie mee met waarde 1
													$_SESSION['Ok'] = 1;
												}			
									}
							}
							if (name != $name && password != $password)//als dit niet gelijk is aan elkaar, weergeef dit:
						
							{ 
							echo "<font color ='#FF0000'><strong>Inlognaam of wachtwoord verkeerd!</strong></font>";
							}
						}
					else//als er wel fouten zijn, display dit:
					
						{
							echo "<font color ='#FF0000'><strong>Je bent een vak vergeten in te vullen!</strong></font>";
						}
						
	}



?>
<p>&nbsp;</p>
      <form name="invoegformulier" method="post" action="">
	&nbsp; <input name="name" value="<?=$_POST['name']?>">
	  
		gebruikersnaam:<?=$error_name?><br>
	
	&nbsp;  <input name="password" type="password" value="<?=$_POST['password']?>">
	    
		wachtwoord:<?=$error_password?><p>
   
    &nbsp;  <input type="Submit" name="Submit" value="Submit">
</form>
      </p>	 
	  
	  
<?


if ($_SESSION['Ok'] == 1)
{
	echo "ingelogd!";
}
?> 


Nu geeft hij dit weer als je nog niet bent ingelogd:

Warning: Cannot send session cookie - headers already sent by (output started at c:\phpdev\www\!test nsl\index.php:1) in c:\phpdev\www\!test nsl\loginmenu.php on line 2

Warning: Cannot send session cache limiter - headers already sent (output started at c:\phpdev\www\!test nsl\index.php:1) in c:\phpdev\www\!test nsl\loginmenu.php on line 2

En als je eenmaal bent ingelogd:

Warning: Cannot send session cache limiter - headers already sent (output started at c:\phpdev\www\!test nsl\index.php:1) in c:\phpdev\www\!test nsl\loginmenu.php on line 2
Inlognaam of wachtwoord verkeerd!

Ook wil ik graag dat als je bent ingelogd, dat hij niet meer vraagt om naam/wachtwoord. Enig idee hoe ik dit oplos?

Sorry ben echt nog een beginner :P

Reageren