probleem met inlogformulier

Status
Niet open voor verdere reacties.

Kevin We

Gebruiker
Lid geworden
8 sep 2005
Berichten
119
Ik heb dus een probleem met een inlogformulier.

Het is de bedoeling dat een beperkt aantal useres (normaal een 8 tal) handmatig door mij in een database gestopt worden en dat deze dan kunnen inloggen op onze site om de uitslag van hun competitieploeg in te vullen.

Nu heb ik een inlogformulier gemaakt maar bij het inloggen met een testuser gebeurt er gewoon niets.

Misschien dat iemand hier mij kan helpen?

Ik gebruik de volgende code:

Connect.php:
PHP:
<?php
session_start();

$server = "localhost";  //server
$login = "root";    //login
$password = "";    //paswoord
$database = "dibad";   //database

$conn=mysql_connect($server,$login) or die(mysql_error());

mysql_select_db($database,$conn) or die(mysql_error());
?>

login.class.php:
PHP:
<?php 
/* login.class.php */
	
class user {  
	
		function inloggen() {
		
	   		// Al ingelogd?
		   	if (IsSet($_SESSION['gebruikersnaam'])){
		        echo "Je bent reeds ingelogd";
	    	} 
			
			else {
	        	// Alles ingevuld?
		        if (strlen($_POST['gebruikersnaam']) == 0)
		            $error .= 'Gelieve een gebruikersnaam in te vullen.';
	    	    if (strlen($_POST['wachtwoord']) == 0)
	        	    $error .= 'Gelieve een wachtwoord in te vullen.';
	    
	        	// Fouten?
		        if (IsSet($error)) {
		            echo $error;
	    	    } 
				
				else {
	            	$sql = "SELECT gebruikersnaam, wachtwoord FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'";
	            	$qry = mysql_query($sql) or die(mysql_error());
	            	$row = mysql_fetch_array($qry);
	            
	            	// Klopt het wachtwoord?
	            	if ($row['wachtwoord'] != ($_POST['wachtwoord'])) {
	                	echo 'Foute wachtwoord of gebruiker niet gevonden!';
	            	}
					 
					else {
						// Sessie starten.
		            	session_start();
	    	            
	                	// redirecten naar een andere pagina
						echo "u bent ingelogd";
	                	//header ('Location: '.$_SERVER['HTTP_REFERER']);
	            	}
	        	}
	   		}
	
		function uitloggen() {
			if (IsSet($_SESSION['gebruikersnaam'])){
		    	
			    // Sessie be?digen.
			    session_destroy();
	
	
			    // De gebruiker redirecten naar de start pagina.
				echo "u bent uitgelogd";
		    	//header ('Location: '.$_SERVER['HTTP_REFERER']);
			} 
			else
				echo "Gelieve eerst in te loggen alvorens uit te loggen";
			}
  
 	  } 
}
?>

en tot slot het formulier zelf: inloggen.php:
PHP:
<?php 

require_once "connect.php";
require_once "login.class.php"; 

// Uitloggen?
if (IsSet($_GET['actie']) && $_GET['actie'] == "uitloggen")  {
	$user = new user;
	$user ->uitloggen();
}

// Op "Inloggen" geklikt?
if (IsSet($_POST['inloggen'])) {
	$user = new user;
	$user ->inloggen();
}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

	<head>
	    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	    <title>Inloggen</title>
	</head>

	<body>
	
<?php 

// Al ingelogd?
if (IsSet($_SESSION['gebruikersnaam'])){
	echo '<a href="'.$_SERVER['PHP_SELF'].'?actie=uitloggen">Uitloggen</a>';
} else {

?>
	    <form action="" method="post">
	        Gebruikersnaam: <input type="text" name="gebruikersnaam" size="10" /><br />
	        Wachtwoord: <input type="password" name="wachtwoord" size="10" /><br />
	        <input type="submit" value="Inloggen" name="Inloggen" />
	    </form>
		
	</body>
</html>
<?php

}

?>




MvG
 
Waarschijnlijk als je de klasse zelf had gemaakt had je hem wel goed gedaan.:rolleyes:

Er wordt nergens een $_SESSION['gebruikersnaam'] aangemaakt dus dan kun je er ook niet op controleren he...

PHP:
else {
       // Sessie starten. 
       session_start(); 
       // Sessie aanmaken
       $_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
       echo "u bent ingelogd"; 
       //header ('Location: '.$_SERVER['HTTP_REFERER']); 
}
Zet dat maar eens in de plaats van het ELSE-statement waar die session_start(); staat. Waarschijnlijk werkt hij dan wat beter...

Valt mij wel op dat je het wachtwoord niet gecodeerd opslaat...
 
Heb het script inderdaad niet volledig zelf geschreven :confused:

Los daarvan bedankt voor je hulp ...


Ivm dat wachtwoord, is het echt zo belangrijk om je wachtwoord met een md5 codering op te slaan? Ook als je dbase maar voor een beperkt aantal leden (max 8) beschikbaar is?

ik voeg dus de personen die toegang krijgen, handmatig toe in de database


edit:

zelf na de door jouw voorgesteld toevoeging gebeurt er nog steeds niets, dus het probleem is hiermee niet echt opgelost vrees ik.
PHP:
<?php 
/* login.class.php */
	
class user {  
	
		function inloggen() {
		
	   		// Al ingelogd?
		   	if (IsSet($_SESSION['gebruikersnaam'])){
		        echo "Je bent reeds ingelogd";
	    	} 
			
			else {
	        	// Alles ingevuld?
		        if (strlen($_POST['gebruikersnaam']) == 0)
		            $error .= 'Gelieve een gebruikersnaam in te vullen.';
	    	    if (strlen($_POST['wachtwoord']) == 0)
	        	    $error .= 'Gelieve een wachtwoord in te vullen.';
	    
	        	// Fouten?
		        if (IsSet($error)) {
		            echo $error;
	    	    } 
				
				else {
	            	$sql = "SELECT gebruikersnaam, wachtwoord FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'";
	            	$qry = mysql_query($sql) or die(mysql_error());
	            	$row = mysql_fetch_array($qry);
	            
	            	// Klopt het wachtwoord?
	            	if ($row['wachtwoord'] != ($_POST['wachtwoord'])) {
	                	echo 'Foute wachtwoord of gebruiker niet gevonden!';
	            	}
					 
					else {
      					// Sessie starten.
						session_start();
       					// Sessie aanmaken
				       $_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
				       echo "u bent ingelogd";
				       //header ('Location: '.$_SERVER['HTTP_REFERER']);
					} 
	        	}
	   		}
	
		function uitloggen() {
			if (IsSet($_SESSION['gebruikersnaam'])){
		    	
			    // Sessie be?digen.
			    session_destroy();
	
	
			    // De gebruiker redirecten naar de start pagina.
				echo "u bent uitgelogd";
		    	//header ('Location: '.$_SERVER['HTTP_REFERER']);
			} 
			else
				echo "Gelieve eerst in te loggen alvorens uit te loggen";
			}
  
 	  } 
}
?>
 
Laatst bewerkt:
Ik vraag me af in hoeverre IsSet() werkt? ik doe meestal gewoon isset()... hoofdlettergevoeligheid misschien?

Daarnaast zou ik voor de eenvoud eens proberen de opgevraagde gegevens (wachtwoord, usernaam) waar op getest wordt eruit gooien...

Weet je iig zeker dat daar de fout niet zit =)
 
vandaag heb ik er weeral 2,5 uur aan zitten lummelen.

Heb echt vanalles geprobeerd maar krijg dit script niet aan het werken.
Pff blijkbaar is het toch niet zo eenvoudig als gedacht, een eenvoudig scriptje waar ikzelf (als admin) users kan toevoegen zodat ze toegang krijgen tot bepaalde pagina's waar ze dan de uitslagen van de competitie invullen .... moeilijk kan dit toch niet zijn? :confused:
 
Als ik tijd heb zal ik even een ander soort code voor je bedenken die hetzelfde als bovenstaande doet. Ik denk dat het met de klasse niet echt succesvol wordt...
 
dat zou alvast een fantastische hulp voor mij zijn, ik krijg dit script echt niet aan het draaien vrees ik.


MvG
 
Dit script is gewoon het script dat hierboven staat alleen dan zonder klasse en met wat uitbreiding...
PHP:
<?php 

function inloggen($username, $password) {
  // Al ingelogd?
  if(isset($_SESSION['gebruikersnaam'])) {
    echo "Je bent reeds ingelogd";
  } 
  else {
    // Alles ingevuld?
    if(strlen($username) == 0) {
      $error .= 'Gelieve een gebruikersnaam in te vullen. <br/>';
    }
    if(strlen($password) == 0) {
      $error .= 'Gelieve een wachtwoord in te vullen. <br />';
    }
    // Fouten?
    if(isset($error)) {
      echo $error;
    } 
    else {
      $sql = 'SELECT gebruikersnaam, wachtwoord FROM leden
              WHERE gebruikersnaam="'. $username .'"';
      $qry = mysql_query($sql) or die(mysql_error());
      $row = mysql_fetch_array($qry);
      // Klopt het wachtwoord?
      if ($row['wachtwoord'] != $password) {
        echo 'Foute wachtwoord of gebruiker niet gevonden!';
      }
      else {
        // Sessie starten.
        session_start();
        // Sessie aanmaken
        $_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
        echo 'U bent ingelogd, klik <a href="{..}">hier</a> om verder te gaan.';
      } 
    }
  }
}	
function uitloggen() {
  if(isset($_SESSION['gebruikersnaam'])) {
    // Sessie beindigen
    session_destroy();
    // De gebruiker redirecten naar de start pagina.
    echo 'U bent uitgelogd, klik <a href="{..}">hier</a> om door te gaan.';
  }
  else {
    echo "Gelieve eerst in te loggen alvorens uit te loggen";
  }
} 

if(isset($_POST['submit'])) {
  inloggen($_POST['gebruikersnaam'], $_POST['wachtwoord']);
}
else {
  echo '<form action="'. $_SERVER['PHP_SELF'] .'" method="POST">
         Gebruikersnaam: <input type="text" name="gebruikersnaam" size="25" /><br />
         Wachtwoord: <input type="password" name="wachtwoord" size="25" /><br />
         <input type="submit" name="submit" value="Inloggen!" />
        </form>';
}
?>

Dit is de functie en het formulier in 1 bestand. Je zult alleen even wat regels aan moeten passen, de regels waar je {..} in ziet staat daar moet je even een url invullen waarnaar je ze wilt sturen.

Het is niet getest, maar ik denk dat het wel werkt.
 
je bent de max!! Dit werkt perfect :thumb:


ik heb nog even 2 kleine vraagjes, misschien dat iemand er ook even hier antwoord op kan geven.

-> Hoe kan ik de functie uitloggen() gebruiken op een andere pagina (bv gebruiker logt in, wordt geredirect naar pagina "X" en vanaf pagina "X" kan hij dan ook uitloggen?)

-> Indien ik een gebruiker redirect naar een andere pagina nadat hij ingelogd is (pagina "Y") zal op pagina "Y" toch ook een controle moeten gebeuren of de gebruiker wel ingelogd is? Anders kan je toch gewoon via een url ".../paginaY" ook aan die pagina?
 
Voor het uitloggen moet je even de functie uitloggen(); knippen uit dit bestand en plakken in het bestand waarin je hem wilt gebruiken.

Vervolgens zou je die met een linkje kunnen gebruiken zoals in dit bestand.

paginaX.php
PHP:
function uitloggen() { 
  if(isset($_SESSION['gebruikersnaam'])) { 
    // Sessie beindigen 
    session_destroy(); 
    // De gebruiker redirecten naar de start pagina. 
    echo 'U bent uitgelogd, klik <a href="{..}">hier</a> om door te gaan.'; 
  } 
  else { 
    echo "Gelieve eerst in te loggen alvorens uit te loggen"; 
  } 
}

//Controleren of de gebruiker is ingelogd
if(isset($_SESSION['gebruikersnaam'])) {
  // Uitloggen na drukken op link
  if($_GET['uitloggen'] == 'ja') {
    uitloggen();
  }
  else {
    echo '<a href="?uitloggen=ja">'. $_SESSION['gebruikersnaam'] .' uitloggen</a>';
    //rest van het bestand
  }
}
else {
  //Redirect naar inlogpagina
  header('location: http://www.mijnsite.nl/login.php');
  exit;
}

Zoals je ziet heb ik hier ook al die controle gedaan waar je naar vraagt.
Dit is het standaard model:
PHP:
<?php
if(isset($_SESSION['gebruikersnaam'])) {
  //Alles wat je wilt later zien aan mensen die ingelogd zijn zet je hiertussen
}
else {
  //Degenen die niet zijn ingelogd worden doorgestuurd naar de loginpagina
  header("location: http://www.mijnsite.nl/login.php");
  exit;
}
Je zult alleen even de URL in de headers aan moeten passen naar de juiste zodat ze op het loginformulier uit komen.
 
Prachtig, héél erg bedankt voor je hulp en uitleg! Echt waar, mooi werk!

Groetjes en nogmaals bedankt!:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan