Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Passwort gesicherter bereich mit admin Seiten
#1
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
<?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 Inhalt

Nr 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.
Zitieren
#2
Hey! Wie sieht denn die datenbank aus bzw. wie (mit welchem befehl) wurde die erstellt?
Zitieren
#3
Sorry da dran habe ich gar nicht gedacht.
Du kannst bei MyPhpadmin diesen Code eingeben
CREATE TABLE `testusers` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `passwort` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `admin` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`), UNIQUE (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Oder du rufst diesen Code über Php aus.

Das ist eigentlich der gleiche Code wie aus den Link ,nur das eine Spalte "Admin" duzu gekommen ist
Zitieren
#4
@basti1012 Bei mir geht das ganze nicht. Wenn ich probiere, die Seite zu öffnen kommt: "Diese Seite funktioniert nicht"

Im Register-Code

mysql:host=localhost;dbname=sebastian1012', 'sebastian1012', 'passwort');

Muss doch sebastian1012 und Passwort mit den Benutzerdaten ausgetauscht werden, nicht wahr?
(Sorry, ich arbeite noch nicht lange mit sql)
Zitieren
#5
Finger weg von diesen Scripts, die sind unsauber programmiert, die Datenbank überdimensioniert und die .htaccess ist völlig unnötig!
Zitieren
#6
Nicht nur Quatschen, sondern besser machen, oder zumindest sagen was falsch ist?
Beschwer dich da https://www.php-einfach.de/experte/php-c...ginscript/

Das die htaccess unnötig ist steht da ja schon
Zitieren
#7
(24.07.2018, 14:01)basti1012 schrieb: Beschwer dich da https://www.php-einfach.de/experte/php-c...ginscript/
Du verbreitest dieses Script ja noch und übernimmst die Macken. Es ist ja nicht schlimm, wenn man nicht wirklich PHP kann, aber dann sollte man auch keine Scripte verbreiten, das ist dann nämlich gefährliches Halbwissen.
Zitieren
#8
Ich gehe mal von aus wenn das auf so einer Seite da steht zumindest kein Müll sein kann.Gut ich habe kein Plan wie lange, das da steht und ob es für heutige Zwecke noch sicher ist.
Die Datenbank hat mehr Einträge als wie für das Script vorgesehen,das ist schon mal blöd.
Dann sehe ich nichts von htmlspecialchars() ,aber musste man das bei PDO auch anwenden ??? Weil irgendwo hat mal wer geschrieben das es da nicht so wäre, aber wissen tue ich es nicht.
Zum restlichen Code kann ich sonst nichts zu sagen da reich mein halb wissen noch nicht für aus.

Wenn das Script noch andere Macken hat, die vor allem der Sicherheit gefährden dann immer raus damit ,ich bin gewollt dazu zu lernen.
Was für'n Deutsch
Zitieren
#9
(24.07.2018, 18:36)basti1012 schrieb: Dann sehe ich nix von htmlspecialchars() ,aber mußte man das bei PDO auch anwenden ???

Alleine das zeugt davon, dass du gefährliches Halbwissen verbreitest. htmlspecialchars wird nur zur Ausgabe benutzt, aber nicht für Datenbank-Aktionen!

Und dass du von PDO keine Ahnung hast (muss man auch nicht unbedingt, wenn man nur mit MySQL zu tun hat), hat man ja in anderen Foren schon oft genug gelesen. Aber bitte, dann nehme nicht irgendwelche Scripte aus dem Netz, bastele dran rum und veröffentliche sie nicht!
Zitieren
#10
Zitat:htmlspecialchars wird nur zur Ausgabe benutzt, aber nicht für Datenbank-Aktionen! 


Das mag ich nicht.
Weil es wird überall anders gesagt.
Mal wird gesagt man soll es auch vorm Speichern in der DB machen. Einer sagt nur bei der Ausgabe,was ich als sinnvollsten sehe weil es ja dann den nutzer ärgern tut.
Dann wird wieder erzählt man sollte beides machen.
Also irgendwas stimmt da nicht . Wahrscheinlich verwechsel ich wieder was .
Nur ein steht ja fest. Egal welchen sql Code ich im Forum poste er wird immer gelöscht wegen Sql gefahr.Ob eingang oder Ausgang ,die Moderatoren sagen es wäre sql Injection gefährdet.
Irgendwie verblöde ich langsam.
Hast du ein Link wo man sich drauf verlassen kann was da steht ?
Bei den ganzen kram was ich schon ergoggelt habe weiß echt nicht was wirklich stimmt
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste