Ik wil een inlogsysteem maken

Status
Niet open voor verdere reacties.

umitg

Gebruiker
Lid geworden
15 mei 2008
Berichten
352
Dag beste leden van Helpmij.nl!:)
Ik wil graag een inlogsysteem maken en zoals je in mijn andere topic kan zien heb ik ook niet veel verstand van PHP.
Heeft er iemand een idee/code ect. die ik kan gebruiken.
Alvast heel erg bedankt:D:thumb:
 
inlogsysteempje

ik heb zelf een inlogsysteempje gebouwd.
Alleen nu het probleem, je kan wel niet zonder wachtwoord en gebruikersnaam verder, maar als je gewoon naar het adres van de pagina gaat die beveiligd moet worden gaat, kan je daar gewoon op. Ofterwel...., begrijpen jullie?

test maar. Je naam is tester, wachtwoord hetzelfde.

http://home.kliksafe.nl/knulst/proberen/
 
gelukt beetje

is een beetje gelukt, door alleen toe te staan als hij in een frame staat, en anders naar inlogpagina.., maarja, dan zit je in die pagina, die wel gewoon iedereen kan aanroepen.., is echt erg lastig

iemand hulp?
 
uitleg

ja dat wil ik graag.
alleen schrik niet.
Het is zo simpel als maar kan.

de inlogpagina is html, die naar poster.php via optie post de gegevens post.
Hier php script:

PHP:
<?php
$gebr = htmlspecialchars($_POST["field1"]);
$ww = htmlspecialchars($_POST["field2"]);

$gebrcontrol0 = ('ikke');
$wwcontrol0 = ('ikke');
$gebrcontrol1 = ('ikke');
$wwcontrol1 = ('ikke');







if ($gebr == $gebrcontrol0 && $ww == $wwcontrol0) { echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/beveiligdepagina.html">';  } else



{
  echo '

<html>
<head>

<style type="text/css">
 <!-- 
 
 body
 {
 scrollbar-arrow-color: #FFFF00;
 scrollbar-face-color: #FFCC00;
 scrollbar-highlight-color: #FFFFFF;
 scrollbar-3dlight-color: #666600;
 scrollbar-shadow-color: #FF9900;
 scrollbar-darkshadow-color: #660000;
 scrollbar-track-color: #FFFFCC;
 }
 
-->
 </style>

<title=".">
</head>
<body bgcolor="#FFCC00">
<table border="0" bgcolor="#FFCC00" align="center" valign="top" cellspacing="9" cellpadding="0">
      <tr bgcolor="#FFFFCC">
        <td  align="center">
         <font size="6" color="#FF4D00">H2CHAOS</font><p>

Sorry, de door jou ingevoerde gegevens komen niet overeen.
</body>
</html>


';
}

?>


die bovenste login gebeure ($wwcontrol0 = ('ikke'); ) staat er 30 x

dat andere stuk eronder ook 30 keer.

als dus account klopt, nr. 1 gaat ie die pagina openen. anders volgende proberen. als niets kan gaat hij naar waarschuwingspagina.

in normale site zit tegenovergestelde van framebraker. ofterwel, niet in een frame, gaat hij naar inlogscherm.
inlogscherm verwijsd door naar pagina met frame.

werkt dus niet egt super, maargoed, knap ontwikkeld van mezelf vind ik, aangezien ik net begin met php, en html alleen nog maar echt aardig onder de knie heb.
 
Hallo,

Ziet er al aardig uit!
maar zoals je wel begrijpt is het "niet de bedoeling" dat je 30 keer hetzelfde script kopieëerd... daar heeft met "for" loopjes voor uitgevonden...
PHP:
for($x=0;$x<30;$x++){ doe dit 30 keer }
(het < kan verkeerdom staan!)

Maar ook dat is niet z'n beste oplossing.. alhouwel het wel een oplossing kan zijn :P

Nog iets "beter" zou zijn om alle gebruikers in één array te proppen, net als alle wachtwoorden en die dan via
PHP:
foreach($array AS $nr => $var) { doe dit met de array }
uit te gaan leten en er iets mee te gaan doen....

Nog mooier is het dan misschien wel om alles in één array te zetten (zowel usernaam als password) Dit kost tefens ook weer een stukje minder script...
(zie script onderaan!)


Verder zit je dan nog met het probleem dat als je niet ingelogd bent, maar wel de naam van de "beveilige" pagina weet, je die gewoon kunt zien...
Je moet dus ook die pagina's beveiligen zodat je er alleen op kunt komen ALS je succesvol ingelogd bent...
Als je gebruik gaat maken van een gewoone variabele (dus: $a, $appel, $beertje, en alle andere triljard mogelijkheden) dan krijg je het probleem dat deze niet "opgeslagen" wordt op de server... (dus bij het opnieuw laden van een nieuwe pagina, zal deze weer undefined zijn). Je zult daarom gebruik moeten gaan maken van "$_SESSION['NAAM']". deze blijft (volgens standaard instellingen, rond de 15 min bestaan op de server)

M.v.g.
JB'tje

PHP:
<?php 
$pass = '';
$user = '';
if(isset($_POST["field1"], $_POST["field2"]))
{
  $user = htmlspecialchars($_POST["field1"]); 
  $pass = htmlspecialchars($_POST["field2"]); 
}
$gebruikers = array('User'=>'Pass', 'User2'=>'Pass2', 'etc.'=>'etc.');

if(isset($gebruikers[$user],  $gebruikers[$user][$pass]))
{
  $_SESSION['Loggedin'] = TRUE
}else{
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/beveiligdepagina.html">';
}
?>
//NOTE: isset() (of "is set") is een functie dat je, als je een beetje correct wilt PHP'en, vaak zult gebruiken om te controleren of een variabele, array, GET, POST(, functie, class) bestaat. indien die bestaat geeft ie TRUE, anders FALSE.


if(isset($gebruikers[$user], $gebruikers[$user][$pass]))
doet het volgende:
Hij controleerd of in de array "$gebruikers" er een "index" is zoals $user => geeft true of false
Verder controleerd hij of in dezelfde array, bij de "index" $user, de "value" $pass bestaat => geeft true of false

indien 2 keer true, dan de session aanmaken dat je ingelogd bent, anders doorsturen?


PHP:
<?PHP
// Bovenaan de pagina's die beveiligd moeten worden het volgende plaatsen:
if(!isset($_SESSION['Loggedin']) OR $_SESSION['Loggedin'] !== TRUE)
{
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/loginpagina.html">';
  die();
}
?>


Let op: als je gebruik gaat maken van sessions, dan moet je voordat er ook maar enige data naar de user verzonden is, de session starten!
Je zult dus de eerste regel van het onderstaande stukje code, helemaal bovenaan moeten zetten op alle pagina's waar je gebruik gaat maken van sessions.... (zie hieronder het voorbeeld...)
Verder hoef je session_start(); maar één keer aan te roepen PER keer dat de pagina geladen wordt.... (dit is nodige info als je meerdere PHP bestanden laadt, voor één pagina.. door middel van b.v. require of include) Meer info
PHP:
<?PHP session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
 
Laatst bewerkt:
thanks

dank je, alleen nog niet alles is duidelijk. In het script van mij dat je gewijzigd hebt voor sessions, staat dat hij sessie moet aanmaken, vervolgens else, dus anders, als dat niet moet , stuur je door naar die pagina... klopt dat?

vervolgens de beveiliging van de pagina's is beetje onduidelijk, er moet dus dat session start in staan, en if session er niet is terug?
Wil je dat nog even duidelijk zetten?
graag in php, en daaronder als alles "ok" is hem een echo laten geven. Dan gooi ik daar mijn html in, want designen met php kan ik nog niet.

bij voorbaat danK!
 
Hallo,

poster.php
PHP:
<?PHP session_start(); // Session starten... ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Mijn pagina!</title> 
</head>

<body>
<?php  
// variabelen setten (2x)
$pass = ''; 
$user = ''; 

// controleren of de velden gesubmit zijn via de form
if(isset($_POST["field1"], $_POST["field2"])) 
{ 
  // indien gesubmit: die waardes overnemen
  $user = htmlspecialchars($_POST["field1"]);  
  $pass = htmlspecialchars($_POST["field2"]);  
}else{
  // 1 of 2 velden zijn NIET gesubmit, $pass en $user blijven leeg...
}

// Array aanmaken metgebruikersnaam als "ndex"en password als "alue"
$gebruikers = array('User'=>'Pass', 'User2'=>'Pass2', 'etc.'=>'etc.',    'index'=>'value');


// Als er een index is die overeenkomt met $user: true retoerneren
// Als er een value is, BIJ die index gelijk aan $pass, true retoerneren
if(isset($gebruikers[$user],  $gebruikers[$user][$pass])) 
{
  // Zowel user als pass komen overeen: je bent ingelogd
  $_SESSION['Loggedin'] = TRUE 
}else{
  // Of user OF pass OF beiden kwamen niet overeen.... je bent NIET ingelogd (doorlinken?)
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/beveiligdepagina.html">'; 
} 
?>

</body>
</html>


Beveiligde pagina's
PHP:
<?PHP session_start(); // Session starten... ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Pagina 1 van de beveiligde pagina's</title> 
</head> 

<?PHP 
// Controleren OF de session WEL gestart is EN controleren of de session TRUE is.
// Als dat niet zo is: doorlinken naar inlog pagina...
// ik heb het maar ff omgedraaid, dit is wat duidelijker denk ik....
if(isset($_SESSION['Loggedin']) AND $_SESSION['Loggedin'] == TRUE) 
{ }else{
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/loginpagina.html">'; 
  die(); 
}
?>

<?PHP echo 'OK, je bent ingelogd en mag deze tekst zien!'; ?>
Hiet komt de content van deze beveiligde pagina te staan!

</body>
</html>

M.v.g.
JB'tje
 
Freshmeat

Tip !

Kijk eens op www.freshmeat.net

Hier staan honderden php proggies waaronder ook kant en klare login tools, even aanpassen en inloggen maar !!
 
antw

super, ik begrijp het nu.
Alleen het script werkt niet.
het probleem zit hier:

if(isset($gebruikers[$user], $gebruikers[$user][$pass]))

{
$_SESSION['Loggedin'] = TRUE
}

else{

als je dit doet zegt hij: Parse error: syntax error, unexpected '{' in
ofterwel, je haalt die even weg
dan krijg je: Parse error: syntax error, unexpected '}' in

begrijpen jullie?

Sorry, mijn engels is niet zo goed, dat ik die site begrijp, en nu ik zover ben wil ik hem afbouwen ook!
 
Hallo,

Ik heb de code niet getest :P dus kunnen idd enkele foutjes in zitten:P

Ik denk dat het komt doordat er ik een puntkomma ben vergeten te plaatsen...
PHP:
$_SESSION['Loggedin'] = TRUE;
dit is wel correct :P

Tip: Als er een error komt, controleer eerst altijd of de regel erboven wel is afgesloten met een puntkomma.. dat is namelijk in vele gevallen het probleem!

M.v.g.
JB'tje
 
@JB'tje: Beetje overbodige ELSE nietwaar?
PHP:
// controleren of de velden gesubmit zijn via de form
if(isset($_POST["field1"], $_POST["field2"])) 
{ 
  // indien gesubmit: die waardes overnemen
  $user = htmlspecialchars($_POST["field1"]);  
  $pass = htmlspecialchars($_POST["field2"]);  
}else{
  // 1 of 2 velden zijn NIET gesubmit, $pass en $user blijven leeg...
}

En ook hier komt het voor:
PHP:
<?PHP 
// Controleren OF de session WEL gestart is EN controleren of de session TRUE is.
// Als dat niet zo is: doorlinken naar inlog pagina...
// ik heb het maar ff omgedraaid, dit is wat duidelijker denk ik....
if(isset($_SESSION['Loggedin']) AND $_SESSION['Loggedin'] == TRUE) 
{ }else{
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/loginpagina.html">'; 
  die(); 
}
?>
Als je gewoon van de isset() !isset() maakt kun je wat dingen schrappen.
PHP:
<?PHP 
// Controleren OF de session WEL gestart is EN controleren of de session TRUE is.
// Als dat niet zo is: doorlinken naar inlog pagina...
// ik heb het maar ff omgedraaid, dit is wat duidelijker denk ik....
if(!isset($_SESSION['Loggedin']) AND $_SESSION['Loggedin'] == TRUE) {
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/loginpagina.html">'; 
  die(); 
}
?>
 
@Tha Devil:
@JB'tje: Beetje overbodige ELSE nietwaar?

zucht... moet ik hier nog een antwoord op geven?
Is lezen echt zo moeilijk...?
ZIE mijn eerste post in dit topic...

Verder... ze zijn idd overbodig... maar misschien kun je in het vervolg ook de tekst erbij lezen

Het is de bedoeling dat er enige duidelijkheid gehaald kan worden... dus soms is extra code nodig... al is het "commentaar" (dus "//commentaar" in een extra elsje...)
}else{
// 1 of 2 velden zijn NIET gesubmit, $pass en $user blijven leeg...
}

Lezen.......
// ik heb het maar ff omgedraaid, dit is wat duidelijker denk ik....

yup...
Als je gewoon van de isset() !isset() maakt kun je wat dingen schrappen.
idd... zie mijn eerste post in dit topic :(
Verder heb je in je laaste stukje code "AND" staan... dit is fout en moet een OR zijn.... en de == moet een !== zijn.....

M.v.g.
JB' tje

p.s. @tjallingk: laat even weten of de puntkomma de oplossing is, of niet....
 
Laatst bewerkt:
oplossing

jazekers, het is de oplossing! ik had echt vanalles geprobeert, stom dat ik er niet eerder aan heb gedacht. Nu zet ik m'n html in php, maar dat gaat niet zonder horten of stoten. Meeste lukt wel. Zodra ik vragen heb post ik wel.
ik heet overigens tjalling, k is eerste letter achternaam;).

gr. Tjalling
 
Allemachtig, hoezo ik voel me gelijk aangevallen :shocked:

Het is de bedoeling dat er enige duidelijkheid gehaald kan worden... dus soms is extra code nodig... al is het "commentaar" (dus "//commentaar" in een extra elsje...)
Waarom zou je de extra code gaan maken, een regel extra commentaar voldoet toch ook?

Je hebt gelijk dat ik niet volledig heb gelezen, maar dan nog. Met commentaar had je hetzelfde bereikt. :confused:

Wat ik nog wel vreemd vind is dat je dus eerst wel de !isset() gebruikt maar die later ombuigt tot een isset(). De reden hierachter zal wel met het "begrijpen" van de code te maken hebben.

Daarnaast ben ik van mening dat wanneer je zo expliciet een code moet gaan uitleggen er ook wel wat inzet van de TS mag worden verwacht. Snappen ze de code die je geeft niet dan zullen ze ongetwijfeld een reactie plaatsen.
 
ik vroeg om te leren niet om codes:P
als ik er niet veel van af weet kan ik er ook niks mee hé;)
het is niet zomaar Kopieëren en plakken!:p
:thumb:
:thumb:
k vrwacht dus geen codes maar curses.
alvast bedankt;)

PS: Hoe zet ik deze scripts in mijn website ?
 
Laatst bewerkt:
beveiliging

pagina's zijn niet beveiligd, word wel weergegeven.

PHP:
<?PHP 

if(!isset($_SESSION['Loggedin']) AND $_SESSION['Loggedin'] == TRUE) {
  echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/loginpagina.html">'; 
 
}
else
{
 echo'<html>
<head>
 
Hallo,

Daarnaast ben ik van mening dat wanneer je zo expliciet een code moet gaan uitleggen er ook wel wat inzet van de TS mag worden verwacht. Snappen ze de code die je geeft niet dan zullen ze ongetwijfeld een reactie plaatsen.


hehehehe... en dat was dus precies de reden waarom ik de code zo "duidelijk" (naar mijn mening) gepost had.. en idd een beetje "te" uitgebreid, maar wel duidelijk... omdat het dus gevraagd werd :D

Hopelijk begrijp je dat ik zo af en toe een beetje "simpel" wordt van sommige reacties.. en dan kan het idd voorkomen dat ik in een soort van aanval spring :P Trek het je niet al te veel aan, gezien het feit dat je commentaar correct was!

:shocked: zie ik opeens dat het topic gestart is door "umitg" :P (ik ben ook lekker wakker)

PS: Hoe zet ik deze scripts in mijn website ?
Ten eerste heb je PHP ondersteuning nodig op je site... (dit heb je toch hopelijk wel? anders zul je op Javascript moeten overstappen)
Ten 2e zul je moeten begrijpen dat PHP een serverside script is. Het script wordt door de server uitgevoerd en de output resulteert in HTML code (of niets!) die naar je browser gestuurd wordt.
Ten 3e: als je gebruik maakt van PHP, dan zul je dite ALTIJD in een PHP bestand moeten zetten: HTML code kan WEL gebruikt worden in zowel een html/php bestand, maar PHP kan alleen gebruikt worden in een PHP bestand (dus .php als extensie of in specifieke gevallen: .php4 .php5 of .php6 (de laatste komt nog!))


Wat je dus moet doen om je pagina's te beveiligen:
- Optie 1: het loginform in een HTML bestandje zetten, en de form doorlinken naar het PHP bestandje
- Optie 2: het loginform in een PHP bestandje zetten, en de form naar hetzelfde bestand linken.

Nu kan ik hier wel alle code posten, maar de bestandjes posten is makkelijker denk ik....

Extra code:
PHP:
$gebruikers = array('User'=>md5('Pass'), 'User2'=>'Pass2', 'etc.'=>'etc.');
Zoals je ziet staat in login.php (en index.php in optie 2) nu "md5()"
Dit is een functie dat letters en cijfers codeert. De reden waarom ik hier nu gebruik van maak, is omdat de functie onderscheid maakt tussen hoofdletters en kleine letters!
Op deze manier is je password dus hoofdlettergevoelig.... (je kunt hetzelfde doen voor de username... maar dat is niet gebruikelijk!)

er zijn ook wat javascriptjes toegevoegd, b.v. om de velden leeg te maken als je erop klikt... en het doorlinken i.p.v. met meta tags...

Ik zou zeggen: Vraag niet hoe het kan, maar geniet er van! (maar mocht je nog vragen hebben, stel ze gerust!)

M.v.g.
JB'tje



@ tjalling: zie mijn vorige reactie in deze post (onderaan!)
Verder heb je in je laaste stukje code "AND" staan... dit is fout en moet een OR zijn.... en de == moet een !== zijn.....
Je moet dus de AND vervangen voor OR en "==" vervangen voor "!=="
Ga maar na wat er nu staat: Als Loggedin NIET ( ! ) true is EN (AND) Loggedin TRUE is, dan moet je doorlinken... anders: content weergeven...
 
Laatst bewerkt:
beveiligd...

ja, hij is beveiligd, maar je komt er niet meer in.

maakt geen sessie aan ofzo...


PHP:
if(isset($gebruikers[$user], $gebruikers[$user][$pass]))

{
$_SESSION['Loggedin'] = TRUE;

echo'<META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://home.kliksafe.nl/knulst/index.php">';  
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan