Webbserverprogrammering 1

Show sourcecode

The following files exists in this folder. Click to view.

webbsrvprg/exercises/quiz/

create_test.php
create_test_fuckingtrasig.php
hash.php
index.php
login.php
main.php
personal_results.php
setup.php
sign_up.php
test_correcting.php
tests.php
user_administration.php
verification.php

sign_up.php

97 lines UTF-8 Windows (CRLF)
<!DOCTYPE html>
<html lang="sv">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sign up</title>
    <style>
        fieldset {
            margin: 5px;
            padding: 5px;
            border: 2px solid black;
        }

        #show_password {
            width: 10em;
            border: 1px solid gray;
            background-color: lightgray;
        }

        * {
            box-sizing: border-box;
        }
    </style>
</head>

<body>
    <form method="POST" action="">
        <fieldset>
            <legend>Skapa konto</legend>
            <input type="text" required maxlength="100" name="name" id="name"><label for="name">Namn</label><br>
            <input type="text" required maxlength="50" name="username" id="username"><label for="username">Användarnamn</label><br>
            <input type="password" required maxlength="255" minlength="8" name="password" id="password"><label for="password">Lösenord minst 8 tecken</label><br>
            <div id="show_password">Visa lösenord</div><br>
            <!-- Man får välja själv om man ska vara admin eller inte -->
            <input type="checkbox" name="admin" id="admin"><label for="admin">Admin?</label><br>
            <button type="submit">Skapa konto</button>
        </fieldset>
    </form>

    <?php
    ini_set
('display_errors'1);
    
ini_set('display_startup_errors'1);
    
error_reporting(E_ALL);
    
?>

    <?php
    
if (isset($_POST["name"]) && isset($_POST["username"]) && isset($_POST["password"])) {
        
// Om användaren skrivit in allt försöker den skapa ett konto i databasen
        // Om användaren fifflat med inputsen för att få ogiltiga så blir det ett errormeddelande bara
        
try {
            
/** @var PDO $dbconn */
            
include("../databaser/dbconnection.php");

            
// Kollar om det redan finns någon med det användarnamnet
            
$sql "SELECT 1 FROM quiz_users WHERE username = ?";
            
$stmt $dbconn->prepare($sql);
            
$stmt->execute([$_POST["username"]]);
            
$result $stmt->fetch();

            if (
$result) {
                echo (
"Användare med det användarnamnet finns redan. Försök med annat");
                return;
                
// HM kanske fyll i användarens andra uppgifter så att de kan testa rätt problemfritt?
            
}

            
$sql "INSERT INTO quiz_users (name, username, password, salt, admin) VALUES(?,?,?,?,?)";
            
$stmt $dbconn->prepare($sql);

            
// Skapar salt och hashar lösenordet
            
include("hash.php");
            
$salt generateSalt($_POST["username"]); // Saltet baseras på ens användarnamn för att det ska vara unikt
            
$password customHash($_POST["password"], $salt);

            
$isAdmin = isset($_POST["admin"]) ? 0// 1 om man är admin, annars 0

            
$data = [$_POST["name"], $_POST["username"], $password$salt$isAdmin];
            
$stmt->execute($data);
            echo (
"Användare skapad. Du kan nu gå till inloggnignssidan och logga in");
        } catch (
PDOException $e) {
            echo (
$e->getMessage());
        }
    }
    
?>
    <script>
        const show_pass_btn = document.getElementById("show_password");
        const password_input = document.getElementById("password");
        show_pass_btn.addEventListener("mouseover", function() {
            password_input.type = "text";
        })
        show_pass_btn.addEventListener("mouseleave", function() {
            password_input.type = "password";
        })
    </script>
</body>

</html>