Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

सरल PHP SQL लॉगिन समस्या निवारण

सबसे पहले, विकास के दौरान त्रुटियों को संभालना बहुत महत्वपूर्ण है, इसलिए हम जांचते हैं कि क्या हमारी पोस्ट मौजूद है, हम जांचते हैं कि क्या हम डेटाबेस से जुड़े हैं, हम जांचते हैं कि क्या हमारी क्वेरी पास हुई है और चलाने के लिए ठीक है, हम उन मापदंडों की जांच करते हैं जो हम दे रहे हैं क्वेरी और हम अंत में क्वेरी निष्पादित करते हैं।

उसके बाद आप 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)) 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GTID से पारंपरिक प्रतिकृति पर वापस जाएं

  2. Mysql में अक्षांश और देशांतर का उपयोग करके दो बिंदुओं के बीच की दूरी का पता लगाएं

  3. लाइब्रेरी लोड नहीं हुई:mysql2 मणि ​​के साथ OS X 10.6 पर 'रेल सर्वर' चलाने का प्रयास करते समय libmysqlclient.16.dylib त्रुटि

  4. ऑटो वेतन वृद्धि आरंभिक संख्या बदलें?

  5. MySQL - php . में पंक्तियों की कुल संख्या गिनें