login  Naam:   Wachtwoord: 
Registreer je!
 Forum

login systeem

Offline mens - 11/03/2007 20:48
Avatar van mensOnbekend Ik heb van iemand deze code gekregen:

  1. <?php
  2. $aUsers = array('loginnaam' => 'wachtwoord');
  3.  
  4. if( array_key_exists( $_POST['loginnaam'] ) && in_array( $_POST['wachtwoord'] ) )
  5. {
  6. echo "U bent succesvol ingelogt!";
  7. }
  8. else
  9. {
  10. echo "Het is niet gelukt om in te loggen";
  11. }
  12. ?>


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
Offline AgentX - 11/03/2007 20:51 (laatste wijziging 11/03/2007 20:51)
Avatar van AgentX HTML beginner je moet natuurlijk wel ingeven in welke array hij moet zoeken:

  1. <?php
  2. $aUsers = array('loginnaam' => 'wachtwoord');
  3.  
  4. if(array_key_exists($_POST['loginnaam'], $aUsers) && in_array($_POST['wachtwoord'],$aUsers)){
  5. echo "U bent succesvol ingelogt!";
  6. }
  7. else{
  8. echo "Het is niet gelukt om in te loggen";
  9. }
  10. ?>
Offline Ibrahim - 11/03/2007 20:51
Avatar van Ibrahim PHP expert ooh, dat was ik ik was de $aUsers vergeten in de parameters
  1. <?php
  2. $aUsers = array('loginnaam' => 'wachtwoord');
  3.  
  4. if( array_key_exists( $_POST['loginnaam'], $aUsers ) && in_array( $_POST['wachtwoord'], $aUsers ) )
  5. {
  6. echo "U bent succesvol ingelogt!";
  7. }
  8. else
  9. {
  10. echo "Het is niet gelukt om in te loggen";
  11. }
  12. ?>
Offline mens - 11/03/2007 20:54 (laatste wijziging 11/03/2007 20:54)
Avatar van mens Onbekend Jaa, hij doet het! Bedankt^^ ^^

Alleen hoe voeg je dan een gebruiker toe?
Offline Ibrahim - 11/03/2007 20:56 (laatste wijziging 11/03/2007 20:57)
Avatar van Ibrahim 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

  1. $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:

  1. foreach( $aUsers as $sLoginNaam => $sWachtWoord )
  2. {
  3. if( $_POST['loginnaam'] == $sLoginNaam && $_POST['wachtwoord'] == $sWachtWoord )
  4. {
  5. // ingelogged
  6. }
  7. else
  8. {
  9. // niet ingelogged
  10. }
  11. }
Offline mens - 11/03/2007 21:01 (laatste wijziging 11/03/2007 21:13)
Avatar van mens Onbekend Ik wil juist dat er meerde gebruikers kunnen zijn, maar dat die niet in kunnen loggen met iemand anders zijn wachtwoord.
Offline Ibrahim - 11/03/2007 23:20
Avatar van Ibrahim PHP expert zie edit in reply hierboven dan 
Offline mens - 12/03/2007 07:09
Avatar van mens Onbekend Ja, maar hoe moet je dan gebruikers toevoegen?

P.S.
Let op! Ik ben echt een beginner!
Offline Ultimatum - 12/03/2007 07:11
Avatar van Ultimatum PHP expert Door ze in deze array in te voegen (zoals ook in de edit van siliecom staat..

  1. <?php
  2. $aUsers = array('loginnaam' => 'wachtwoord', 'loginnaam2' => 'wachtwoord');
  3. ?>
Offline mens - 12/03/2007 07:12 (laatste wijziging 12/03/2007 07:22)
Avatar van mens Onbekend Er klopt volgens mij niet zoveel van, ik heb deze code gebruikt:

  1. <?php
  2. $aUsers = array('mens' => 'test', 'mens2' => 'test2');
  3.  
  4. foreach( $aUsers as $sLoginNaam => $sWachtWoord )
  5. {
  6. if( $_POST['naam'] == $sLoginNaam && $_POST['wachtwoord'] == $sWachtWoord )
  7. {
  8. echo "Ingelogd!";
  9. }
  10. else
  11. {
  12. echo "niet ingelogd!";
  13. }
  14. }
  15. ?>


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!
Offline jeroentjuh - 12/03/2007 07:49
Avatar van jeroentjuh PHP ver gevorderde Zo kan het ook.
  1. <?php
  2. $aUsers = array('mens' => 'test' , 'mens2' => 'test2');
  3.  
  4. if( array_key_exists( $_POST['loginnaam'], $aUsers ) && $aUsers[$_POST['loginnaam']] == $_POST['wachtwoord'] )
  5. {
  6. echo "U bent succesvol ingelogt!";
  7. }
  8. else
  9. {
  10. echo "Het is niet gelukt om in te loggen";
  11. }
  12. ?>
Offline Chupskie - 12/03/2007 08:11
Avatar van Chupskie 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?!
Offline Ibrahim - 12/03/2007 08:33 (laatste wijziging 12/03/2007 08:33)
Avatar van Ibrahim PHP expert
  1. <?php
  2. $aUsers = array('mens' => 'test' , 'mens2' => 'test2');
  3.  
  4. if( array_key_exists( $_POST['loginnaam'], $aUsers ) && $aUsers[$_POST['loginnaam']] == $_POST['wachtwoord'] )
  5. {
  6. echo "U bent succesvol ingelogt!";
  7. }
  8. else
  9. {
  10. echo "Het is niet gelukt om in te loggen";
  11. }
  12. ?>


Dit is inderdaad een goeie oplossing door jeroentjuh, denk ik 
Offline Chupskie - 12/03/2007 08:43
Avatar van Chupskie MySQL beginner @siliecom14, ik snap je antwoord niet helemaal.
Ben je nu serieus? Of bedoel je je reactie nu sarcastisch?
Offline Ibrahim - 12/03/2007 08:47
Avatar van Ibrahim PHP expert ik bedoelde het sirieus, maar nu ik erover nadenk denk ik toch dat dat niet klopt 
Offline Wave6 - 12/03/2007 09:55
Avatar van Wave6 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?
Offline Ibrahim - 12/03/2007 14:28
Avatar van Ibrahim PHP expert
  1. <?php
  2. $aUsers['siliecom14'] = 'wachtwoord';
  3. $aUsers['mens'] = 'wachtwoord2';
  4.  
  5. $notloggedin = false;
  6.  
  7. foreach( $aUsers as $sLogin => $sWachtWoord )
  8. {
  9. if( $_POST['admin_naam'] == $sLogin && $_POST['admin_password'] == $sWachtWoord )
  10. {
  11. $_SESSION['loggedin'] = 1;
  12.  
  13. header('Location: ' . $aGlobal['path'] . 'modules/admin/');
  14. }
  15. else
  16. {
  17. $notloggedin = true;
  18. }
  19. }
  20.  
  21. if( $notloggedin )
  22. {
  23. echo 'Niet ingelogged';
  24. }
  25. ?>


Dit werkt prima
Offline Thomas - 12/03/2007 14:43 (laatste wijziging 12/03/2007 14:44)
Avatar van Thomas Moderator Die for-lus is echt niet nodig.

Je kunt zoiets doen?

  1. <?php
  2. if(in_array($_POST['username'], array_keys($aUsers)) && $aUsers[$_POST['username']] == $_POST['password']) {
  3. // login ok
  4. // ...
  5. ?>


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...
Offline mens - 12/03/2007 15:52 (laatste wijziging 12/03/2007 16:02)
Avatar van mens 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:

  1. <?php
  2. $gebruiker['siliecom14'] = 'wachtwoord';
  3. $gebruiker['mens'] = 'test';
  4. $gebruiker['pts'] = 'pts';
  5.  
  6. if(in_array($_POST['naam'], array_keys($gebruiker)) AND $gebruiker[$_POST['naam']] == $_POST['wachtwoord']) {
  7. echo "U bent succesvol ingelogd!";
  8. }else{
  9. echo "U heeft de verkeerde gebruikersnaam/wachtwoord ingetypt!";
  10. }
  11.  
  12. ?>


Bedankt mensen!^^
Offline Ibrahim - 12/03/2007 16:07
Avatar van Ibrahim PHP expert @Fangorn,

heel vreemd, toen ik mijn manier had geprobeerd kon ik inloggen met een ander loginnaam en mijn wachtwoord, nu doet hij het wel weer 
Offline mens - 12/03/2007 16:23
Avatar van mens 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.?
Offline Ibrahim - 12/03/2007 16:26
Avatar van Ibrahim PHP expert
  1. <?php
  2. $aUsers['naam'][0] = 'siliecom14';
  3. $aUsers['wachtwoord'][0] = 'wachtwoord';
  4. $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.)
Offline mens - 12/03/2007 16:27
Avatar van mens 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...
Offline ikkedikke - 12/03/2007 16:28
Avatar van ikkedikke 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)
)
Offline Thomas - 12/03/2007 16:31
Avatar van Thomas 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 == .
Offline Ibrahim - 12/03/2007 16:34
Avatar van Ibrahim PHP expert lol, dan moet ik me heeeeeeeel diep gaan schamen  
Offline mens - 12/03/2007 16:37 (laatste wijziging 12/03/2007 16:39)
Avatar van mens Onbekend De code

  1. $gebruiker['mens'][1] == 'wachtwoord';
  2. $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...)
Offline Ibrahim - 12/03/2007 16:41
Avatar van Ibrahim 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.
Offline mens - 12/03/2007 16:43 (laatste wijziging 12/03/2007 16:46)
Avatar van mens 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:

  1. $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
Offline Stijn - 12/03/2007 16:50 (laatste wijziging 12/03/2007 16:54)
Avatar van Stijn 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 

  1. <?php
  2.  
  3. $aUsers = array(
  4. array( 'mens' , 'password01' , 'admin' ),
  5. array( 'stijn' , 'password02' , 'member' )
  6. );
  7.  
  8. foreach( $aUsers as $key => $value ) {
  9.  
  10. if( $_POST['loginnaam'] == $value[0] && $_POST['wachtwoord'] == $value[1] ) {
  11. $_SESSION['login'] = $key;
  12. echo 'Welkom ' . $value;
  13. header('Refresh: 3 ; URL = ' . $_SERVER['PHP_SELF']);
  14. exit();
  15. }
  16.  
  17. }
  18.  
  19. //infor weergeven van de gebruiker
  20. echo 'Gebruikersnaam: ' . $aUsers[ $_SESSION['login'] ][0];
  21. echo 'Wachtwoord: ' . $aUsers[ $_SESSION['login'] ][1];
  22. echo 'Status: ' . $aUsers[ $_SESSION['login'] ][3];
  23. ?>


Om een nieuwe gebruiker toe te voegen moet je gewoon een array eronder zetten.

  1. $aUsers = array(
  2. array( 'mens' , 'password01' , 'admin' ),
  3. array( 'stijn' , 'password02' , 'member' ),
  4. array('gebruikersnaam' , 'wachtwoord' , 'status')
  5. );


groeten
stijn

*edit*

Wil je een rij verwijderen?

  1. <?php
  2. $id = 1; //de account 'stijn' verwijderen
  3. unset( $aUsers[1] );
  4. ?>
Offline ikkedikke - 12/03/2007 16:50
Avatar van ikkedikke 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.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.376s