MySQL का उपयोग करके किसी भी PHP ऐप में प्रमाणीकरण जोड़ें

PHP एक ओपन-सोर्स सर्वर-साइड स्क्रिप्टिंग भाषा है जिसे वेब एप्लिकेशन बनाने के लिए HTML में एम्बेड किया जा सकता है। इसका उपयोग गतिशील वेब एप्लिकेशन विकसित करने और एप्लिकेशन को डेटाबेस से जोड़ने के लिए किया जाता है।

इस गाइड में, आप सीखेंगे कि PHP और MySQL डेटाबेस का उपयोग करके एक प्रमाणीकरण प्रणाली कैसे बनाई जाती है। हम उम्मीद करते हैं कि आरंभ करने से पहले आप PHP और MySQL की मूल बातें जान लें।

HTML और Bulma CSS का उपयोग करके लेआउट का निर्माण

इस प्रोजेक्ट का फ्रंट एंड HTML और Bulma CSS का उपयोग करके बनाया गया है। बुल्मा सीएसएस वेब पेजों को डिजाइन करने के लिए उपयोग किए जाने वाले लोकप्रिय सीएसएस ढांचे में से एक है। आप अपनी PHP फ़ाइल में सीडीएन से छोटा सीएसएस आयात करके बुल्मा सीएसएस का उपयोग कर सकते हैं।

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

MySQL डेटाबेस को एकीकृत करना

MySQL एक रिलेशनल SQL डेटाबेस मैनेजमेंट सिस्टम है जिसका उपयोग डेटा पर CRUD संचालन करने के लिए किया जाता है। यह वेब एप्लिकेशन डेटाबेस के प्रबंधन के लिए phpMyAdmin का उपयोग करेगा।

phpMyAdmin PHP में लिखा गया एक मुफ्त सॉफ्टवेयर टूल है, जिसका उद्देश्य वेब पर MySQL के प्रशासन को संभालना है।

आप अपनी विंडोज मशीन (या लिनक्स पर XAMPP ) पर WAMP सर्वर सेट करके phpMyAdmin स्थापित कर सकते हैं और निम्न URL पर जा सकते हैं

 http://localhost/phpmyadmin

स्क्रीन इस तरह दिखेगी:

डेटाबेस बनाना

आप या तो SQL क्वेरी का उपयोग करके या phpMyAdmin द्वारा प्रदान किए गए GUI के माध्यम से डेटाबेस बना सकते हैं। इस एप्लिकेशन में, डेटाबेस का नाम प्रमाणीकरण है, और तालिका का नाम भी उपयोगकर्ता है। तालिका की विशेषताएँ आईडी, उपयोगकर्ता नाम, ईमेल और पासवर्ड हैं।

यहां बताया गया है कि आप SQL कमांड का उपयोग करके डेटाबेस और टेबल कैसे बना सकते हैं:

और जानें: सबसे महत्वपूर्ण SQL कमांड किसी भी प्रोग्रामर को पता होना चाहिए

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

ऐप को डेटाबेस से कनेक्ट करना

अपने प्रोजेक्ट फ़ोल्डर में db.php नाम की एक फ़ाइल बनाएँ, जहाँ आप अपने डेटाबेस को कनेक्ट करेंगे और इस फ़ाइल को उपयोग करने के लिए अन्य PHP फ़ाइलों में आयात करेंगे।

कनेक्शन mysqli_connect() विधि का उपयोग करके स्थापित किया गया है। यह विधि चार तर्कों को स्वीकार करती है: सर्वर का नाम, उपयोगकर्ता, पासवर्ड और डेटाबेस का नाम।

आप अन्य PHP फ़ाइलों में db.php फ़ाइल आयात करके क्वेरी चलाते समय $connection चर का उपयोग कर सकते हैं।

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

PHP का उपयोग करके साइन अप करें

प्रमाणीकरण प्रणाली के निर्माण के पहले चरण में पंजीकरण या साइन अप शामिल है। साइनअप पेज के फ्रंटएंड लेआउट में एक क्रिया के साथ एक फॉर्म होता है जो पेज पर POST अनुरोध करता है। इसमें चार इनपुट फ़ील्ड हैं: उपयोगकर्ता नाम, ईमेल, पासवर्ड और पासवर्ड की पुष्टि करें।

 <form class="card m-3 p-6 m-5 container mx-auto" action="./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="./login.php">Login</a></p>
</form>

isset() विधि यह जांचती है कि बटन क्लिक किया गया है या नहीं, क्योंकि यह $_POST[] सुपरग्लोबल का उपयोग करके रजिस्टर बटन तक पहुंच सकता है।

यह सब से पहले, आप register.php फ़ाइल में db.php फ़ाइल आयात करने की जरूरत है। इनपुट सत्यापन के लिए घोषित कुछ चर हैं। नीचे दिए गए कोड की जाँच करें।

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

रजिस्टर पृष्ठ पर इनपुट सत्यापन

इनपुट सत्यापन के साथ आगे बढ़ने से पहले, आपको $_POST[] का उपयोग करके इनपुट तत्वों के मूल्यों तक पहुंच प्राप्त करने की आवश्यकता है।

mysqli_real_escape_string() विधि स्ट्रिंग से विशेष वर्णों को हटाने में मदद करती है क्योंकि वे क्वेरी संचालन करते समय दुर्भावनापूर्ण कार्य कर सकते हैं।

संबंधित: जावास्क्रिप्ट के साथ क्लाइंट-साइड फॉर्म सत्यापन को कैसे कार्यान्वित करें

 $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";
}

सबसे पहले, आप जांचें कि फ़ील्ड खाली हैं या नहीं। ईमेल इनपुट फ़ील्ड के लिए, आपको यह जांचना होगा कि उपयोगकर्ता ने एक वैध ईमेल दर्ज किया है या नहीं, फ़िल्टर_वार () विधि का उपयोग नहीं कर रहा है। पासवर्ड फ़ील्ड की लंबाई 6 से अधिक होनी चाहिए। ये बुनियादी मान्यताएं हैं जिन्हें आपको किसी भी एप्लिकेशन को बनाते समय ध्यान रखने की आवश्यकता है।

यदि कोई त्रुटि नहीं है, तो आप register.php फ़ाइल पर क्वेरी कमांड निष्पादित करने के साथ आगे बढ़ सकते हैं।

 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");
}

आपको एक क्वेरी चलानी होगी जो यह जांचती है कि डेटाबेस में ईमेल पहले से मौजूद है या नहीं। सभी क्वेरी ऑपरेशन करने के लिए mysqli_query () विधि का उपयोग किया जाता है। आपको क्वेरी के परिणाम को mysqli_query_assoc() विधि में पास करना होगा। यह विधि परिणाम को स्ट्रिंग्स के एक साहचर्य सरणी में परिवर्तित करती है।

यदि उपयोगकर्ता पहले से मौजूद है, तो आपको संदेश के साथ एक त्रुटि प्रदर्शित करने की आवश्यकता है: उपयोगकर्ता पहले से मौजूद है। अन्यथा, आपको डेटाबेस में फ़ील्ड सम्मिलित करने की आवश्यकता है। चूंकि पासवर्ड स्ट्रिंग्स को प्लेनटेक्स्ट में स्टोर करना एक अच्छा अभ्यास नहीं है, इसलिए md5 () विधि पासवर्ड को हैश में बदल देगी, और फिर इसे सेव कर देगी।

एक बार जब उपयोगकर्ता डेटाबेस में संग्रहीत हो जाता है, तो आपको उपयोगकर्ता नाम या ईमेल को $_SESSION[] सुपरग्लोबल में लोड करना होगा और उपयोगकर्ता को होम पेज पर रीडायरेक्ट करना होगा।

होम स्क्रीन पर एक नजर

उपयोगकर्ता होम पेज तक तभी पहुंच सकते हैं जब वे लॉग इन हों। होम पेज पर, आपको यह जांचना होगा कि सत्र मौजूद है या नहीं। यदि कोई सत्र सेट नहीं है, तो आपको उपयोगकर्ता को लॉगिन पृष्ठ पर पुनर्निर्देशित करने की आवश्यकता है।

PHP का उपयोग करके लॉगिन करें

इस एप्लिकेशन में, उपयोगकर्ता ईमेल और पासवर्ड का उपयोग करके लॉग इन करेगा। login.php के लिए HTML लेआउट:

 <form class="card m-3 p-6 m-5 container mx-auto" action="./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="./register.php">Register here</a></p>
</form>

उपयोगकर्ता को प्रमाणित करना

आपको उसी तरह के इनपुट्स को वैलिडेट करना होगा जैसे यूजर को रजिस्टर करते समय किया गया था।

 $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";
}

एक बार जब कोई सत्यापन त्रुटि नहीं होती है, तो इनपुट फ़ील्ड के मान SQL क्वेरी में चलेंगे। पासवर्ड का हैशेड मान प्राप्त करने के लिए, पासवर्ड को md5 () विधि में पास करें।

 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";
}
}

हैशेड पासवर्ड प्राप्त करने के बाद, ईमेल और हैशेड पासवर्ड को SQL क्वेरी में पास करें और इसे mysqli_query() विधि का उपयोग करके चलाएं

परिणाम प्राप्त करने पर, आपको इसे mysqli_num_rows() विधि में पास करना होगा। यदि mysqli_num_rows () विधि 1 मान लौटाती है, तो आप उपयोगकर्ता को प्रमाणित कर सकते हैं।

ईमेल और उपयोगकर्ता नाम को $_SESSION[] में संग्रहीत करें और उपयोगकर्ता को होम पेज पर रीडायरेक्ट करें।

उपयोगकर्ता को लॉगआउट करें

उपयोगकर्ता प्रमाणीकरण $_SESSION[] सुपरग्लोबल का उपयोग करके किया जाता है। उपयोगकर्ता को लॉग आउट करने के लिए, आपको सत्र को नष्ट करना होगा और उपयोगकर्ता को login.php पर पुनर्निर्देशित करना होगा।

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

एक सुरक्षित प्रमाणीकरण प्रणाली महत्वपूर्ण है

आप पहले ही PHP और MySQL का उपयोग करके प्रमाणीकरण प्रणाली जोड़ना सीख चुके हैं। आप इस परियोजना को और अधिक उन्नत कार्यक्षमताओं को जोड़कर अगले स्तर पर ले जा सकते हैं या फिर इस प्रणाली को एक बड़े पैमाने पर परियोजना जैसे सोशल मीडिया ऐप, एक ब्लॉग पेज, या किसी भी बड़े प्रोजेक्ट में एकीकृत कर सकते हैं। जितना हो सके नई चीजें सीखते रहें और निर्माण करते रहें।

PHP के बारे में अधिक जानना चाहते हैं? PHP की सही जानकारी के साथ आप कई जोड़तोड़ कर सकते हैं।