login systeem
mens - 11/03/2007 20:48
Onbekend
Ik heb van iemand deze code gekregen:
<?php
$aUsers = array('loginnaam' => 'wachtwoord');
if( array_key_exists( $_POST['loginnaam'] ) && in_array( $_POST['wachtwoord'] ) )
{
echo "U bent succesvol ingelogt!";
}
else
{
echo "Het is niet gelukt om in te loggen";
}
?>
<?php
$aUsers = array ( 'loginnaam' => 'wachtwoord' ) ;
{
echo "U bent succesvol ingelogt!" ; }
else
{
echo "Het is niet gelukt om in te loggen" ; }
?>
maar deze code doet het niet, want dan krijg ik een fout-bericht:
Warning: Wrong parameter count for array_key_exists() in /home/httpd/vhosts/stwc.nl/subdomains/wessel/httpdocs/loginscript/controle.php on line 4
Wie weet hoe ik dat moet oplossen?
35 antwoorden
Gesponsorde links
AgentX - 11/03/2007 20:51 (laatste wijziging 11/03/2007 20:51)
HTML beginner
je moet natuurlijk wel ingeven in welke array hij moet zoeken:
<?php
$aUsers = array('loginnaam' => 'wachtwoord');
if(array_key_exists($_POST['loginnaam'], $aUsers) && in_array($_POST['wachtwoord'],$aUsers)){
echo "U bent succesvol ingelogt!";
}
else{
echo "Het is niet gelukt om in te loggen";
}
?>
<?php
$aUsers = array ( 'loginnaam' => 'wachtwoord' ) ;
echo "U bent succesvol ingelogt!" ; }
else {
echo "Het is niet gelukt om in te loggen" ; }
?>
Ibrahim - 11/03/2007 20:51
PHP expert
ooh, dat was ik ik was de $aUsers vergeten in de parameters
<?php
$aUsers = array('loginnaam' => 'wachtwoord');
if( array_key_exists( $_POST['loginnaam'], $aUsers ) && in_array( $_POST['wachtwoord'], $aUsers ) )
{
echo "U bent succesvol ingelogt!";
}
else
{
echo "Het is niet gelukt om in te loggen";
}
?>
<?php
$aUsers = array ( 'loginnaam' => 'wachtwoord' ) ;
{
echo "U bent succesvol ingelogt!" ; }
else
{
echo "Het is niet gelukt om in te loggen" ; }
?>
Ibrahim - 11/03/2007 20:56 (laatste wijziging 11/03/2007 20:57)
PHP expert
zie commentaar bij je (niet gekeurde) script, ik ga die hier even quoten
quote van mij op zijn script:
Als je een nieuwe gebruiker wilt toevoegen, zet je gewoon een nieuwe entry in de array
$aUsers = array('loginnaam' => 'wachtwoord', 'loginnaam2' => 'wachtwoord');
$aUsers = array ( 'loginnaam' => 'wachtwoord' , 'loginnaam2' => 'wachtwoord' ) ;
Dit zou ik in ieder geval niet doen, want dan kan de ene gebruiker inloggen met de andermans wachtwoord.
Als je perse toch wilt, kun je dit gebruiken:
foreach( $aUsers as $sLoginNaam => $sWachtWoord )
{
if( $_POST['loginnaam'] == $sLoginNaam && $_POST['wachtwoord'] == $sWachtWoord )
{
// ingelogged
}
else
{
// niet ingelogged
}
}
foreach ( $aUsers as $sLoginNaam => $sWachtWoord )
{
if ( $_POST [ 'loginnaam' ] == $sLoginNaam && $_POST [ 'wachtwoord' ] == $sWachtWoord )
{
// ingelogged
}
else
{
// niet ingelogged
}
}
mens - 11/03/2007 21:01 (laatste wijziging 11/03/2007 21:13)
Onbekend
Ik wil juist dat er meerde gebruikers kunnen zijn, maar dat die niet in kunnen loggen met iemand anders zijn wachtwoord.
mens - 12/03/2007 07:09
Onbekend
Ja, maar hoe moet je dan gebruikers toevoegen?
P.S.
Let op! Ik ben echt een beginner!
Ultimatum - 12/03/2007 07:11
PHP expert
Door ze in deze array in te voegen (zoals ook in de edit van siliecom staat..
<?php
$aUsers = array('loginnaam' => 'wachtwoord', 'loginnaam2' => 'wachtwoord');
?>
<?php
$aUsers = array ( 'loginnaam' => 'wachtwoord' , 'loginnaam2' => 'wachtwoord' ) ; ?>
mens - 12/03/2007 07:12 (laatste wijziging 12/03/2007 07:22)
Onbekend
Er klopt volgens mij niet zoveel van, ik heb deze code gebruikt:
<?php
$aUsers = array('mens' => 'test', 'mens2' => 'test2');
foreach( $aUsers as $sLoginNaam => $sWachtWoord )
{
if( $_POST['naam'] == $sLoginNaam && $_POST['wachtwoord'] == $sWachtWoord )
{
echo "Ingelogd!";
}
else
{
echo "niet ingelogd!";
}
}
?>
<?php
$aUsers = array ( 'mens' => 'test' , 'mens2' => 'test2' ) ;
foreach ( $aUsers as $sLoginNaam => $sWachtWoord )
{
if ( $_POST [ 'naam' ] == $sLoginNaam && $_POST [ 'wachtwoord' ] == $sWachtWoord )
{
}
else
{
}
}
?>
Als ik dan inlog met mens en test dan krijg ik dit te zien:
Ingelogd!niet ingelogd!
En als ik inlog met mens2 en test2 dan krijg ik het zo te zien:
niet ingelogd!Ingelogd!
jeroentjuh - 12/03/2007 07:49
PHP ver gevorderde
Zo kan het ook.
<?php
$aUsers = array('mens' => 'test' , 'mens2' => 'test2');
if( array_key_exists( $_POST['loginnaam'], $aUsers ) && $aUsers[$_POST['loginnaam']] == $_POST['wachtwoord'] )
{
echo "U bent succesvol ingelogt!";
}
else
{
echo "Het is niet gelukt om in te loggen";
}
?>
<?php
$aUsers = array ( 'mens' => 'test' , 'mens2' => 'test2' ) ;
if ( array_key_exists ( $_POST [ 'loginnaam' ] , $aUsers ) && $aUsers [ $_POST [ 'loginnaam' ] ] == $_POST [ 'wachtwoord' ] ) {
echo "U bent succesvol ingelogt!" ; }
else
{
echo "Het is niet gelukt om in te loggen" ; }
?>
Chupskie - 12/03/2007 08:11
MySQL beginner
@jeroentjuh, is zijn loginnaam dan gelijk aan zijn wachtwoord.
Want wat je nou doet is:
if($_POST['loginnaam'] == $_POST['wachtwoord'])
@mens, jou probleem zit hem waarschijnlijk omdat je geen post waardes mee stuurt? Heb je er uberhaubt ook al een formpje inzitten? Anders kun je nooit de POST waardes meesturen, waar je nu op dit moment op controleert?!
Ibrahim - 12/03/2007 08:33 (laatste wijziging 12/03/2007 08:33)
PHP expert
<?php
$aUsers = array('mens' => 'test' , 'mens2' => 'test2');
if( array_key_exists( $_POST['loginnaam'], $aUsers ) && $aUsers[$_POST['loginnaam']] == $_POST['wachtwoord'] )
{
echo "U bent succesvol ingelogt!";
}
else
{
echo "Het is niet gelukt om in te loggen";
}
?>
<?php
$aUsers = array ( 'mens' => 'test' , 'mens2' => 'test2' ) ;
if ( array_key_exists ( $_POST [ 'loginnaam' ] , $aUsers ) && $aUsers [ $_POST [ 'loginnaam' ] ] == $_POST [ 'wachtwoord' ] ) {
echo "U bent succesvol ingelogt!" ; }
else
{
echo "Het is niet gelukt om in te loggen" ; }
?>
Dit is inderdaad een goeie oplossing door jeroentjuh, denk ik
Chupskie - 12/03/2007 08:43
MySQL beginner
@siliecom14, ik snap je antwoord niet helemaal.
Ben je nu serieus? Of bedoel je je reactie nu sarcastisch?
Wave6 - 12/03/2007 09:55
PHP beginner
Even iets anders waarom zet je het uberhaubt in een array als een of andere hacker/cracker je script weet op te vragen dan zijn je wachtwoorden en accounts ook niet meer veilig?
Of gaat het je om het princiepe om de juiste paren bij elkaar te vinden?
Ibrahim - 12/03/2007 14:28
PHP expert
<?php
$aUsers['siliecom14'] = 'wachtwoord';
$aUsers['mens'] = 'wachtwoord2';
$notloggedin = false;
foreach( $aUsers as $sLogin => $sWachtWoord )
{
if( $_POST['admin_naam'] == $sLogin && $_POST['admin_password'] == $sWachtWoord )
{
$_SESSION['loggedin'] = 1;
header('Location: ' . $aGlobal['path'] . 'modules/admin/');
}
else
{
$notloggedin = true;
}
}
if( $notloggedin )
{
echo 'Niet ingelogged';
}
?>
<?php
$aUsers [ 'siliecom14' ] = 'wachtwoord' ;
$aUsers [ 'mens' ] = 'wachtwoord2' ;
$notloggedin = false ;
foreach ( $aUsers as $sLogin => $sWachtWoord )
{
if ( $_POST [ 'admin_naam' ] == $sLogin && $_POST [ 'admin_password' ] == $sWachtWoord )
{
$_SESSION [ 'loggedin' ] = 1 ;
header ( 'Location: ' . $aGlobal [ 'path' ] . 'modules/admin/' ) ; }
else
{
$notloggedin = true ;
}
}
if ( $notloggedin )
{
}
?>
Dit werkt prima
Thomas - 12/03/2007 14:43 (laatste wijziging 12/03/2007 14:44)
Moderator
Die for-lus is echt niet nodig.
Je kunt zoiets doen?
<?php
if(in_array($_POST['username'], array_keys($aUsers)) && $aUsers[$_POST['username']] == $_POST['password']) {
// login ok
// ...
?>
<?php
if ( in_array ( $_POST [ 'username' ] , array_keys ( $aUsers ) ) && $aUsers [ $_POST [ 'username' ] ] == $_POST [ 'password' ] ) { // login ok
// ...
?>
Je moet natuurlijk ook kijken of $_POST-vars bestaan en deze escapen, maar bovenstaande methode lijkt mij een stuk korter?
Trouwens, zet een exit() na die header (of gebruik een break?), anders loopt ie alsnog alle users af...
mens - 12/03/2007 15:52 (laatste wijziging 12/03/2007 16:02)
Onbekend
Citaat:
@mens, jou probleem zit hem waarschijnlijk omdat je geen post waardes mee stuurt? Heb je er uberhaubt ook al een formpje inzitten? Anders kun je nooit de POST waardes meesturen, waar je nu op dit moment op controleert?!
Natuurlijk heb ik een formpje, de code van de form heb ik gezet op http://www.plaatscode.be/4590 /
Ik heb het trouwens nu opgelost met de volgende code:
<?php
$gebruiker['siliecom14'] = 'wachtwoord';
$gebruiker['mens'] = 'test';
$gebruiker['pts'] = 'pts';
if(in_array($_POST['naam'], array_keys($gebruiker)) AND $gebruiker[$_POST['naam']] == $_POST['wachtwoord']) {
echo "U bent succesvol ingelogd!";
}else{
echo "U heeft de verkeerde gebruikersnaam/wachtwoord ingetypt!";
}
?>
<?php
$gebruiker [ 'siliecom14' ] = 'wachtwoord' ;
$gebruiker [ 'mens' ] = 'test' ;
$gebruiker [ 'pts' ] = 'pts' ;
if ( in_array ( $_POST [ 'naam' ] , array_keys ( $gebruiker ) ) AND
$gebruiker [ $_POST [ 'naam' ] ] == $_POST [ 'wachtwoord' ] ) { echo "U bent succesvol ingelogd!" ; } else {
echo "U heeft de verkeerde gebruikersnaam/wachtwoord ingetypt!" ; }
?>
Bedankt mensen!^^
mens - 12/03/2007 16:23
Onbekend
Nog even een vraagje, hoe kun je dan in een array zetten welk account een admin is, welk een moderator, welk een normale enz.?
Ibrahim - 12/03/2007 16:26
PHP expert
<?php
$aUsers['naam'][0] = 'siliecom14';
$aUsers['wachtwoord'][0] = 'wachtwoord';
$aUsers['rank'][0] = 'Medewerker';
<?php
$aUsers [ 'naam' ] [ 0 ] = 'siliecom14' ;
$aUsers [ 'wachtwoord' ] [ 0 ] = 'wachtwoord' ;
$aUsers [ 'rank' ] [ 0 ] = 'Medewerker' ;
zo'n structuur kun je proberen, maar zodra je veel gebruikers gaat hebben, word je bestand veel en veel groter. Zou je niet beter kunnen denken aan een database ? (MySQL, PostgreSQL, etc.)
mens - 12/03/2007 16:27
Onbekend
Dat met die array snap ik ja, maar als je inlogt welke code moet je dan gebruiken met dat admin-verschil?
En op mijn site heb je wel een MySQL database, maar die is nog niet geactiveerd. En mijn docent wil dat pas als ik in het 4e jaar zit activeren. Dus dat duurt nog wel een tijdje...
ikkedikke - 12/03/2007 16:28
PHP expert
waarom doe je het niet gewoon met
if(isset($aUsers[$_POST['sUser']]) && $aUsers[$_POST['sUser']] == $_POST['sPass'])
?
Je kan dat aangeven door er een multidimenisionale array van te maken.
=>
array(
'user' =>array(
'pass'=>'bla',
'admin'=>true)
)
Thomas - 12/03/2007 16:31
Moderator
Citaat:
eel vreemd, toen ik mijn manier had geprobeerd kon ik inloggen met een ander loginnaam en mijn wachtwoord, nu doet hij het wel weer
Wss had je dan ergens een = staan, in plaats van een == .
mens - 12/03/2007 16:37 (laatste wijziging 12/03/2007 16:39)
Onbekend
De code
$gebruiker['mens'][1] == 'wachtwoord';
$gebruiker['pts'][0] == 'pts';
$gebruiker [ 'mens' ] [ 1 ] == 'wachtwoord' ;
$gebruiker [ 'pts' ] [ 0 ] == 'pts' ;
werkt niet, want dan kun je niet meer inloggen. Ik wil gewoon een simpel en kort systeempje hebben wat ik snap (en ik ben een beginner dus...)
Ibrahim - 12/03/2007 16:41
PHP expert
Je bent een beginner, dus... wij moeten het oplossen ?
Nu gebruik je toch een ander soort van array. Bekijk ikkedikkes oplossing voor je rank probleem.
mens - 12/03/2007 16:43 (laatste wijziging 12/03/2007 16:46)
Onbekend
Citaat:
Je bent een beginner, dus... wij moeten het oplossen ?
Nee, sorry. Zo bedoel ik het niet. Maar ik bedoel dat ik het het liefst ook snap. Want als ik het snap kan ik mijn script later ook weer beter maken. Dat bedoelde ik.
En ikkedikke's antwoord dat doet het bij mij niet echt:
$gebruiker['mens'] array('mens' ==> 'test', 'admin' ==> true);
$gebruiker [ 'mens' ] array ( 'mens' ==> 'test' , 'admin' ==> true ) ;
Dan geeft hij bij mij een fout:
Parse error: parse error, unexpected T_ARRAY in /home/httpd/vhosts/stwc.nl/subdomains/wessel/httpdocs/loginscript/controle.php on line 2
Stijn - 12/03/2007 16:50 (laatste wijziging 12/03/2007 16:54)
PHP expert
je moet geen 2x '=' plaatsten maar 1x '=' want je zet een waarde voor die variable.
Je code is goed hierboven alleen moet deze nog een uitbreiding krijgen voor status (admin/medewerker/member). Deze zal nu wel werken
<?php
session_start();
$aUsers = array(
array( 'mens' , 'password01' , 'admin' ),
array( 'stijn' , 'password02' , 'member' )
);
foreach( $aUsers as $key => $value ) {
if( $_POST['loginnaam'] == $value[0] && $_POST['wachtwoord'] == $value[1] ) {
$_SESSION['login'] = $key;
echo 'Welkom ' . $value;
header('Refresh: 3 ; URL = ' . $_SERVER['PHP_SELF']);
exit();
}
}
//infor weergeven van de gebruiker
echo 'Gebruikersnaam: ' . $aUsers[ $_SESSION['login'] ][0];
echo 'Wachtwoord: ' . $aUsers[ $_SESSION['login'] ][1];
echo 'Status: ' . $aUsers[ $_SESSION['login'] ][3];
?>
<?php
array ( 'mens' , 'password01' , 'admin' ) , array ( 'stijn' , 'password02' , 'member' ) ) ;
foreach ( $aUsers as $key => $value ) {
if ( $_POST [ 'loginnaam' ] == $value [ 0 ] && $_POST [ 'wachtwoord' ] == $value [ 1 ] ) {
$_SESSION [ 'login' ] = $key ;
header ( 'Refresh: 3 ; URL = ' . $_SERVER [ 'PHP_SELF' ] ) ; }
}
//infor weergeven van de gebruiker
echo 'Gebruikersnaam: ' . $aUsers [ $_SESSION [ 'login' ] ] [ 0 ] ; echo 'Wachtwoord: ' . $aUsers [ $_SESSION [ 'login' ] ] [ 1 ] ; echo 'Status: ' . $aUsers [ $_SESSION [ 'login' ] ] [ 3 ] ; ?>
Om een nieuwe gebruiker toe te voegen moet je gewoon een array eronder zetten.
$aUsers = array(
array( 'mens' , 'password01' , 'admin' ),
array( 'stijn' , 'password02' , 'member' ),
array('gebruikersnaam' , 'wachtwoord' , 'status')
);
array ( 'mens' , 'password01' , 'admin' ) , array ( 'stijn' , 'password02' , 'member' ) , array ( 'gebruikersnaam' , 'wachtwoord' , 'status' ) ) ;
groeten
stijn
*edit*
Wil je een rij verwijderen?
<?php
$id = 1; //de account 'stijn' verwijderen
unset( $aUsers[1] );
?>
<?php
$id = 1 ; //de account 'stijn' verwijderen
?>
ikkedikke - 12/03/2007 16:50
PHP expert
er moet nog een = tussen;)
verder moeten die '==>' '=>' zijn
en daarbij komt dat je nu een andere array gebruikt, en dus je script wat aan moet passen!
Gesponsorde links
Dit onderwerp is gesloten .