För att ansluta till en databas med hjälp av PHP så behöver vi skapa en konfiguration där vi definierar några mysqli-funktioner. MySQLi låter dig få tillgång till MySQL-databaser. För en fullständig lista över dessa funktioner, se nedan (via fantastiska w3schools):

https://www.w3schools.com/php/php_ref_mysqli.asp

Vi skapar ett nytt PHP-dokument som vi döper till config.php och i detta skriver vi följande kod:

<?php /* Databasloginuppgifter. Vi antar här att du har standardanvändaren 'root' utan lösenord */ 

define('DB_SERVER', 'localhost');  /* Anslut till lokal databas */
define('DB_USERNAME', 'root');  /* Användarnamn 'root' */
define('DB_PASSWORD', ''); /* Inget lösenord */
define('DB_NAME', 'ANKA');   /* Försök att ansluta till databasnamnet ANKA */ 

$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);   if($link === false){     die("ERROR: Could not connect. " . mysqli_connect_error()); } ?>

/* Försök att ansluta med uppgifterna vi definierat, om detta inte fungerar avbryt med felmeddelande */

För att ovanstående kod ska fungera så måste vi se till att vi har WAMP eller motsvarande-mjukvara installerad på en dator vi arbetar emot (exempelvis vår egen). Koden ovanför gör inget annat än att ansluta till databasservern.

Vi behöver även en databas som heter ANKA, med två tabeller, ”Anvandarnamn” och ”losenord”. Användarnamn måste vara unik (vi kan inte ha flera användare med samma användarnamn, det ställer till problem med vår kod). Vi kan skapa denna i phpMyAdmin genom att köra denna kod:

CREATE database ANKA;
use ANKA;
CREATE TABLE `anvandare` (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `Anvandarnamn` varchar(50) NOT NULL UNIQUE,
  `Losenord` varchar(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Vi behöver sedan skapa ett formulär för att registrera konton, i exemplet nedanför använder vi oss av config.php för att ansluta, vi kollar i databasen om användare finns, annars registrerar vi användaren. Döp ett nytt dokument till register.php och börja mata in koden

<?php
// Inkludera konfigurationsfilen vi skapade ovanför
require_once "config.php";
 
// Definiera variabler och ge dem tomma värden
$Anvandarnamn = $losenord = $bekrafta_losenord = "";
$Anvandarnamn_fel = $losenord_fel = $bekrafta_losenord_fel = "";
 
// Hur hanterar vi datan vi fått när ett formulär postats?
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Validera användarnamn (om Anvandarnamn är tomt... )
    if(empty(trim($_POST["Anvandarnamn"]))){
        $Anvandarnamn:_fel = "Vänligen mata in ett användarnamn.";
    } else{
        // Vår SQL-sats för att hämta användare ur databasen
        $sql = "SELECT id FROM anvandare WHERE Anvandarnamn = ?";
        
        if($stmt = mysqli_prepare($link, $sql)){
            // Skapa ett förberett påstående med mysqli - användarnamn
            mysqli_stmt_bind_param($stmt, "s", $param_Anvandarnamn);
            // s = string, i = integer, d=double
            
            // Ställ in parameter för Användarnamn
            $param_Anvandarnamn = trim($_POST["Anvandarnamn"]);
            
            // Försök att köra vårt förberedda påstående
            if(mysqli_stmt_execute($stmt)){
                /* spara resultatet */
                mysqli_stmt_store_result($stmt);
                
                if(mysqli_stmt_num_rows($stmt) == 1){
             $Anvandarnamn_fel = "Detta användarnamn är redan taget.";
                } else{
                    $Anvandarnamn = trim($_POST["Anvandarnamn"]);
                }
            } else{
                echo "Något gick fel, försök igen.";
            }
        }
         
        // Stäng påståendet.
        mysqli_stmt_close($stmt);
    }
    
    // Validera lösenord
    if(empty(trim($_POST["losenord"]))){
        $losenord_fel = "Vänligen mata in ett lösenord.";     
    } elseif(strlen(trim($_POST["losenord"])) < 8){
        $losenord_fel = "Lösenordet måste ha minst 8 tecken.";
    } else{
        $password = trim($_POST["losenord"]);
    }
    
    // Bekräfta lösenordet
    if(empty(trim($_POST["bekrafta_losenord"]))){
        $bekrafta_losenord_fel = "Vänligen bekräfta lösenordet.";     
    } else{
        $bekrafta_losenord = trim($_POST["bekrafta_losenord"]);
        if(empty($losenord_fel) && ($password != $bekrafta_losenord)){
            $bekrafta_losenord_fel = "Lösenorden matchar inte.";
        }
    }
    
    // Undersök om det finns fel innan vi lägger in i databasen
    if(empty($Anvandarnamn_fel) && empty($losenord_fel) && empty($bekrafta_losenord_fel)){
        
        // Förbered MYSQL-kommando för att lägga in i databasen
$sql = "INSERT INTO anvandare (Anvandarnamn, losenord) VALUES (?, ?)";
         
        if($stmt = mysqli_prepare($link, $sql)){
            // Koppla variabler i mysqli-påståendet som parametrar
mysqli_stmt_bind_param($stmt, "ss", $param_Anvandarnamn, $param_losenord);
// Eftersom vi kollar två värden blir det dubbla s (2 strängar)
            
            // Ställ in parametrarna
            $param_Anvandarnamn = $Anvandarnamn;
        $param_losenord = password_hash($losenord, PASSWORD_DEFAULT); // Krypterar lösenordet med bcrypt
            
            // Försök att köra påståendet
            if(mysqli_stmt_execute($stmt)){
                // Rikta om till vår loginsida
                header("location: login.php");
            } else{
                echo "Något gick fel, försök igen.";
            }
        }
         
        // Stäng påståendet
        mysqli_stmt_close($stmt);
    }
    
    // Stäng anslutningen till databasen
    mysqli_close($link);
}
?>

För att ovanstående ska fungera så behöver vi även ett formulär, vi skapar ett snyggt sådant lite snabbt med hjälp av Bootstrap. Lägg detta i samma dokument, under PHP-koden ovanför.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Registrera dig</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>Sign Up</h2>
        <p>Fyll i detta formulär för att skapa ett konto.</p>
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
            <div class="form-group <?php echo (!empty($Anvandarnamn_fel)) ? 'has-error' : ''; ?>">
                <label>Anvandarnamn</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" value="<?php echo $losenord; ?>">
                <span class="help-block"><?php echo $losenord_fel; ?></span>
            </div>
            <div class="form-group <?php echo (!empty($bekrafta_losenord_fel)) ? 'has-error' : ''; ?>">
                <label>Bekräfta lösenord</label>
                <input type="password" name="bekrafta_losenord" class="form-control" value="<?php echo $bekrafta_losenord; ?>">
                <span class="help-block"><?php echo $bekrafta_losenord_fel; ?></span>
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Skicka">
                <input type="reset" class="btn btn-default" value="Nollställ">
            </div>
            <p>Har du redan ett konto? <a href="login.php">Logga in här</a>.</p>
        </form>
    </div>    
</body>
</html>

Se till att all kod ligger på varsina rader (WordPress delar upp raderna lite) annars kommer ni att stöta på en del problem om ni skriver av koden ordagrant.

Published
Categories webbutveckling
Views 23

Comments

No Comments

Lämna ett svar