kostenloser Webspace werbefrei: lima-city


Wie erstelle ich eine Loginseite mit PHP?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    llweb-it

    llweb-it hat kostenlosen Webspace.

    Ich benötige eine Loginseite, welche dannach zugang zu einer seite geben soll. Man kann die seite über einen link öffnen.
    Der link der seite ist http://<link>/portal/dashboard/23283923440
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Du könntest einen einfachen PHP script nutzen um die nutzer zu authentifizieren und anschliesend zur URL weiterzuleiten:

    <?php
    // Definiere eine einfache Liste von Benutzern und deren Passwörtern
    $benutzerliste = array(
        'admin' => 'password',
        'jasmine' => 'Jasmine12',
        'patrick' => 'Minecraft15!'
    );
     
    $benutzername = isset($_POST['benutzername']) ? $_POST['benutzername'] : '';
    $passwort = isset($_POST['passwort']) ? $_POST['passwort'] : '';
    $fehlermeldung = '';
     
    // Überprüfen Sie, ob der eingegebene Benutzername in der Benutzerliste existiert und das Passwort übereinstimmt
    if (isset($benutzerliste[$benutzername]) && $benutzerliste[$benutzername] === $passwort) {
        // Anmeldedaten überprüfen, und weiterleiten zur Zielseite
        header('Location: <hier dein link>');
        exit;
    } else {
        // Fehlermeldung für falsche Anmeldeinformationen
        $fehlermeldung = '
        <div class="error-container" style="background-color: rgba(255, 102, 102, 0.5); color: black; border-left: 4px solid #ff6666; padding-left: 10px;">
            <b>Anmelden fehlgeschlagen</b>
            <p>Der Benutzer existiert nicht, oder das Passwort war falsch</p>
        </div>';
    }
     
    // HTML-Design der Loginseite
    $htmlDesign = '
    <!DOCTYPE html>
    <html lang="da">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            body {
                background-color: #f1f1f1;
                font-family: Arial, sans-serif;
                display: flex;
                justify-content: center;
                align-items: center;
                height: 100vh;
                margin: 0;
                padding: 0;
            }
     
            .container {
                max-width: 400px;
                margin: 0 auto;
                padding: 20px;
                background-color: #fff;
                border: 1px solid #ccc;
                border-radius: 5px;
                box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
                display: flex;
                flex-direction: column;
                align-items: center;
            }
     
            h1 {
                text-align: center;
                padding: 10px;
                border-radius: 5px;
                margin-top: 0; /* Kein oberer Abstand für den Titel */
            }
     
            h1#netlog-title {
                background-color: #003D7F;
                color: #fff;
            }
     
            .error-container {
                background-color: rgba(255, 102, 102, 0.5);
                color: black;
                border-left: 4px solid #ff6666;
                padding-left: 10px;
            }
     
            input[type="text"],
            input[type="password"],
            button {
                width: 100%;
                padding: 10px;
                margin-bottom: 10px;
                border: 1px solid #ccc;
                border-radius: 3px;
            }
     
            button {
                background-color: #007bff;
                color: #fff;
                font-weight: bold;
                cursor: pointer;
            }
     
            button:hover {
                background-color: #0056b3;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <h1 id="netlog-title">Login</h1>
            ' . $fehlermeldung . '
            <br><p>Bitte melden sie sich mit ihren nutzerdaten an:<br><br><br><br>
     
            <form action="login.php" method="post">
                <label for="benutzername">Benutzername:</label>
                <input type="text" id="benutzername" name="benutzername" required><br><br>
     
                <label for="passwort">Passwort:</label>
                <input type="password" id="passwort" name="passwort" required><br><br>
     
                <button type="submit">Anmelden</button>
            </form>
        </div>
    </body>
    </html>
    ';
     
    // Ende des HTML-Designs
    echo $htmlDesign;
    ?>


    Hierbei nennst du die datei login.php ;
    Ich würde aber dringend empfehlen https zu nutzen
  4. Autor dieses Themas

    llweb-it

    llweb-it hat kostenlosen Webspace.

    Okay, ist es denn dann auch möglich weitere nutzer zu erstellen?
    Und kann man einen Passwort zurücksetzen button einbauen?
    Liebe grüße

    Beitrag zuletzt geändert: 7.5.2024 13:51:12 von llweb-it
  5. Ja, du kannst weitere nutzer hinzufügen und auch nutzer löschen.
    Dazu fügst / entfernst du einfach hier:
    <?php
    // Definiere eine einfache Liste von Benutzern und deren Passwörtern
    $benutzerliste = array(
        'admin' => 'password',
        'jasmine' => 'Jasmine12',
        'patrick' => 'Minecraft15!'
    );
    einen nutzer.
    Da die nutzer kein datenverzeichnis besitzen, kannst du sie problemlos ändern, wie du möchtest.
    Ein Passwort zurücksetzen button, kannst du natürlich einbauen, dazu währe es aber besser, mysql zu nutzen.
    Der gennante PHP Code ist zwar leicht sicher, wenn du jedoch auf eine seite mit sensiblen daten verweist, rate ich dringend davon ab.


  6. lennert-loew schrieb:
    Du könntest einen einfachen PHP script nutzen um die nutzer zu authentifizieren und anschliesend zur URL weiterzuleiten:

    <?php
    // Definiere eine einfache Liste von Benutzern und deren Passwörtern
    $benutzerliste = array(
        'admin' => 'password',
        'jasmine' => 'Jasmine12',
        'patrick' => 'Minecraft15!'
    );
     
    $benutzername = isset($_POST['benutzername']) ? $_POST['benutzername'] : '';
    $passwort = isset($_POST['passwort']) ? $_POST['passwort'] : '';
    $fehlermeldung = '';
     
    // Überprüfen Sie, ob der eingegebene Benutzername in der Benutzerliste existiert und das Passwort übereinstimmt
    if (isset($benutzerliste[$benutzername]) && $benutzerliste[$benutzername] === $passwort) {
        // Anmeldedaten überprüfen, und weiterleiten zur Zielseite
        header('Location: <hier dein link>');
        exit;
    } else {
        // Fehlermeldung für falsche Anmeldeinformationen
        $fehlermeldung = '
        <div class="error-container" style="background-color: rgba(255, 102, 102, 0.5); color: black; border-left: 4px solid #ff6666; padding-left: 10px;">
            <b>Anmelden fehlgeschlagen</b>
            <p>Der Benutzer existiert nicht, oder das Passwort war falsch</p>
        </div>';
    }
     
    // HTML-Design der Loginseite
    $htmlDesign = '
    <!DOCTYPE html>
    <html lang="da">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <style>
            body {
                background-color: #f1f1f1;
                font-family: Arial, sans-serif;
                display: flex;
                justify-content: center;
                align-items: center;
                height: 100vh;
                margin: 0;
                padding: 0;
            }
     
            .container {
                max-width: 400px;
                margin: 0 auto;
                padding: 20px;
                background-color: #fff;
                border: 1px solid #ccc;
                border-radius: 5px;
                box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
                display: flex;
                flex-direction: column;
                align-items: center;
            }
     
            h1 {
                text-align: center;
                padding: 10px;
                border-radius: 5px;
                margin-top: 0; /* Kein oberer Abstand für den Titel */
            }
     
            h1#netlog-title {
                background-color: #003D7F;
                color: #fff;
            }
     
            .error-container {
                background-color: rgba(255, 102, 102, 0.5);
                color: black;
                border-left: 4px solid #ff6666;
                padding-left: 10px;
            }
     
            input[type="text"],
            input[type="password"],
            button {
                width: 100%;
                padding: 10px;
                margin-bottom: 10px;
                border: 1px solid #ccc;
                border-radius: 3px;
            }
     
            button {
                background-color: #007bff;
                color: #fff;
                font-weight: bold;
                cursor: pointer;
            }
     
            button:hover {
                background-color: #0056b3;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <h1 id="netlog-title">Login</h1>
            ' . $fehlermeldung . '
            <br><p>Bitte melden sie sich mit ihren nutzerdaten an:<br><br><br><br>
     
            <form action="login.php" method="post">
                <label for="benutzername">Benutzername:</label>
                <input type="text" id="benutzername" name="benutzername" required><br><br>
     
                <label for="passwort">Passwort:</label>
                <input type="password" id="passwort" name="passwort" required><br><br>
     
                <button type="submit">Anmelden</button>
            </form>
        </div>
    </body>
    </html>
    ';
     
    // Ende des HTML-Designs
    echo $htmlDesign;
    ?>


    Hierbei nennst du die datei login.php ;
    Ich würde aber dringend empfehlen https zu nutzen


    Fehler Nummer 1: die Lösung oben verweist einfach nur auf einen Link, der bei Kenntnis ohne Login zugänglich ist. Hierbei kommst du besser, wenn du eine Session aufbaust, in der du prüfst, ob die Authentifizierung erfolgreich vorgenommen wurde.

    Fehler Nummer 2: in dem Beispiel hast du hardcoded Passwörter in die Datei eingelesen. Wenn aus irgendwelchen Gründen der Webserver die PHP-Datei nicht interpretiert, sondern einfach nur auswirft, kann jeder alle Passwörter sehen, der zu dem Zeitpunkt zugreift.

    Fehler Nummer 3: Passwörter werden nirgends nie in keiner Form Klartext hinterlegt. im primitivsten Fall gehasht und mit dem Hash gegen geprüft. das Hashen kannst du im Client vor dem Submit machen mittels JavaScript.

    Potentielle Fehlerquelle Nummer 1: warum haust du das Template als String raus? man könnte normal einen Schalter einbauen zwischen eigentlicher Inhalts-Seite und Login-Seite. Macht die ganze Sache wartungsfreundlicher.

    Potentielle Fehlerquelle Nummer 2: auch wenn wir nur einen Fehlerfall in diesem Konkreten Beispiel haben, würde ein konkretes Exception-Handling durchaus helfen, struktur in den code zu bringen

    Potentielle Fehlerquelle Nummer 3: Modularer Aufbau des Codes. Gerade bei Anfängern ist es wichtig, sich saubere Programmierung von Anfang an anzugewöhnen. ist der Code Sauber, kann man selbst nach einer Lobotomie noch Sinnvoll mit dem Code arbeiten.


    ----------

    Es gibt Zahlreiche Youtube-Videos, in denen das Erstellen einer PHP-Login-Seite zum Thema genommen wird. Ich denke, du kriegst da besseren Einblick dahinter, was man alles falsch machen kann.
  7. Ich hatte mal vor langer Zeit mir ein Login selbst gebaut, die MySQL dazu fehlt leider nach der langen zeit.

    Das ganze ist durch lesen und lernen erstellt, wodurch das ganze auch sauberer gehen würde. Funktionieren sollte es jedenfalls noch immer sofern man die Datenbank und Zugang sich selbst erstellt

    include ('config.php');
    $Ausgabe = '';
    $OutputMsg = '';
    if(isset($_POST['name'])) {
    	$Name=$_POST['name'];
    } else {
    	$Name = "";
    }
    if(isset($_POST['pass'])) {
    	$Pass = md5($_POST['pass']);
    } else {
    	//$Pass = "";
    	goto main;
    }
    $LastLogin = sprintf("UPDATE accounts SET LetzterLogin='%s' WHERE Name='%s'",
               mysql_real_escape_string($Now),
               mysql_real_escape_string($Name));
    
    if(!$Name){
    	$Ausgabe = "Sie haben kein Namen angegeben";
    }
    
    if(!$Pass) {
    	$Ausgabe = "Sie haben kein Passwort angegeben";
    }
    $Query = sprintf("SELECT * FROM accounts WHERE Name='%s'",
    			mysql_real_escape_string($Name));
    $result = mysql_query($Query);
    
    if(!$result) {
        $Ausgabe = "Konnte Abfrage ($sql) nicht erfolgreich ausf&uuml;hren von DB: " . mysql_error();
    }
    
    if (mysql_num_rows($result) == 0) {
    	$Ausgabe = "FEHLER: Ihr Name oder Passwort ist nicht richtig!";
    }
    while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        $PassCheck = "$row[Passwd]";
        $Gesperrt = "$row[gesperrt]";
        $AccLevel = "$row[Accountlevel]";
    }
    mysql_free_result($result);
    if(!isset($PassCheck)) {
    	$PassCheck = "";
    }
    if($Pass == $PassCheck) {
    	$_SESSION['user']=$Name;
    	$_SESSION['Pass']=$PassCheck;
    	$_SESSION['Admin']=$AccLevel;
    	$_SESSION['Closed']=$Gesperrt;
    	$_SESSION['login']="True";
    	$SetLastLogin = mysql_query($LastLogin);
    	$Ausgabe = $_SESSION['user'].", du bist Angemeldet!".$_SESSION['login'];
    	
    } else {
    $Ausgabe = "FEHLER Login Fehlerhaft";
    }


    hier auch die dazugehörige config.php
    <?php
    $SQLHost = "localhost";
    $SQLUser = "User";
    $SQLPasswort = "Passwd";
    $SQLDB = "User_DB";
    $Now = date("Y-m-d H:i:s");
    
    mysql_connect($SQLHost, $SQLUser, $SQLPasswort) or die ('Keine Verbindung moeglich:' . mysql_error());
    mysql_select_db($SQLDB) or die ('Die Datenbank existiert nicht:' . mysql_error());
    ?>


    und falls es noch gebraucht wird die register.php
    session_start();
    include ('config.php');
    $OutputMsg = "";
    if(isset($_POST['NewUser'])) {
    	$Name=$_POST['NewUser'];
    } else {
    	$Name = "";
    }
    if(isset($_POST['UserPass'])) {
    	$Pass = $_POST['UserPass'];
    } else {
    	$Pass = "";
    }
    if(isset($_POST['UserPass2'])) {
    	$Pass2 = $_POST['UserPass2'];
    } else {
    	$Pass2 = "";
    }
    if(isset($_SESSION['user'])) {
    	$Admin = $_SESSION['user'];
    } else {
    	$Admin = "";
    }
    
    if (!empty($Name)) {
    		$NameCheck = sprintf("SELECT * FROM accounts WHERE Name='%s'",
    		mysql_real_escape_string($Name));
    	$result = mysql_query($NameCheck);
    	if (!$result) {
    		$OutputMsg = "<strong>FEHLER:</strong> Konnte Abfrage ($NameCheck) <br>nicht erfolgreich ausfuehren von DB: <br>" . mysql_error();;
    	}
    	
    	if (mysql_num_rows($result) >= 1) {
    		$OutputMsg = "Account Existiert bereits";
    	} else {
    		if (!$Admin) {
    			$ErstellerName = $Name;
    			$CheckGesperrt = 1;
    			$_POST['level'] = 1;
    		} else {
    			if ($_SESSION['Admin'] >= "1337") {
    				$ErstellerName = $Admin;
    				$CheckGesperrt = 0;
    			} else {
    				$ErstellerName = $Admin;
    				$CheckGesperrt = 1;
    				$_POST['level'] = 1;
    			}
    		}
    		if (empty($Pass)) {
    			exit(ABBRUCH2);
    		} 
    		if($Pass != $Pass2) {
    			$OutputMsg = "Die Passw&ouml;rter stimmen nicht &uuml;berein";
    		} else {
    			$adduser = "INSERT INTO accounts SET
    				Name   = '" . mysql_real_escape_string($Name) . "',
    				Passwd   = '" . mysql_real_escape_string(md5($Pass)) . "',
    				Accountlevel   = '" . mysql_real_escape_string($_POST['level']) . "',
    				ErstelltAm   = '" . mysql_real_escape_string($Now) . "',
    				ErstelltVon   = '" . mysql_real_escape_string($ErstellerName) . "',
    				gesperrt	= '" . mysql_real_escape_string($CheckGesperrt) . "'";
    			$ausgabe = mysql_query($adduser);
    			if (!$ausgabe) {
    				$OutputMsg = "<strong>FEHLER:</strong> Konnte Abfrage ($adduser) <br>nicht erfolgreich ausfuehren von DB: <br>" . mysql_error();
    			} else {
    			
    			$OutputMsg = "Ihr Account wurde erstellt, Sie k&ouml;nnen nun zum <a href='index.php'>Index</a> zur&uuml;ck";
    			$_SESSION['Pass']=$PassCheck;
    			$_SESSION['Admin']=$_POST['level'];
    			$_SESSION['Closed']=$CheckGesperrt;
    			$_SESSION['user']=$Name;
    			sleep(3);
    			header('Location: index.php');
    			}
    		}
    	}
    }


    wie gesagt, vor langer Zeit mal selbst gebastelt. Für mich und den zweck die die Seite erfüllen sollte reichte es mir voll und ganz aus.

    Das ganze geht sicherlich Sauberer und Sicherer.
  8. witze-dschungel

    witze-dschungel hat kostenlosen Webspace.

    duxaquila schrieb:
    Das ganze geht sicherlich Sauberer und Sicherer.

    Genau, denn:
    1. Die MySQL Funktion existiert nicht mehr unter aktuell unterstützen PHP-Versionen. Das Skript wäre so nicht lauffähig. Wenn dann MySQLi oder PDO mit prepared statements.
    2. MD5 ohne Salt war bestimmt schon damals unsicher
  9. witze-dschungel schrieb:
    duxaquila schrieb:
    Das ganze geht sicherlich Sauberer und Sicherer.

    Genau, denn:
    1. Die MySQL Funktion existiert nicht mehr unter aktuell unterstützen PHP-Versionen. Das Skript wäre so nicht lauffähig. Wenn dann MySQLi oder PDO mit prepared statements.
    2. MD5 ohne Salt war bestimmt schon damals unsicher


    Das es alt ist und besser geht sagte ich ja nicht umsonst ;) doch als Anreiz und mit ein wenig lesen, sollte man das ganze auch noch zum laufen bringen. An der Sicherheit kann man immer etwas verbessern.

    doch bei den ersten anreizen die es hier gegeben hat, dachte ich mir gebe ich ein etwas besseren Anreiz um es im Selbststudium zu verbessern.


    das ein reines md5 nicht gerade sicher ist, ist mir durchaus bewusst. doch auch hier, für das was der nutzen war von dem Login war es ausreichend.

    Jedoch ist das schon schöner als ein Plain Text Dokument
  10. naja die Fragestellung eingangs finde ich schon so, dass der Ersteller wohl aktuell nicht wirklich tiefe Ahnung von der Materie hat.

    Meine Empfehlung dabei, bevor man ein Login Script erstellt, einfach ein paar Tutorial zum Thema PHP in Verbindung mit MYSQL (oder andren Datenbanken) durchgehen.

    Wenn dann das Verständnis da ist, einfach sich mit Sessions beschäftigen, oder alles auf der Mainpage durchlaufen lassen, welche dann triggern kann. Wird nur bei großen Seiten etwas chaotischer Code
  11. Autor dieses Themas

    llweb-it

    llweb-it hat kostenlosen Webspace.

    Alles klar dann erstmal vielen dank für die Hilfe :-)
  12. Du kannst es natürlich auch ganz einfach über .htaccess laufen lassen so wie hier beschrieben: https://www.lima-city.de/hilfe/wie-kann-ich-ein-verzeichnis-mit-einem-passwort-schuetzen

    Solltest du noch keine lösung gefunden haben.
    Lg
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!