Nyheter i Android, Telefoner, Prylar Och Recensioner

Lägg till autentisering till valfri PHP-app som använder MySQL

PHP är ett skriptspråk på serversidan med öppen källkod som kan bäddas in i HTML för att bygga webbapplikationer. Den används för att utveckla dynamiska webbapplikationer och koppla applikationen till en databas.

I den här guiden kommer du att lära dig hur du bygger ett autentiseringssystem med PHP- och MySQL-databaser. Vi förväntar oss att du kan grunderna i PHP och MySQL innan du börjar.

Bygga layouten med HTML och Bulma CSS

Framsidan av detta projekt är byggt med HTML och Bulma CSS. Bulma CSS är ett av de populära CSS-ramverken som används för att designa webbsidor. Du kan använda Bulma CSS genom att importera den minifierade CSS från CDN till din PHP-fil.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">

Integrering av MySQL-databas

MySQL är ett relationsbaserat SQL-databashanteringssystem som används för att utföra CRUD-operationer på data. Denna webbapplikation kommer att använda phpMyAdmin för att hantera databasen.

phpMyAdmin är en free mjukvaruverktyg skrivet i PHP, avsett att hantera administrationen av MySQL över webben.

Du kan installera phpMyAdmin genom att ställa in en WAMP-server på din Windows-dator (eller XAMPP på Linux) och besöka följande URL

http://localhost/phpmyadmin

Skärmen kommer att se ut så här:

Skapar databasen

Du kan skapa databasen antingen genom att använda SQL-frågor eller via det grafiska användargränssnittet som tillhandahålls av phpMyAdmin. I det här programmet är namnet på databasen auth, och tabellnamnet är också användare. Tabellens attribut är id, användarnamn, e-post och lösenord.

Så här kan du skapa databasen och tabellen med SQL-kommandon:

CREATE DATABASE auth;
CREATE TABLE users(
id int,
username varchar(255),
email varchar(255),
password varchar(500),
);

Ansluter appen till databasen

Skapa en fil med namnet db.php i din projektmapp, där du kommer att ansluta din databas och importera den här filen till andra PHP-filer för att använda den.

Anslutningen upprättas med hjälp av mysqli_connect() metod. Den här metoden accepterar fyra argument: servernamnet, användaren, lösenordet och databasnamnet.

Du kan använda $anslutning variabel när du kör frågor genom att importera filen db.php till andra PHP-filer.

<?php
$connection = mysqli_connect("localhost", "root", "", "auth") ;
?>

Registrera dig med PHP

Den första fasen av att bygga ett autentiseringssystem involverar registrering eller registrering. Frontend-layouten på registreringssidan har ett formulär med en handling som gör en POST-begäran på sidan. Den har fyra inmatningsfält: användarnamn, e-post, lösenord och bekräfta lösenord.

 <form class="card m-3 p-6 m-5 container mx-auto" action="https://ipotek.net/lagg-till-autentisering-till-valfri-php-app-som-anvander-mysql/./register.php" method="POST">

<h1 class="title is-1 has-text-center">Register Here</h1>
<input class="input is-primary mt-4" type="text" name="username" placeholder="Username">
<?php if ($usernameErrorMsg != "") echo "<p class="is-size-6 is-danger is-light has-text-danger">$usernameErrorMsg</p>" ?>

<input class="input is-primary mt-4" type="email" name="email" placeholder="Email">
<?php if ($emailErrorMsg != "") echo "<p class="is-size-6 is-danger is-light has-text-danger">$emailErrorMsg</p>" ?>

<input class="input is-primary mt-4" type="password" name="password" placeholder="Password">
<?php if ($passwordErrorMsg != "") echo "<p class="is-size-6 is-danger is-light has-text-danger">$passwordErrorMsg</p>" ?>

<input class="input is-primary mt-4" type="password" name="confirm-password" placeholder="Confirm Password">
<?php if ($confirmPasswordErrorMsg != "") echo "<p class="is-size-6 is-danger is-light has-text-danger">$confirmPasswordErrorMsg</p>" ?>

<button type="submit" name="submit" class="button is-primary mt-4">Register</button>
<p class="mt-2 text-center">Already have an account ? <a href="https://ipotek.net/lagg-till-autentisering-till-valfri-php-app-som-anvander-mysql/./login.php">Login</a></p>
</form>

De isset() metoden kontrollerar om knappen klickas eller inte, eftersom den kan komma åt Registrera knappen med hjälp av $_POST[] superglobal.

Relaterad  7 bästa Asana-integreringarna för 2023 (Spara tid och pengar)

Innan allt detta måste du importera db.php fil i register.php fil. Det finns ett par variabler deklarerade för indatavalideringen. Kolla in koden nedan.

include "./db.php";
$error = "";
$emailErrorMsg = "";
$usernameErrorMsg = "";
$passwordErrorMsg = "";
$confirmPasswordErrorMsg = "";

Inmatningsvalidering på registersidan

Innan du fortsätter med ingångsvalideringen måste du få tillgång till värdena för de indataelement som använder $_POST[].

De mysqli_real_escape_string() metod hjälper till att ta bort specialtecken från strängen eftersom de kan orsaka skadliga åtgärder när du utför frågeoperationer.

$username = mysqli_real_escape_string($connection, $_POST["username"]);
$email = mysqli_real_escape_string($connection, $_POST["email"]);
$password = mysqli_real_escape_string($connection, $_POST["password"]);
$confirmPassword = mysqli_real_escape_string($connection, $_POST["confirm-password"]);
if($username == ""){
$usernameErrorMsg = "Please enter your username";
}
if($email == ""){
$emailErrorMsg = "Please enter the email";
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErrorMsg = "Please enter a valid email";
}
if($password == ""){
$passwordErrorMsg = "Enter your password";
}
if($confirmPassword == ""){
$confirmPasswordErrorMsg = "Enter confirm password";
}
if(strlen($password) < 6){
$passwordErrorMsg = "Enter a password greater than 6 characters";
}else if($password!=$confirmPassword){
$confirmPasswordErrorMsg = "Password and Confirm Password field should be same";
}

Först och främst kontrollerar du om fälten är tomma eller inte. För e-postinmatningsfältet måste du kontrollera om användaren har angett en giltig e-post eller inte använder filter_var() metod. Längden på lösenordsfältet bör vara större än 6. Det här är de grundläggande valideringarna du måste ta hand om när du bygger en applikation.

Om det inte finns några fel kan du fortsätta med att utföra frågekommandon på register.php fil.

if($error == "" && $emailErrorMsg == "" && $passwordErrorMsg == "" && $confirmPasswordErrorMsg == ""){
$query = "SELECT * FROM auth WHERE email="$email"";
$findUser = mysqli_query($connection, $query);
$resultantUser = mysqli_fetch_assoc($findUser);

if($resultantUser){
$error = "User already exists";
}
$password = md5($password);
$query = "INSERT INTO auth (username, email, password) VALUES('$username', '$email', '$password')";
$insertUser = mysqli_query($connection, $query);

$_SESSION['username'] = $username;
$_SESSION['email'] = $email;
header("location: home.php");
}

Du måste köra en fråga som kontrollerar om e-postmeddelandet redan finns i databasen eller inte. De mysqli_query() metod används för att utföra alla frågeoperationer. Du måste skicka resultatet av frågan i mysqli_query_assoc() metod. Denna metod konverterar resultatet till en associativ array av strängar.

Relaterad  Android 12: Hur man hittar vilka appar som använde dina personuppgifter nyligen

Om användaren redan finns måste du visa ett felmeddelande med meddelandet: Användaren finns redan. Annars måste du infoga fälten i databasen. Eftersom det inte är en bra praxis att lagra lösenordssträngar i klartext, md5() metod konverterar lösenordet till en hash och sparar det sedan.

När användaren är lagrad i databasen måste du ladda användarnamnet eller e-postadressen i $_SESSION[] superglobal och omdirigera användaren till hemsidan.

En titt på startskärmen

Användaren kan bara komma åt startsidan om de är inloggade. På startsidan måste du kontrollera om SESSION finns eller inte. Om det finns nej SESSION set måste du omdirigera användaren till inloggningssidan.

Logga in med PHP

I denna applikation kommer användaren att logga in med e-post och lösenord. HTML-layouten för login.php:

<form class="card m-3 p-6 m-5 container mx-auto" action="https://ipotek.net/lagg-till-autentisering-till-valfri-php-app-som-anvander-mysql/./login.php" method="POST">
<h1 class="title is-1 has-text-center has-text-black">Login Here</h1>
<?php if ($error != "") echo " <div class="button is-danger is-light">$error</div>" ?>
<input class="input is-primary mt-4" name="email" type="email" placeholder="Email">
<?php if ($emailErrorMsg != "") echo "<p class="is-size-6 is-danger is-light has-text-danger">$emailErrorMsg</p>" ?>

<input class="input is-primary mt-4" name="password" type="password" placeholder="Password">
<?php if ($passwordErrorMsg != "") echo "<p class="is-size-6 is-danger is-light has-text-danger">$passwordErrorMsg</p>" ?>
<button class="button is-primary mt-4" type="submit" name="submit">Login</button>
<p>Don't have an account? <a href="https://ipotek.net/lagg-till-autentisering-till-valfri-php-app-som-anvander-mysql/./register.php">Register here</a></p>
</form>

Autentisera användaren

Du måste validera inmatningarna som liknar hur det gjordes när du registrerade användaren.

$email = mysqli_real_escape_string($connection, $_POST["email"]);
$password = mysqli_real_escape_string($connection, $_POST["password"]);
if($email == ""){
$emailErrorMsg = "Please enter the email";
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErrorMsg = "Please enter a valid email";
}
if($password == ""){
$passwordErrorMsg = "Enter your password";
}

När det inte finns några valideringsfel kommer värdena för inmatningsfälten att köras i SQL-frågan. För att få det hashade värdet för lösenordet, skicka lösenordet i md5() metod.

if($emailErrorMsg == "" && $passwordErrorMsg == ""){
$password = md5($password);
$query = "SELECT * FROM users WHERE email="$email" AND password='$password'";
$find_user = mysqli_query($connection, $query);
if(mysqli_num_rows($find_user) == 1){
$_SESSION["email"] = $email;
while($row = mysqli_fetch_assoc($find_user)){
$_SESSION["username"] = $row["username"];
}

header("location:home.php");
}else{
$error = "Invalid credentials";
}
}

När du har hämtat det hashade lösenordet skickar du e-postmeddelandet och det hashade lösenordet i SQL-frågan och kör det med mysqli_query() metod.

Relaterad  Förbättra din komposition med dessa tips från en fotograf som arbetat med Ansel Adams

När du får resultatet måste du skicka det i mysqli_num_rows() metod. Om mysqli_num_rows() metod returnerar värdet 1, sedan kan du autentisera användaren.

Lagra e-post och användarnamn i $_SESSION[] och omdirigera användaren till hemsidan.

Logga ut användaren

Användarautentisering görs med hjälp av $_SESSION[] superglobal. För att logga ut användaren måste du förstöra SESSION och omdirigera användaren till login.php.

 session_start();
$_SESSION = array();
session_destroy();
header("Location: login.php");
exit;

Ett säkert autentiseringssystem är viktigt

Du har redan lärt dig att lägga till ett autentiseringssystem med PHP och MySQL. Du kan ta det här projektet till nästa nivå genom att lägga till mer avancerade funktioner till det eller integrera det här systemet i ett storskaligt projekt som en app för sociala medier, en bloggsida eller något större projekt. Fortsätt lära dig och bygga nya saker så mycket du kan.

Vill du lära dig mer om PHP? Det finns många manipulationer du kan göra med rätt PHP-kunskap.

Om författaren

Unnati Bamania (14 artiklar publicerade)

Unnati är en entusiastisk fullstack-utvecklare. Hon älskar att bygga projekt med hjälp av olika programmeringsspråk. I henne free tid, hon älskar att spela gitarr och är en matlagningsentusiast.

Mer från Unnati Bamania

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera

Table of Contents