सबसे पहले, विकास के दौरान त्रुटियों को संभालना बहुत महत्वपूर्ण है, इसलिए हम जांचते हैं कि क्या हमारी पोस्ट मौजूद है, हम जांचते हैं कि क्या हम डेटाबेस से जुड़े हैं, हम जांचते हैं कि क्या हमारी क्वेरी पास हुई है और चलाने के लिए ठीक है, हम उन मापदंडों की जांच करते हैं जो हम दे रहे हैं क्वेरी और हम अंत में क्वेरी निष्पादित करते हैं।
उसके बाद आप bind_result
. का उपयोग कर सकते हैं अपनी क्वेरी से फ़ील्ड प्राप्त करने के लिए एक चर का नाम देने के लिए, जैसा मैंने किया है।
ध्यान दें कि मैं अपनी क्वेरी का उपयोग कैसे कर रहा हूं? यह एक तैयार कथन है जिसे हम bind_param
. का उपयोग करके परिभाषित करते हैं यह SQL इंजेक्शन से बचने के लिए है, आपके वर्तमान कोड में, SQL इंजेक्शन अभी भी संभव है क्योंकि आप अपने चरों को साफ नहीं कर रहे हैं।
एक और गलती जो मुझे लगता है कि आप कर रहे हैं वह पासवर्ड को सादे पाठ के रूप में संग्रहीत करना है जो बहुत गलत है, आपको अपने उपयोगकर्ताओं और स्वयं की सुरक्षा के लिए हमेशा पासवर्ड एन्क्रिप्ट करना चाहिए। इसलिए मैं अपनी MySQL क्वेरी पर पासवर्ड शामिल नहीं करता, मैं पहले केवल उपयोगकर्ता का उपयोग करता हूं, यदि उपयोगकर्ता मिल जाता है तो मैं डेटाबेस से पुनर्प्राप्त पासवर्ड से मिलान करने के लिए उसके द्वारा पोस्ट किए गए पासवर्ड का उपयोग करता हूं, इस मामले में मैं bcrypt
कार्य करने के लिए जो एक बहुत ही सुरक्षित एन्क्रिप्शन लाइब्रेरी है।
यहां देखें bcrypt
का उपयोग कैसे करें .
पासवर्ड मान्य होने के बाद ही मैं डेटा को सत्र में रख रहा हूं और उपयोगकर्ता को रीडायरेक्ट कर रहा हूं।
उन सभी त्रुटियों के अलावा, जिन्हें मैंने अपने उत्तर के नीचे इंगित किया है, यहां बताया गया है कि मैं आपका कोड कैसे लिखूंगा।
<?php
session_start();
include_once('bcrypt.php');
// Your database info
$db_host = '';
$db_user = '';
$db_pass = '';
$db_name = '';
if (!isset($_POST['Username']))
{
echo 'Fill in the username...';
exit;
}
if (!isset($_POST['Password']))
{
echo 'Fill in your password...';
exit;
}
$con = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($con->connect_error)
{
die('Connect Error (' . $con->connect_errno . ') ' . $con->connect_error);
}
$sql = "SELECT Username, Password FROM `Members` WHERE Username = ?";
if (!$result = $con->prepare($sql))
{
die('Query failed: (' . $con->errno . ') ' . $con->error);
}
if (!$result->bind_param('s', $_POST['Username']))
{
die('Binding parameters failed: (' . $result->errno . ') ' . $result->error);
}
if (!$result->execute())
{
die('Execute failed: (' . $result->errno . ') ' . $result->error);
}
$result->store_result();
if ($result->num_rows == 0)
{
die('No username found...');
}
$result->bind_result($db_username, $db_password);
$result->fetch();
$result->close();
$con->close();
$bcrypt = new Bcrypt(15);
if ($bcrypt->verify($password, $db_password))
{
$_SESSION['Username'] = $db_username;
header('location:login_success.php');
exit;
}
else
{
echo 'Wrong Username or Password';
}
नोट:उपरोक्त कोड केवल एक उदाहरण है और इसका परीक्षण नहीं किया गया था, यदि आपको इसमें कोई त्रुटि दिखाई देती है तो मुझे बताएं।
आपके द्वारा पोस्ट किए गए कोड में मैंने देखी कुछ त्रुटियां:
आप समापन को याद कर रहे हैं ;
यहाँ पर:
$sql = "SELECT * FROM $Members WHERE Username = '$Username' and Password = '$Password'"
साथ ही आपकी क्वेरी पर आपके पास $Members
है लेकिन आपके पास कोई $Members
नहीं है आपके कोड में कहीं भी वेरिएबल परिभाषित किया गया है, क्या आप शायद Members
say कहना चाहते हैं? इसके बजाय, जैसे:
$sql = "SELECT * FROM `Members` WHERE Username = '$Username' and Password = '$Password'";
क्या यह नहीं होना चाहिए
$count = mysql_num_rows($result);
बनें
$count = mysqli_num_rows($result);
और
$result=mysqli_query($sql);
बनें
$result=mysqli_query($sql_connection, $sql);
mysqli_query
. के नीचे के हिस्से पर आपकी कोई क्वेरी नहीं है
if (!mysqli_query($sql_connection))