सरल उपयोगकर्ता पंजीकरण कैसे करें और फॉर्म में लॉग इन कैसे करें?
उपयोगकर्ता पंजीकरण पोर्टल बनाते समय आपको सबसे पहले विचार करना चाहिए कि आप उपयोगकर्ता खातों को कहाँ और कैसे संग्रहीत करने जा रहे हैं। इस उद्देश्य के लिए हम निम्न तालिका के साथ MySQL डेटाबेस का उपयोग करने जा रहे हैं:
CREATE TABLE IF NOT EXISTS `accounts` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`Hash` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`UserType` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
इस तालिका में हम उपयोगकर्ता नाम और पासवर्ड हैश स्टोर करने जा रहे हैं। हमारे पास एक कॉलम भी है जो हमें यह बताएगा कि खाते का प्रकार क्या है; चाहे वह सामान्य उपयोगकर्ता हो या व्यवस्थापक।
डेटाबेस कनेक्शन
हमें स्पष्ट रूप से डेटाबेस से जुड़ने और एक सत्र शुरू करने की आवश्यकता है। ये विषय इस उत्तर के दायरे से बाहर हैं। हम अपने डेटाबेस से जुड़ने के लिए पीडीओ का उपयोग करने जा रहे हैं जिसमें हमारी नई तालिका है।
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;charset=utf8mb4;dbname=test', 'dbuser', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
पीडीओ कैसे काम करता है, इसकी अधिक गहराई से व्याख्या के लिए इस लेख को देखें:https://phpdelusions.net/pdo
पंजीकरण समारोह
अब हम एक साधारण फ़ंक्शन बना सकते हैं जो डेटाबेस में उपयोगकर्ता को पंजीकृत करेगा। यह फ़ंक्शन 3 पैरामीटर स्वीकार करेगा:डीबी कनेक्शन, उपयोगकर्ता नाम और पासवर्ड।
यह फ़ंक्शन पासवर्ड का हैश बनाएगा, फिर इस पासवर्ड को त्याग दें। यह एक सरल उदाहरण है, लेकिन वास्तविक शब्दों में आप शायद अधिक चेक जोड़ना चाहेंगे और इसे और अधिक फुलप्रूफ बनाना चाहेंगे।
function register(PDO $db, string $username, string $password)
{
if (!$username || !$password) {
throw new Exception('Username and password is required!');
}
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $db->prepare('INSERT INTO accounts(Username, Hash, UserType) VALUES(?,?,?)');
$stmt->execute([
$username,
$hash,
'user' // or admin
]);
}
लॉगिन फ़ंक्शन
जैसे हमने पंजीकरण फ़ंक्शन के साथ किया था, हम लॉग इन करने के लिए एक फ़ंक्शन बनाएंगे। फ़ंक्शन समान पैरामीटर स्वीकार करेगा, लेकिन INSERT
के बजाय यह SELECT
डेटाबेस से मेल खाने वाले उपयोगकर्ता नाम के आधार पर।
यदि डेटाबेस में एक मिलान रिकॉर्ड है और संग्रहीत हैश के खिलाफ पासवर्ड सत्यापित है तो हम उपयोगकर्ता की जानकारी को एक सत्र में संग्रहीत करते हैं। सत्र इस जानकारी को हार्ड ड्राइव पर बनाए रखेगा और यह उपयोगकर्ता को भविष्य में अनुरोध करते समय उपयोग की जाने वाली कुकी देगा। उस कुकी का उपयोग करते हुए PHP हर बार पेज के अनुरोध पर उसी सत्र को खोलेगा।
function login(PDO $db, string $username, string $password)
{
if (!$username || !$password) {
throw new Exception('Username and password is required!');
}
$stmt = $db->prepare('SELECT Id, Hash, UserType FROM accounts WHERE Username=?');
$stmt->execute([ $username ]);
$user = $stmt->fetch();
if (!$user || !password_verify($password, $user['Hash'])) {
throw new Exception('Username or password incorrect!');
}
$_SESSION['loggedUserId'] = $user['Id'];
$_SESSION['UserType'] = $user['UserType'];
}
पूरा कोड
अब हम इन सभी को एक साथ जोड़ सकते हैं और कुछ HTML फॉर्म जोड़ सकते हैं। HTML भाग दायरे से बाहर है लेकिन आप इसे अपने PHP तर्क से अलग रखना चाहेंगे। संभवत:पूरी तरह से एक अलग फ़ाइल में।
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;charset=utf8mb4;dbname=test', 'inet', '5432', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
function register(PDO $db, string $username, string $password)
{
if (!$username || !$password) {
throw new Exception('Username and password is required!');
}
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $db->prepare('INSERT INTO accounts(Username, Hash, UserType) VALUES(?,?,?)');
$stmt->execute([
$username,
$hash,
'user' // or admin
]);
}
function login(PDO $db, string $username, string $password)
{
if (!$username || !$password) {
throw new Exception('Username and password is required!');
}
$stmt = $db->prepare('SELECT Id, Hash, UserType FROM accounts WHERE Username=?');
$stmt->execute([ $username ]);
$user = $stmt->fetch();
if (!$user || !password_verify($password, $user['Hash'])) {
throw new Exception('Username or password incorrect!');
}
$_SESSION['loggedUserId'] = $user['Id'];
$_SESSION['UserType'] = $user['UserType'];
}
if (isset($_POST['register'])) {
register($pdo, $_POST['username'], $_POST['password']);
}
if (isset($_POST['login'])) {
login($pdo, $_POST['username'], $_POST['password']);
}
if (!isset($_SESSION['loggedUserId'])):
?>
<!-- Register form -->
<form method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="register" value="Register">
</form>
<!-- Login form -->
<form method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="login" value="Log in">
</form>
<?php
else:
echo 'Here be something after login. You are a '.$_SESSION['UserType'];
endif;
यह एक बहुत ही सरल उदाहरण है कि कैसे पंजीकरण और लॉग इन PHP में काम करता है। मैं इसे लाइव साइट के रूप में उपयोग करने की अनुशंसा नहीं करता, लेकिन सीखने के उद्देश्यों के लिए, यह प्रदर्शित करना चाहिए कि यह कार्यक्षमता कैसे काम करती है।
आप इसके ऊपर निर्माण कर सकते हैं और उपयोगकर्ता प्रकार अलग होने पर कुछ कर सकते हैं। अधिक विशेषाधिकार प्राप्त उपयोगकर्ताओं को अधिक सामग्री दिखाएं।