login  Naam:   Wachtwoord: 
Registreer je!
 Nota's op tutorial:

Tutorials > PHP > Loginsysteem
Pagina:

Reacties op de tutorial Loginsysteem


Offline  ikkedikke
Gepost op: 19 augustus 2006 - 14:16
PHP expert

het zit mooi en duidelijk in elkaar, maar toch 3 opmerkingen 
1:
in is_email():
return ($match_local && $match_host ? true : false);
beetje onzinnig als je verkorte if's gaat gebruiken als je ze ook helemaal weg kan laten=>
return ($match_local && $match_host );
2:
als je nu een acount maakt en je verandert daarna je email weet je niet meer of het adres echt van die persoon is, je zou eigenlijk de account opnieuw moeten 'activeren'. of het registreeradres altijd onthouden.

Offline  Maarten
Gepost op: 19 augustus 2006 - 14:21
Erelid

1: dat is een codestijl, het is ook niet de bedoeling dat je deze code overneemt, maar dat je ze snapt.
2: dan moet je dat doen, als je de tutorial doorgelopen hebt weet je wanneer een account niet geactiveerd is en is het dus kinderspel om dit te doen.

Offline  Thomas
Gepost op: 21 augustus 2006 - 14:36
Moderator

Ik zou functies in een aparte include zetten, en niet declareren op het moment dat ik ze nodig heb .
Wat ik ook anders zou doen is die activatie-tabel. Uit het afwezig zijn van een gegeven kun je in principe niet zoveel afleiden - ik zou die activatie-hash onderbrengen in de gebruikers-tabel en een extra kolom "actief" of "is_actief" aanmaken. De tabel gebruikers_activaties is dan in principe overbodig.

Bij registratie: vul hash en zet "actief" op 0.
Bij activeren: controleer hash en (als deze klopt) reset deze hash en zet "actief" op 1 (zodat men deze hash niet opnieuw kan gebruiken om het account actief te maken).

Je kunt dan later (m.b.v. "actief") accounts van mensen weer de-activeren mocht dit nodig zijn.

Offline  Maarten
Gepost op: 21 augustus 2006 - 14:52
Erelid

Waarom EN een hash EN een actief veld? Als de hash er is is hij niet actief en anders wel, daar heb je geen 2 velden voor nodig?
Ik doe dit in een aparte tabel ivm plaatsbesparing. Als je 5000 leden hebt, waar er 4980 accounts geactiveerd zijn, zijn dat 4980 kolommen die geen nut hebben (of ik jouw geval 9960). In mijn geval zijn er slechts 20 rijen van 2 kolommen, wat dus 40 velden maakt.

Overigens schrijf ik ook ergens in m'n tutorial dat het verstandig is om functies in een apart bestand te declareren, zo doe ik het ook altijd.

Offline  Thomas
Gepost op: 21 augustus 2006 - 16:09
Moderator

Citaat:
Waarom EN een hash EN een actief veld?
Omdat het twee verschillende doelen dient.

Citaat:
Als de hash er is is hij niet actief en anders wel, daar heb je geen 2 velden voor nodig?
En wat als je een account wilt uitschakelen (waarmee je dus in feite een e-mailadres onbruikbaar maakt)? Hoe kun je dat bij jouw opzet aangeven? Het beste lijkt mij om één "hoofdschakelaar" per account te hebben: "actief" (0 of 1).

Citaat:
Ik doe dit in een aparte tabel ivm plaatsbesparing. Als je 5000 leden hebt, waar er 4980 accounts geactiveerd zijn, zijn dat 4980 kolommen die geen nut hebben (of ik jouw geval 9960). In mijn geval zijn er slechts 20 rijen van 2 kolommen, wat dus 40 velden maakt.
Na de activatie zou je deze kolom voor een lost- of reset-pass hash kunnen gebruiken, zodat het af en toe nog enig doel dient. Lege kolommen nemen volgens mij geen ruimte in dacht ik?

Citaat:
Overigens schrijf ik ook ergens in m'n tutorial dat het verstandig is om functies in een apart bestand te declareren, zo doe ik het ook altijd.
Goed voorbeeld doet goed volgen . Geef dus het goede voorbeeld ;).

Offline  Maarten
Gepost op: 21 augustus 2006 - 16:46
Erelid

Citaat:
Omdat het twee verschillende doelen dient.
IMO niet 
Citaat:
En wat als je een account wilt uitschakelen
Daar bestaan rechtenmodellen en zo voor? De bedoeling van deze tutorial is om mensen de basis logica bij een loginsysteem aan te geven. Eens je door hebt dat je gegevens kan opvragen met de sessievariabelen is een basis rechtenmodel waar bv. level 0 'inactief' is geen probleem?
Citaat:
Na de activatie zou je deze kolom voor een lost- of reset-pass hash kunnen gebruiken, zodat het af en toe nog enig doel dient.
Of het gewoon niet gebruiken, dan moet het ook niet geforceerd tot enig nut gaan dienen.
Citaat:
Lege kolommen nemen volgens mij geen ruimte in dacht ik?
Wel op je scherm (databasebeheer)
Citaat:
Goed voorbeeld doet goed volgenĀ . Geef dus het goede voorbeeld ;).
Als mensen de code klakkeloos willen overnemen zonder aandacht te besteden aan de opmerkingen waarin dergelijke zaken staan moeten ze daar zelf maar de gevolgen van dragen. Ik kan niet voor iedereen's scenario een tutorial voorzien. De ene persoon werkt met templatepower, de andere niet. De ene heeft een persoonlijke library structuur, de andere niet.

Ieder moet gewoon voor zich de code analyseren, het snappen het zelf maken imo. Anders had ik het wel gewoon bij de scripts gepost en dan was de opzet wel iets groter geweest.

Offline  xSc
Gepost op: 22 augustus 2006 - 11:36
Onbekend

$_SESSION = array();
session_destroy();

$_SESSION is toch al een array? 

Waarom gebruik je htmlentities() voor <form action=""> ?

Je foutcontrole vind ik niet echt super ofzo. Beetje goedkoop.

Offline  Maarten
Gepost op: 22 augustus 2006 - 11:37
Erelid

True. Met $_SESSION = array() is hij terug leeg 

Offline  xSc
Gepost op: 22 augustus 2006 - 11:39
Onbekend

Ja, maar daarna gooi je de sessie weg (destroy), dus heb je ook al de beginwaarde. De regel is dus niet nodig.

Ik ben het verder met FangorN eens dat je actief als aparte kolom in je gebruikerstabel moet zetten, maar niet in een aparte tabel.

isset($_SESSION['gebruiker']))

Ik vind dit echt veel te zwak. Ik zou loginsessies ook bijhouden in een tabel. Sla ook het ip en een controlegetal op en vergelijk deze met elkaar (sessie en db (en $_SERVER['REMOTE_ADDR'])). Bij elke pageview een ander controlegetal nadat de controle oke is.

Gebruikersnaam niet opslaan in sessie, maar alleen gebruikers_id. Dat is voldoende.

Offline  Maarten
Gepost op: 22 augustus 2006 - 11:46
Erelid

Mjah okey die $_SESSION array legen en dan destroyen is inderdaad wel dom, heb dat even aangepast.

Maar die activatietabel ga ik echt niet aanpassen, dat is een kwestie van persoonlijke voorkeur en niet het beter functioneren en het netter uitzien van je code.

Offline  Ultimatum
Gepost op: 24 augustus 2006 - 13:23
PHP expert

goei tutorial voor de beginner , heb er zelf ook nuttige dingen van opgestoken 

nog 1 opmerking, overal haal je html buiten php wat fantastisch is maar op de 2 na laatste regel van control panel.php doe je dit

  1. echo 'Je bent niet ingelogged, klik <a href="login.php">hier</a> om dit te doen.';


waaron zet je hier dat opeens in een echo, vond dat wel vreemd , maar verder goed hoor 

ook ben ik het met de rest mee eens over gebruikers activqtiesleutel in gebruikers tabel^^

Offline  Maarten
Gepost op: 24 augustus 2006 - 13:46
Erelid

Omdat het over 1 regel HTML gaat. Als het over meerdere lijnen gaat zet ik de HTML wel buiten PHP.

Offline  Ultimatum
Gepost op: 24 augustus 2006 - 13:50
PHP expert

ja maar ergens anders heb je ook over 1 lijn html buiten php als ik het me goed herinner.

Offline  Maarten
Gepost op: 24 augustus 2006 - 13:56
Erelid

Oei, wat een drama.

Offline  remy_jacobs
Gepost op: 12 december 2006 - 21:32
Nieuw lid

heb een vraag wat is de code om een pagina alleen kan kijken als je ingelogd bent

Offline  Maarten
Gepost op: 02 januari 2007 - 23:53
Erelid

Leer lezen...

Citaat:
Op het controlepaneel moet eerst en vooral gecontroleerd worden of we wel ingelogged zijn. Dit doe je simpelweg als volgt:
[en hier staat dan de code]

Offline  meddie
Gepost op: 08 januari 2007 - 19:28
Nieuw lid

Alles goed uitgelegd toppie:). Heb al het een en ander geleerd.

Maar(nu komt het)

Ik blijf een loop krijgen:

login -> u bent ingelogd ga naar controlepaneel.php -> u bent niet ingelogd klik hier om u in te loggen:@

Ik heb het script en de uitleg wel 1000 keer doorgelezen en ik zie de fout maar niet:(

Hieronder controlepanneel.php:

  1. <?php
  2.  
  3. include "connect.php";
  4.  
  5. // Zorg dat hierboven ERGENS session_start() staat!
  6. if(isset($_SESSION['gebruiker'])) {
  7. // E-mailadres bijwerken:
  8. // De variabele fout aanmaken om fouten ivm 'undefined variable' te voorkomen
  9. $fout = '';
  10. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  11. // Zelfde functie als bij registratie
  12. // Een globale functies.php waarin je al je functies gooit is dus wel handig
  13. function is_email($in) {
  14. list($local, $host) = explode('@', $in);
  15. $pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.'
  16. . '([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
  17. $pattern_host = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)'
  18. . '[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';
  19. $match_local = eregi($pattern_local, $local);
  20. $match_host = eregi($pattern_host, $host);
  21.  
  22. return ($match_local && $match_host ? true : false);
  23. }
  24.  
  25. if(!is_email($_POST['email'])) {
  26. $fout = 'Geen geldig e-mailadres!';
  27. } else {
  28. mysql_query("UPDATE gebruikers SET
  29. email = '".mysql_real_escape_string($_POST['email'])."'
  30. WHERE id = ".$_SESSION['gebruiker']);
  31. // Vervolgens moet de pagina vernieuwd worden.
  32. header('Location: '.$_SERVER['REQUEST_URI']);
  33. }
  34. } else {
  35. // Het formulier is nog niet verzonden, dus vullen we het veldje met het huidig e-mailadres
  36. $email = mysql_result(mysql_query("SELECT email FROM gebruikers WHERE id = ".$_SESSION['gebruiker']),0);
  37. }
  38. ?>
  39. <h1>Welkom, <?=htmlentities($_SESSION['gebruikersnaam'])?>!</h1>
  40. Wijzig je e-mailadres:
  41. <?=$fout?>
  42. <form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
  43. <input type="text" name="email" value="<?=htmlentities($email)?>" />
  44. <input type="submit" value="Bijwerken" />
  45. </form>
  46. <a href="uitloggen.php" onclick="return confirm('Ben je zeker dat je je wilt afmelden?');">Uitloggen</a>
  47. <?php
  48. } else {
  49. echo 'Je bent niet ingelogged, klik <a href="login.php">hier</a> om dit te doen.';
  50. }
  51. ?>


Hier connect.php(allemaal in de zelfde map):
  1. <?php
  2.  
  3. //All settings for a connecetion to my own database
  4.  
  5. define("SERVER", "localhost");
  6. // string server
  7. define("USERNAME", "***");
  8. // string username
  9. define("PASSWORD", "***");
  10. // string password
  11. define("DATABASE", "***");
  12. // string database
  13.  
  14. mysql_connect(SERVER, USERNAME, PASSWORD) or die("Er kan geen verbinding gemaakt worden met de database, MySQL retouneerde: ".mysql_error());
  15. mysql_select_db(DATABASE) or die("Er kan geen database geselecteerd worden. MySQL retouneerde devolgende error: ".mysql_error());
  16.  
  17. ?>


Het registreren/activeren werk perfect( goede oplossing voor het activatieprobleem:))

Ziet iemand de fout? 

alvast bedankt voor alle moeite

gr

Meddie


Offline  Elpiedro
Gepost op: 11 februari 2007 - 00:18
PHP interesse

Hey kleine opmerking weet niet of het al aangepast is, maar ik heb de tutorial gebruikt en de login pagina verwerkt en aangepast om mijn eigen pagina.

Maar ik had als ik geen paswoord en geen gebruikersnaam invult hij gewoon inlogd. gewoon de functie if(!empty(... gebruiken.


Mooi scriptje trouwens

Offline  Showie
Gepost op: 18 maart 2007 - 15:37
Nieuw lid

Ik heb dit loginsysteem even geprobeerd en het werkt perfect totdat ik op een andere knop van mijn website klik, dan ben ik opeens uitgelogged.

Iemand een idee hoedat ik die sessie kan laten onthouden ?

Offline  riekele
Gepost op: 18 maart 2007 - 17:53
PHP beginner

<?php
session_start();
?>

bovenaan de andere pagina's zetten

Offline  leroyvanloon
Gepost op: 20 augustus 2007 - 11:21
Lid

Uhm...
Ik ben met een klanten paneel bezig.
En ik heb eventjes snel deze tut gekopieerd.

Alleen mijn controle paneel doet het niet.

http://www.insane-hosting.nl/klantenpaneel
Login: Leroyl
Pass: test

  1. <?php
  2. include("config.php");
  3. if(isset($_SESSION["gebruiker"])) {
  4.  
  5. $fout = '';
  6. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  7. function is_email($in) {
  8. list($local, $host) = explode('@', $in);
  9. $pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.'
  10. . '([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
  11. $pattern_host = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)'
  12. . '[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';
  13. $match_local = eregi($pattern_local, $local);
  14. $match_host = eregi($pattern_host, $host);
  15.  
  16. return ($match_local && $match_host ? true : false);
  17. }
  18.  
  19. if(!is_email($_POST['email'])) {
  20. $fout = 'Geen geldig e-mailadres!';
  21. } else {
  22. mysql_query("UPDATE gebruikers SET
  23. email = '".mysql_real_escape_string($_POST['email'])."'
  24. WHERE id = ".$_SESSION['gebruiker']);
  25. // Vervolgens moet de pagina vernieuwd worden.
  26. header('Location: '.$_SERVER['REQUEST_URI']);
  27. }
  28. } else {
  29. // Het formulier is nog niet verzonden, dus vullen we het veldje met het huidig e-mailadres
  30. $email = mysql_result(mysql_query("SELECT email FROM gebruikers WHERE id = ".$_SESSION['gebruiker']),0);
  31. }
  32. ?>
  33. <h1>Welkom, <?=htmlentities($_SESSION['gebruikersnaam'])?>!</h1>
  34. Wijzig je e-mailadres:
  35. <?=$fout?>
  36. <form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
  37. <input type="text" name="email" value="<?=htmlentities($email)?>" />
  38. <input type="submit" value="Bijwerken" />
  39. </form>
  40. <a href="uitloggen.php" onclick="return confirm('Ben je zeker dat je je wilt afmelden?');">Uitloggen</a>
  41. <?php
  42. } else {
  43. echo 'Je bent niet ingelogged, klik <a href="login.php">hier</a> om dit te doen.';
  44. }
  45. if ($i) {
  46.  
  47. if ($c) {
  48.  
  49. } // if ($c)
  50.  
  51. } // if ($i)
  52. ?>

Offline  field33
Gepost op: 01 september 2007 - 09:47
Nieuw lid

Ik raad aan cookies te gebruiken.

Offline  ethm
Gepost op: 22 november 2007 - 10:37
Nieuw lid

Top script, bedankt! Alleen loop ik net als de andere tegen het probleem dat wanneer je inlogt niet naar de adminpanel kan gaan (want dan zegt ie dat je niet ingelogd bent). Wie weet misschien de oplossing? Bedankt!

Offline  field33
Gepost op: 24 november 2007 - 14:42
Nieuw lid

ethm schreef:
Top script, bedankt! Alleen loop ik net als de andere tegen het probleem dat wanneer je inlogt niet naar de adminpanel kan gaan (want dan zegt ie dat je niet ingelogd bent). Wie weet misschien de oplossing? Bedankt!
session_start() of cookies...

Offline  ogierepier
Gepost op: 27 februari 2008 - 13:14
Nieuw lid

Hallo,
Ik heb de tutorial gelezen en het script overgenomen en aangepast, ik heb alleen 1 vraag is het de bedoeling dat na het invullen van de registratiegegevens op registratie.php dat die gegevens al in de database terechtkomen? want hij verstuurt de email wel met activatiecode maar zonder gebruikersid en er staan dan nog geen gegevens in de tabellen gebruikers en gebruikers_activaties... ook als ik op de activatielink in de e-mail klik krijg ik op activatie.php het bericht dat de account niet bestaat of reeds geactiveerd is terwijl dit helemaall niet het geval is

Wat zou er fout kunnen zijn?

Offline  syssin
Gepost op: 31 december 2008 - 01:40
Nieuw lid

field33 schreef:
[..quote..]session_start() of cookies...


Ik gebruik session_start() maar dan krijg ik een 500..

Iemand raad?

Pagina:

Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.161s