... ja - also - so ist das wohl zu schwer zu erkennen.
Ich beschreibe hier wahrscheinlich eine etwas ältere Version vom
03.05.2021 - der Einbau sollte aber ungefähr gleich geblieben sein. Es können sich allerdings
Dateinamen oder Verzeichnisnamen bei Werners Skripten
geändert haben, Du musst also von den Skripten ausgehen, die Du verwendest und meine Anleitung nur als Beispiel behandeln.
Ich bin sicher, dass Werner-Zenk.de hier auch ein wenig aufpasst, dass ich keinen Mist schreibe
Hattest Du denn zunächst mal alles vom Werner in ein Testverzeichnis kopiert und erst einmal,
ohne es in Mobirise einzubauen, ausprobiert? Das solltest Du tun.
So mache ich das immer, wenn ich mit Skripten nicht so zu 100% sicher bin. Falls nicht - solltest Du das tun. Das ist schon ein etwas kompliziertes Skript und nicht so super einfach einzubauen.
Erst wenn alles
perfekt läuft, machst Du Dich an den
Einbau in Mobirise.
Du kannst natürlich nur einen
Benutzer anmelden, der bereits in der Datenbank
registriert wurde. Deswegen solltest Du das auch eben alles schon mal vor dem Einbau in Mobirise erledigt haben.
Alles auf einmal ist mir zu unübersichtlich - deswegen machen wir das "Seite für Seite":
Fangen wir mal nochmals mit der
Seite zum Anmelden an:
anmeldung.php
Meine Mobirise-Seiten habe ich alle exakt so genannt, wie jene aus dem Download von Werner - also diese dann eben "anmeldung.php". Die Datei "anmeldung.php" liegt in
meiner Version noch in der "Root" (Wurzel) - also im Stamm- oder Wurzelverzeichnis dieses Projektes.
Natürlich müssen alle anderen Seiten auch bei Dir am Server genau in den vom Werner angelegten Verzeichnissen liegen, wie hier z.B. die
inkludierte Seite mit den Einstellungen im Verzeichnis:
"
admin"
... der Root (Hauptverzeichnis des Projektes).
include "./admin/einstellungen.php";
Dieser Code steht in den Seiteneinstellungen im Bereich:
"
Before <!DOCTYPE>, <html> and <head> tags:"
Code: Alles auswählen
<?php
/*
* Webseitenschutz - anmeldung.php (utf-8)
* - https://werner-zenk.de
*/
session_start();
include "./admin/einstellungen.php";
$fehler = false;
// Benutzer bereits angemeldet - Weiterleitung zur geschützten Seite
if (isset($_SESSION["login"]) &&
!isset($_GET["abmeldung"])) {
header("Location: ./hauptseite.php");
exit;
}
// Anmeldung
if ($_SERVER["REQUEST_METHOD"] == "POST" &&
$_POST["benutzername"] != "") {
// CSRF-Token überprüfen
if ($_SESSION["token"] != $_POST["token"]) die;
// Anmeldeversuche
if (!isset($_SESSION["versuche"])) {
$_SESSION["versuche"] = 1;
}
else {
$_SESSION["versuche"]++;
}
// Leerzeichen entfernen
$_POST["benutzername"] = trim($_POST["benutzername"]);
$_POST["passwort"] = trim($_POST["passwort"]);
// Benutzername und Passwort auslesen
$select = $db->prepare("SELECT `benutzername`, `passwort`, `sperre`, `letzterbesuch`, `besuche`
FROM `" . $TBL_NAME . "`
WHERE `benutzername` = :benutzername");
$select->execute([':benutzername' => $_POST["benutzername"]]);
$reg = $select->fetch();
if ($select->rowCount() == 1) {
// Name, Passwort und Anmeldeversuche überprüfen
if ($reg["benutzername"] == $_POST["benutzername"] &&
password_verify($_POST["passwort"], $reg["passwort"]) &&
$reg["sperre"] == "1" &&
$_SESSION["versuche"] <= $ANMELDEVERSUCHE) {
// Session setzen
unset($_SESSION["versuche"]);
session_regenerate_id();
$_SESSION["login"] = true;
$_SESSION["benutzer"] = $reg["benutzername"];
$_SESSION["Admin"] = $reg["benutzername"] == $ADMIN_NAME ? true : false;
// Letzter Besuch und Anzahl der Besuche
$_SESSION["letzterbesuch"] = $reg["letzterbesuch"];
$_SESSION["besuche"] = $reg["besuche"];
// Besuch eintragen
$db->query("UPDATE `" . $TBL_NAME . "`
SET `letzterbesuch` = NOW(),
`besuche` = `besuche` + 1
WHERE `benutzername` = '" . $_SESSION["benutzer"] . "'");
// Weiterleitung zur geschützten Seite
header("Location: ./hauptseite.php");
exit;
}
else {
$fehler = true;
}
}
}
// Abmeldung
if (isset($_SESSION["login"], $_GET["abmeldung"])) {
// Session und Cookies löschen
unset($_SESSION["benutzer"]);
$_SESSION = [];
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000, $params["path"],
$params["domain"], $params["secure"], $params["httponly"]);
}
session_destroy();
// Weiterleitung zur Anmeldung
header("Location: anmeldung.php?abmeldung_ok");
exit;
}
// CSRF-Token erzeugen
$min = 1000;
$max = getrandmax();
$_SESSION["token"] = rand($min, $max);
?>
Wie du auch oben im PHP-Code erkennen kannst, wird bei erfolgreicher Anmeldung auf die Seite "hauptseite.php" weitergelietet. Die Seite "hauptseite.php" liegt beim Werner
nicht in der Root, das habe ich für Mobirise extra geändert, da ja Mobirise
immer nur in die Root publizieren kann und
nicht in Unterverzeihnisse. Da müssen wir später noch genauer darauf eingehen.
header("Location: ./hauptseite.php");
Diesen Punkt und Slash vor dem Dateinamen nennt man "relative" Pfadanabe:
./ = bleibe im gleichen Verzeichnis - oder auch nur / oder auch gar nichts vor dem Dateinamen
../ = gehe ein verzeihcnis höher
../../ = gehe zwei Verzeichnisse höher
... dann habe ich mir einen einfachen
Textblock aus der Kategorie "Article" auf der Seite aufgezogen um dort das Formular einzubauen und dort quasi den Beispielrext von Mobirise mit dem Formular-Code erstezt - also der markierte Teil im Screenshot (unten):
Code: Alles auswählen
<!-- Beginn Anmeldung Seitenschutz -->
<form action="anmeldung.php" method="post" accept-charset="UTF-8">
<p>
<label for="benutzername"><u>B</u>enutzername:</label> <span class="pflichtfeld">✲</span> <br>
<input type="text" name="benutzername" id="benutzername" size="25" maxlength="25" <?= isset($_GET["abmeldung_ok"]) ? '' : '';?> required="required" accesskey="b"><br>
<span class="hilfetext">Geben Sie hier Ihren Benutzernamen ein.</span>
</p>
<p>
<label for="passwort"><u>P</u>asswort:</label> <span class="pflichtfeld">✲</span> <br>
<input type="password" name="passwort" id="passwort" size="25" required="required" accesskey="p">
<a class="text-primary" href="passwort_vergessen.php"><small>Passwort vergessen</small></a><br>
<span class="hilfetext">Geben Sie hier Ihr Passwort ein.</span>
</p>
<p>
<input type="hidden" name="token" value="<?=$_SESSION["token"];?>">
<input type="submit" class="btn btn-primary" value="Anmelden">
</p>
</form>
<?php
if (isset($_GET["abmeldung_ok"])) {
echo '<p class="ok">✔ Sie wurden erfolgreich abgemeldet.</p>';
}
if (isset($fehler, $_SESSION["versuche"]) &&
$_SESSION["versuche"] < $ANMELDEVERSUCHE) {
echo '<p class="ko">✘ Der Benutzername oder das Passwort ist falsch!<br>
Anmeldeversuch ' . $_SESSION["versuche"] . ' von ' . $ANMELDEVERSUCHE . '.</p>';
}
if (isset($_SESSION["versuche"])) {
if ($_SESSION["versuche"] >= $ANMELDEVERSUCHE) {
echo '<p class="ko">✘ Es stehen Ihnen keine weiteren Anmeldeversuche zur Verfügung!</p>';
}
}
?>
<!-- Ende Anmeldung Seitenschutz -->
Ganz oben im Formular findest Du eben die Formular-Aktion mit Aufruf dieser gleichen Seite "anmeldung.php" um den PHP-Code aus den Seiteneinstellungen nach der Eingabe der Formulardaten abzuarbeiten:
<form action="anmeldung.php" method="post" accept-charset="UTF-8">
Im rechten Bereich vom "Code Editor" > dem "CSS Editor" > stehen dann auch noch einige CSS-Anweisungen für das Design vom Werner.
Damit wäre dann die Seite "anmeldung.php" fertiggestellt.