Webbserverprogrammering 1

Show sourcecode

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

webbsrvprg/exercises/slutprojekt/

actions.php
administer_users.php
create_code.php
database_include.php
dbconnection.php
index.php
login copy.php
login.php
main.php
password_renewals.php
play copy.php
play.php
setup.php
sign_up.php
statistics.php
verification.php
verify_mail.php

sign_up.php

139 lines UTF-8 Windows (CRLF)
<?php
ini_set
('display_errors'1);
ini_set('display_startup_errors'1);
error_reporting(E_ALL);
session_start(["gc_maxlifetime" => 86400]);
?>

<!DOCTYPE html>
<html lang="sv">

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

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

        #warning_label {
            background-color: lightcoral;
            display: none;
        }

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

<body>
    <?php
    
try {
        
/** @var PDO $dbconn */
        
include("dbconnection.php");

        if (isset(
$_POST["name"])) {
            
// Om det skickats ett formulär hanteras informationen. 

            // Om användaren lyckats skita till inputsen kommer det bara inte fungera på något steg så ser inte till att allt är angivet
            
$name $_POST["name"];
            
$username $_POST["username"];
            
$mail $_POST["mail"];
            
$admin = isset($_POST["admin"]) ? 0;

            
$password $_POST["password"];
            
$hashed_password password_hash($passwordPASSWORD_DEFAULT);

            
$sql "INSERT INTO bs_users (username, name, password, mail, admin) values(?,?,?,?,?)";
            
$stmt $dbconn->prepare($sql);
            
$data = [$username$name$hashed_password$mail$admin];
            
$stmt->execute($data);

            include(
"create_code.php"); // Skapas nu en variabel $code;
            
$id $dbconn->lastInsertId();

            
$sql "INSERT INTO bs_verifications (user_id, code) value (?,?)";
            
$stmt $dbconn->prepare($sql);
            
$data = [$id$code];
            
$stmt->execute($data); // Nu startar timern eftersom denna tid loggas.

            
$link "https://labb.vgy.se/~harmol23/webbsrvprg/exercises/slutprojekt/verify_mail.php?id=" $id "&code=" $code;

            
mail($mail"Verifikation""Hej $name! Följ denna länk för att verifiera din mejl på battleshipspelet: " $link);

            echo (
"Ett mejl har skickats för att verifiera din mejladress $mail. Du har 15 minuter på dig att verifiera. Om du inte får mejlet så måste du vänta tills tiden gått ut om du vill försöka igen med samma användarnamn. Efter verifikationen kan du logga in i inloggningssidan.");
        } else {
            
// Om ett formulär inte skickats in så presenteras ett.
            
echo ('
<form method="POST">
        <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="100" name="username" id="username" onkeyup="checkUsername()"><label for="username">Användarnamn </label><div id="warning_label">Upptaget</div><br>
            <input type="mail" required maxlength="100" name="mail" id="mail"><label for="mail">Din mejladress</label><br>
            <input type="password" required maxlength="200" minlength="8" name="password" id="password"><label for="password">Lösenord</label><br>
            <div id="show_password">Visa lösenord</div><br>
            <input type="checkbox" name="admin" id="admin"><label for="admin">Admin?</label><br>
            <button type="submit" id="submit_btn">Skapa konto</button>
        </fieldset>
    </form>
    <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>'
            
);
        }
    } catch (
PDOException $e) {
        echo (
$e->getMessage());
    }
    
?>

    <script>
        function get(id) {
            return (document.getElementById(id));
        }

        let check_username_request = new XMLHttpRequest();
        check_username_request.onreadystatechange = function() {
            if (check_username_request.readyState == 4 && check_username_request.status == 200) {
                if (check_username_request.responseText.trim() == "taken") {
                    // Användarnamnet är upptaget -> låser inlämning och varnar
                    get("submit_btn").disabled = true;
                    get("warning_label").style.display = "inline";
                } else {
                    // Användarnamnet är inte upptaget -> låser upp inlämning och tar bort varning
                    get("submit_btn").disabled = false;
                    get("warning_label").style.display = "none";
                }
            }
        }

        function checkUsername(){
            if (get("username").value) {
                // Bara om den faktiskt är ifylld.
                const input = get("username").value;
                check_username_request.open("GET", "actions.php?action=CHECK_USERNAME&username=" + input, true);
                check_username_request.send();
                //  encodeURIComponent(value)
            }
        }
    </script>
</body>

</html>