Hallo iedereen,
Ik zou graag willen dat met een simpele login verschillende users kunnen inloggen en worden geleid naar verschillende pagina's waar de login nog eens word gepost op een htaccess login is dit mogelijk zonder sql?


voorbeeld login:

www.voorbeeld.nl/login/
Als henk-jan inlogt de data hieronder word gepost voor htaccess login
www.voorbeeld.nl/users/dirk-jan/

(ik ga niet aan sql beginnen want ik ben hier echt niet goed in en heb niet alteveel tijd)
Alvast bedankt, en groetjes!
Je zou kunnen kijken naar het gebruik van array's.
Hoewel MySQL(i) alsnog geen overbodige luxe is, waar je op een moment wel eens naar kan kijken.
In jouw geval hoeft MySQL(i) niet eens ingewikkeld te zijn en gaat het je denk ik zelfs tijd besparen.
Ik zou dit ook als advies meegeven en anders inderdaad kijken naar een array
een post op een htaccess ?

Oh wacht even .. je wilt een vorm van een dubbele login?

1. een login in php
2. een redirect naar een map die met .htaccess beveiligd is
3. (gebeurt dan automatisch) een web-based login (middels .htaccess dus)

[size=xsmall]Toevoeging op 11/07/2014 18:20:20:[/size]

Hier komt een simpel PHP login-voorbeeld zonder database gedoe maar met een array in login.php.
indien je de redirect laat verwijzen naar een map die door middel van een .htaccess beveiligd is met een gebruikersnaam/wachtwoord dan zul je nog een keer moeten inloggen.

index.php:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Welcome</title>
    </head>
    
    <body>
    	<h1>Welcome on my homepage</h1>
    	<ul>
        	<li><a href="login.php">Login</a></li>
        	<li><a href="secured_area.php">Secured area</a></li>
        </ul>
    </body>
</html>



login.php:

<?php
$message = '';
$users = array(
	'Frank' => '1234',
	'Rick' => 'abcd',
);

session_start();

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	if(isset($users[$_POST['username']]) && $users[$_POST['username']] == $_POST['password'])
	{
		// login succesfull
		$_SESSION['login'] = 1;
		$_SESSION['username'] = $_POST['username'];
		header('Location: secured_area.php');
		exit;
	} else {
		$message = 'Wrong credentials';
	}
}
?>
<!doctype html>
<html>
    <head>
    	<meta charset="utf-8">
	    <title>Login</title>
    </head>
    
    <body>
    	<h1>Login</h1>
    	<form action="" method="post">
    	<table>
        	<tr>
            	<td colspan="2"><?php echo $message; ?></td>
            </tr>
        	<tr>
            	<td>Username:</td><td><input type="text" name="username" /></td>
            </tr>
        	<tr>
            	<td>Password:</td><td><input type="password" name="password" /></td>
            </tr>
        	<tr>
            	<td>&nbsp;</td><td><input type="submit" value="Login" /></td>
            </tr>
        </table>
        </form>
    </body>
</html>


secured_area.php:

<?php
// if not logged in then redirect to login page
// add this to every secured page
session_start();
if(!isset($_SESSION['login']) || $_SESSION['login'] != 1)
	header('Location: login.php');
	
?>
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Secured Area</title>
    </head>
    
    <body>
    	<h1>Welcome in the secured area</h1>
        <p>Welcome <?php echo $_SESSION['username']; ?></p>
    	<ul>
        	<li><a href="index.php">Homepage</a></li>
        	<li><a href="logout.php">Logout</a></li>
        </ul>
    </body>
</html>


logout.php:

<?php

// logout.php

session_start();

unset($_SESSION['login']);
unset($_SESSION['username']);

header('Location: index.php');
?>

Frank Nietbelangrijk op 11/07/2014 18:05:34


Hey Frank,
Bedankt voor je post ik kom hier erg ver mee.
Ik zit dan nog met 1 probleem,
er zijn nu meerdere users die naar dezelfde pagina gaan
maar ze moeten allemaal naar een verschillende pagina gaan, is dit mogelijk? thanks!
Ja natuurlijk!

Verdiep je eens iets meer in arrays. Je moet dan voor iedere gebruiker behalve een gebruikersnaam en wachtwoord ook een pagina opgeven.

PHP gedeelte van login.php
<?php
$message = '';
$users = array(
array(
'username' => 'Frank',
'password' => '1234',
'url' => '/secure/page1.php'
),
array(
'username' => 'Rick',
'password' => 'abcd',
'url' => '/secure/page2.php'
),
);

session_start();

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
foreach($users as $user)
{
if($user['username'] == $_POST['username'] && $user['password'] == $_POST['password'])
{
// login succesfull
$_SESSION['login'] = 1;
$_SESSION['username'] = $_POST['username'];
header('Location: ' . $user['url']);
exit;
}
}
$message = 'Wrong credentials';
}
?>
Of je pagina af laten hangen van de username..


 header('Location: /secure/page?user=' . $user['username']);


Ik neem aan dat je niet voor elke user een nieuw PHP-bestand gaat maken?
Frank Nietbelangrijk op 11/07/2014 23:59:26

Bedankt frank, dit ziet er erg goed uit. ik zit nu nog wel met 2 probleempjes
Als frank inlogt en word doorgestuurd naar pagina /secure/frank, dan kan hij ook gewoon /secure/rick zien als hij dat intypt bij de url omdat frank in is gelogt, en rick zijn pagina niet een bepaalde username vraagt, hoe kan ik dit fixen?

<?php
session_start();
if(!isset($_SESSION['login']) || $_SESSION['login'] != 1)
header('Location: ../../../');

?>

En nog een 2e probleempje, voor de code hierboven moet je bestand .php zijn, dit is verder geen probleem, maar als ik inlog en ik word dan doorgestuurd naar de php pagina (die eerst html was) ziet de pagina er raar uit, bepaalde gedeeltes van de html werken dan niet ofzo.

Maar als ik "header('Location: ../../../');" eruit haal laat hij dus dezelfde pagina zien maar dan gewoon goed, en het laad helemaal goed. Maar als ik dus inlog en dezelfde pagina bekijk laad hij niet goed ofzo.

Alvast bedankt!

groetjes
vraag 1: Dat moet je dan oplossen in het PHP gedeelte van securd_area.php. Hier wordt nu enkel gecontroleerd of je ingelogd bent. Je hebt nog de beschikking over $_SESSION['username'].. je kunt dus nog een testje doen om te zien of $_SESSION['username'] != 'Rick'

<?php
if($_SESSION['username'] != 'Rick')
{
header('Location: login.php');
}
?>
vraag 2: Welke browser heb je? in google chroom kun je met F12 een extra venster openen en dan zie je bij Console de fouten die de browser ziet. Ik vermoedt dat hij je css bestanden niet kan vinden.

stel je hebt de volgende paden:

root
  - [css]
      - style.css
  - [subdir]
      - user.php
  - index.php


dan kan vanaf de index.php je style.css gevonden worden met css/style.css
maar vanaf user.php kan dat niet. dan moet je hebben: ../css/style.css

Reageren