Denna guide är en fortsättning från föregående och bygger vidare på vårt login-system. I detta fall kommer vi att göra en loginruta som använder sig av de registrerade användare som skapats i föregående moment. Du kan inte göra detta moment och få det att fungera utan föregående.

Med det sagt, låt oss börja. Login-systemet här bygger på vår config.php som vi skapade i föregående moment, samt funktionen session_start(); som antingen startar eller återupptar ett sessions-ID fångat via GET eller POST.

Skapa ett nytt dokument som du kallar för login.php

<?php
// Starta eller återuppta sessionen
session_start();
 
// Är användaren redan inloggad? I så fall, rikta om till welcome.php
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}
 
// Kräv vår databaskoppling vi skapade i föregående moment
require_once "config.php";
 
// Definiera variabler och ge dem tomma värden
$Anvandarnamn = $losenord = "";
$Anvandarnamn_fel = $losenord_fel = "";
 
// Metoden vi hanterar formuläret med (POST)
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Undersök om Användarnamn är tomt...
    if(empty(trim($_POST["Anvandarnamn"]))){
        $Anvandarnamn_fel = "Vänligen fyll i användarnamn.";
    } else{
        $Anvandarnamn = trim($_POST["Anvandarnamn"]);
    }
    
    // Undersök om lösenordet är tomt
    if(empty(trim($_POST["losenord"]))){
        $losenord_fel = "Vänligen fyll i lösenordet.";
    } else{
        $losenord = trim($_POST["losenord"]);
    }
    
    // Kontrollera uppgifterna
    if(empty($anvandarnamn_fel) && empty($losenord_fel)){
        // Förbered att välja rätt användare från vår databas
        $sql = "SELECT id, Anvandarnamn, losenord FROM anvandare WHERE anvandare = ?";
        
        if($stmt = mysqli_prepare($link, $sql)){
            // Koppla variabler i mysqli-påståendet som parametrar
            mysqli_stmt_bind_param($stmt, "s", $param_Anvandarnamn);
            
            // Ställ in parametrarna
            $param_Anvandarnamn = $Anvandarnamn;
            
            // Försök att köra påståendet
            if(mysqli_stmt_execute($stmt)){
                // Lagra resultatet
                mysqli_stmt_store_result($stmt);
                
                // Undersök om användaren finns i databasen
                if(mysqli_stmt_num_rows($stmt) == 1){                    
                    // Koppla resultatet i variablerna
                    mysqli_stmt_bind_result($stmt, $id, $Anvandarnamn, $hashed_password);
                    if(mysqli_stmt_fetch($stmt)){
                        if(password_verify($losenord, $hashed_password)){
                            // Lösenordet är korrekt, starta session
                            session_start();
                            
                            // Lagra data i sessionens variabler
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["Anvandarnamn"] = $Anvandarnamn;                            
                            
                            // Vidarebefordra till välkomstsidan
                            header("location: welcome.php");
                        } else{
                            // Annars, Visa fel vid fel lösenord
                            $losenord_fel= "Lösenordet du skrev in var felaktigt.";
                        }
                    }
                } else{
                    // Visa felmeddelande om användaren ej existerar.
                    $Anvandarnamn_fel = "Inget konto med det namnet finns.";
                }
            } else{
                echo "Ojsan! Något gick fel. Försök igen!";
            }
        }
        
        // Avsluta påståendet
        mysqli_stmt_close($stmt);
    }
    
    // Stäng kopplingen till databasen
    mysqli_close($link);
}
?>
 

Precis som i föregående dokument vi skapade så behöver vi ett formulär för att ovanstående ska fungera. Vi skapar formuläret i samma fil (login.php) under koden ovanför.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Inloggning</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; }
        .wrapper{ width: 350px; padding: 20px; }
    </style>
</head>
<body>
    <div class="wrapper">
        <h2>Logga in</h2>
        <p>Vänligen fyll i dina användaruppgifter.</p>
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
            <div class="form-group <?php echo (!empty($Anvandarnamn_fel)) ? 'has-error' : ''; ?>">
                <label>Användarnamn</label>
                <input type="text" name="Anvandarnamn" class="form-control" value="<?php echo $Anvandarnamn; ?>">
                <span class="help-block"><?php echo $Anvandarnamn_fel; ?></span>
            </div>    
            <div class="form-group <?php echo (!empty($losenord_fel)) ? 'has-error' : ''; ?>">
                <label>Lösenord</label>
                <input type="password" name="losenord" class="form-control">
                <span class="help-block"><?php echo $losenord_fel; ?></span>
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Logga in">
            </div>
            <p>Har du inte ett konto? <a href="register.php">Registrera dig nu</a>.</p>
        </form>
    </div>    
</body>
</html>
Published
Views 52

Comments

No Comments

Lämna ett svar

Senaste kommentarer

    Recent Posts

    Twitter

    SquadForce - eSports and Gaming WordPress theme is finally released! The theme fully built on #gutenberg page build… twitter.com/i/web/status/1…
    Just a small addition in Visual Portfolio for #elementor users - added widget with layouts selector for better expe… twitter.com/i/web/status/1…