18.04.2022, 17:20 - Wörter:
Ihr habe das Script https://www.php-einfach.de/experte/php-c...ginscript/
Mal erweitert um einen Admin Bereich. Das heißt das Leute mit dem Admin Status noch extra Seiten sehen können ( ZB Einstellungen die nur Admins machen dürfen).
Das Script wurde um mehrere Teile verändert und deswegen zeige ich euch jetzt alle Dateien mit dem geänderten Inhalt.
Man benötigt NR 1 bis 5
Nr 1 Registrierung
Das müßte man dann wegmachen und so umbauen das der Status nur von Den Admi vergeben kann ,oder wie auch immer.
2 Datei der Login Bereich
Soll heißen es wird kürzer und die Datenbank abfrage gekürzt.Aber dazu muß ich noch Googeln wie man das machen könnte.
Aber keine sorge das Script Funktioniert so bestens.
Nr 3 Beispiel Seite für eingeloggte Besucher
Nr 4 Beispiel Seite Für Besucher Mit Admin Status
Nr 5 Logout Script.
**Link entfernt, weil Seite nicht mehr erreichbar **
Hier wird der Ordner aufgerufen wo die ganzen Dateien drinnen sind und zu einer Indexdatei weitergeleitet wo man die Einzelne Dateien sehen kann.Je nach Status werden die verschiedene Zugriffsmöglichkeiten angezeigt.
Bei Interesse kann man das Script auch benutzen ,brauch man aber nicht.
Nr 6 Order Index
Nr 7 .htaccess
Punkt 6 und 7 wird für die Funktion des Login Script nicht benötigt.
Da ich Anfänger bin laß ich mich auch gerne belehren wenn ich was nicht richtig gemacht habe.
Mal erweitert um einen Admin Bereich. Das heißt das Leute mit dem Admin Status noch extra Seiten sehen können ( ZB Einstellungen die nur Admins machen dürfen).
Das Script wurde um mehrere Teile verändert und deswegen zeige ich euch jetzt alle Dateien mit dem geänderten Inhalt.
Man benötigt NR 1 bis 5
Nr 1 Registrierung
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=sebastian1012', 'sebastian1012', 'passwort');
?>
<!DOCTYPE html>
<html>
<head>
<title>Registrierung</title>
</head>
<body>
<?php
$showFormular = true;
if(isset($_POST['register'])) {
$error = false;
$email = $_POST['email'];
$passwort = $_POST['passwort'];
$passwort2 = $_POST['passwort2'];
$admin = $_POST['admin'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>';
$error = true;
}
if(strlen($passwort) == 0) {
echo 'Bitte ein Passwort angeben<br>';
$error = true;
}
if($passwort != $passwort2) {
echo 'Die Passwörter müssen übereinstimmen<br>';
$error = true;
}
if(!$error) {
$statement = $pdo->prepare("SELECT * FROM testuser WHERE email = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();
if($user !== false) {
echo 'Diese E-Mail-Adresse ist bereits vergeben<br>';
$error = true;
}
}
if(!$error) {
$passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
$statement = $pdo->prepare("INSERT INTO testuser (email, passwort, admin) VALUES (:email, :passwort, :admin)");
$result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash, 'admin' => $admin));
if($result) {
echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';
$showFormular = false;
} else {
echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
}
}
}
if($showFormular) {
?>
<form action="registrieren.php" method="post">
E-Mail:<br>
<input type="email" size="40" maxlength="250" name="email"><br><br>
Dein Passwort:<br>
<input type="password" size="40" maxlength="250" name="passwort"><br>
Passwort wiederholen:<br>
<input type="password" size="40" maxlength="250" name="passwort2"><br><br>
Willst du Admin sein ?
<select name="admin">
<option value="false">Nein</option>
<option value="true">Ja</option>
</select>
<input name="register" type="submit" value="Abschicken">
</form>
<?php
} //Ende von if($showFormular)
?>
</body>
</html>
Wie man sieht kann man bei der Registrireung den Admin Status selber aussuchen.Das müßte man dann wegmachen und so umbauen das der Status nur von Den Admi vergeben kann ,oder wie auch immer.
2 Datei der Login Bereich
<?php
session_start();
if(isset($_SESSION['userid'])) {
die("Du bist schon eingeloggt.<a href='logout.php'>Ausloggen ? </a>");
}else{
$pdo = new PDO('mysql:host=localhost;dbname=sebastian1012', 'sebastian1012', 'passwort');
if(isset($_POST['login'])) {
$email = $_POST['email'];
$passwort = $_POST['passwort'];
$statement = $pdo->prepare("SELECT * FROM testuser WHERE email = :email");
$result = $statement->execute(array('email' => $email));
$user = $statement->fetch();
if ($user !== false && password_verify($passwort, $user['passwort'])) {
$_SESSION['userid'] = $user['id'];
$statement = $pdo->prepare("SELECT * FROM testuser WHERE admin = ? AND email = ?");
$statement->execute(array('true',$email));
while($row = $statement->fetch()) {
$_SESSION['admin'] = true;
echo '<br>Du bist Admin <a href="admin.php">Admin Bereich</a><br>';
}
die('Login Bereich <a href="geheim.php">internen Bereich</a>');
} else {
$errorMessage = "E-Mail oder Passwort war ungültig<br>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php
if(isset($errorMessage)) {
echo $errorMessage;
}
?>
<form action="login.php" method="post">
E-Mail:<br>
<input type="email" size="40" maxlength="250" name="email"><br><br>
Dein Passwort:<br>
<input type="password" size="40" maxlength="250" name="passwort"><br>
<input name="login" type="submit" value="Abschicken">
</form>
</body>
</html>
<?php
}
?>
Dazu gibt es ja nix mehr zu sagen.Außer das dieses Scrippt noch verbessert wird .Soll heißen es wird kürzer und die Datenbank abfrage gekürzt.Aber dazu muß ich noch Googeln wie man das machen könnte.
Aber keine sorge das Script Funktioniert so bestens.
Nr 3 Beispiel Seite für eingeloggte Besucher
<?php
session_start();
if(!isset($_SESSION['userid'])) {
die('Bitte zuerst <a href="login.php">einloggen</a>');
}
echo "Hallo hier ist der Bereich den nur registrierte User sehen können";
echo '<a href="logout.php">Log dich aus</a>';
?>
Nr 4 Beispiel Seite Für Besucher Mit Admin Status
<?php
session_start();
if(!isset($_SESSION['userid'])) {
die('Bitte zuerst <a href="login.php">einloggen</a>');
}
if(isset($_SESSION['admin'])) {
echo "Hier ist der zusätzliche Bereich den nur Admine sehen können";
echo '<a href="logout.php">Log dich aus</a>';
}else{
echo "<h2>Error</h2>Du hast keinen Admin Status <a href='geheim.php'>Zum Passwort gesicherten Bereich zurück</a>";
}
?>
Nr 5 Logout Script.
<?php
session_start();
if(isset($_SESSION['userid'])) {
session_destroy();
echo "Logout erfolgreich<a href='login.php'>Wieder Einloggen ?</a>";
}else{
echo "<h2>ERROR</h2>Wer nicht eingeloggt ist brauch sich auch nicht ausloggen<a href='login.php'>Login </a>";
}
?>
So sieht es dann aus, wenn alles fertig ist.**Link entfernt, weil Seite nicht mehr erreichbar **
Hier wird der Ordner aufgerufen wo die ganzen Dateien drinnen sind und zu einer Indexdatei weitergeleitet wo man die Einzelne Dateien sehen kann.Je nach Status werden die verschiedene Zugriffsmöglichkeiten angezeigt.
Bei Interesse kann man das Script auch benutzen ,brauch man aber nicht.
Nr 6 Order Index
<?php
session_start();
?>
<h1>Index Datei vom Php Login Script mit Admin Status</h1>
<?php
if(isset($_SESSION['userid'])) {
if(isset($_SESSION['admin'])) {
?>
<a href="admin.php">Admin Bereich</a><br>
<?php
}
?>
<a href="geheim.php">Passwort gesicherter Bereich</a><br>
<a href="logout.php">Logout</a>
<?php
}else{
?>
<h2>Gehe zu</h2>
<a href="registrieren.php">Registrieren</a><br>
<a href="login.php">Login</a><br>
<a href="geheim.php">Passwort gesicherter Bereich</a>[ Gespärt ]<br>
<a href="admin.php">Admin Bereich</a>[ Gespärt ]<br>
<a href="logout.php">Logout</a>[ Geht erst bei eingelogten Status ]
<?php
}
?>
Damit beim Ordner aufruf auch keine Datein angezeigt wird erstellen wir noch eine .htaccess Datei die in den Ordner mit rein gehört mit folgenen InhaltNr 7 .htaccess
DirectoryIndex index.php
Erstellt euch eigene Login Namen und testet es selber.Punkt 6 und 7 wird für die Funktion des Login Script nicht benötigt.
Da ich Anfänger bin laß ich mich auch gerne belehren wenn ich was nicht richtig gemacht habe.