2012-05-21 12 views
6

मैं अपने प्रश्न here पोस्ट और इससे पहले कि मैं यह पोस्ट संपादित नहीं एक असली सवाल के रूप में बंद हो गया!जांच उपयोगकर्ता नाम और पासवर्ड डेटाबेस पर (स्क्रिप्ट शामिल)

<html> 
    <head> 
    <title>Password Checking Script</title> 
    </head> 
    <body> 
    <form action="check_user-pass.php" method="POST"> 
     <h3>Please Login</h3> 

     User Name: <input type="text" name="user_name"><br> 
     Password: <input type="password" name="password"> 

     <input type="submit" name="submit" value="Login!"> 
    </form> 
    </body> 
</html> 

जैसा कि आप देख, इस फार्म check_user-pass.php के माध्यम से उपयोगकर्ता प्रमाणित करता है:

मैं इस तरह एक लॉगिन प्रपत्र की है।
यह मेरे डेटाबेस पर उन प्रमाण-पत्रों की तलाश करता है; यदि वे मौजूद हैं, तो OK लौटाता है, अन्यथा NO मान देता है।

तो मेरा सवाल यह है: check_user-pass.php में मुझे किस कोड को शामिल करना चाहिए?
मैंने और कोड जोड़ने की कोशिश की लेकिन वह भी ऐसा नहीं कर सका! मेरे वर्तमान कोड है:

<?php 
ob_start(); 
$host=""; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name=""; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password") or die(mysql_error()); 
echo "Connected to MySQL<br />"; 
mysql_select_db("$db_name") or die(mysql_error()); 
echo "Connected to Database<br />"; 
// Check $username and $password 
/* 
if(empty($_POST['username'])) 
{ 
    echo "UserName/Password is empty!"; 
    return false; 
} 
if(empty($_POST['password'])) 
{ 
    echo "Password is empty!"; 
    return false; 
} 
*/ 

// Define $username and $password 
$username=$_POST['username']; 
$password=md5($_POST['pass']); 


// To protect MySQL injection (more detail about MySQL injection) 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if ($count==1) { 
    echo "Success! $count"; 
} else { 
    echo "Unsuccessful! $count"; 
} 

ob_end_flush(); 
?> 
+0

यह कोड काम करना चाहिए। आप जिस समस्या का सामना कर रहे हैं ?? –

+0

@PdsIr ** StackOverflow में आपका स्वागत है! ** सुनिश्चित करें [faq] (http://stackoverflow.com/faq)। –

उत्तर

3

में आप के रूप में नाम user_name है, लेकिन अपनी स्क्रिप्ट में आप के लिए username

$username=$_POST['username']; 

देखने

$username=$_POST['user_name']; 

संपादित किया जाना चाहिए:
आप का उपयोग करते हैं crypt डेटाबेस में डालने से पहले अपना पासवर्ड एन्क्रिप्ट करने के लिए, इसे

आज़माएं
$sql="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if($count==1){ 
    $row = mysql_fetch_assoc($result); 
    if (crypt($password, $row['password']) == $row['password']){ 
     session_register("username"); 
     session_register("password"); 
     echo "Login Successful"; 
     return true; 
    } 
    else { 
     echo "Wrong Username or Password"; 
     return false; 
    } 
} 
else{ 
    echo "Wrong Username or Password"; 
    return false; 
} 

संपादित करें: MyBB उनके पासवर्ड के लिए hashing md5 की एक crapload उपयोग करने के लिए लगता है, है, तो आप नहीं वापस पासवर्ड पहले से ही DB में प्राप्त कर सकते हैं इस

$sql="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if($count==1){ 
    $row = mysql_fetch_assoc($result); 
    if (md5(md5($row['salt']).md5($password)) == $row['password']){ 
     session_register("username"); 
     session_register("password"); 
     echo "Login Successful"; 
     return true; 
    } 
    else { 
     echo "Wrong Username or Password"; 
     return false; 
    } 
} 
else{ 
    echo "Wrong Username or Password"; 
    return false; 
} 

इसके अलावा hashing है एक तरह से कोशिश आपको बस उपयोगकर्ताओं को अपने पासवर्ड बदलने/अपडेट करने होंगे।
यदि उपर्युक्त काम करता है तो आपको एन्क्रिप्शन बंद नहीं करना पड़ेगा, और सबकुछ ठीक होना चाहिए।

+0

मैं अपनी मुख्य पोस्ट अपीलों को बदलता हूं यह देखने में मदद करता है कि मेरी मदद करने में कुछ मददगार हो सकता है: डी –

+0

मैं प्रारूप को डिक्रिप्ट करने के लिए अपना पासवर्ड बदलता हूं और दायर डेटाबेस पासवर्ड में सरल पासवर्ड डालता हूं और मैं sucsseceful लॉगिन कर सकता हूं लेकिन मेरे सभी फोरम उपयोगकर्ताओं को बदलना असंभव है सुरक्षा चेहरे में सच नहीं है। –

+0

मेरे संपादन देख @PdsIr – Musa

2

mysql डेटाबेस में अधिकांश बार पासवर्ड एन्क्रिप्ट किए जाते हैं। यदि आप उन्हें सीधे डेटाबेस में दर्ज करते हैं, तो उनके पास नमक नहीं हो सकता है। पासवर्ड एन्क्रिप्ट करने का प्रयास करें इससे पहले कि आप क्वेरी में पारित:

$crypted_pass = crypt($password); 

अगर कोई नमक (अक्सर पहले दो उपयोगकर्ता नाम के पत्र) है, कि तहखाने समारोह के साथ में पारित:

$salt = substr($username, 0, 2); 
$crypted_pass = crypt($password, $salt); 
+0

यह डेटाबेस सही ढंग से जांच नहीं करता है हमेशा गलत उपयोगकर्ता नाम या पासवर्ड कहता है। –

+0

क्या यह डेटाबेस कनेक्शन है जो गलत उपयोगकर्ता/पास दे रहा है, या जब यह फॉर्म की जांच कर रहा है? त्रुटि संदेश कहां और कहाँ है? – aynber

+0

मैं हमेशा सही ढंग से अपना पासवर्ड बदल प्रारूप को डिक्रिप्ट और डेटाबेस पासवर्ड दायर में सरल पासवर्ड डाल करने के लिए और मैं sucsseceful प्रवेश कर सकते हैं, लेकिन यह असंभव अपने सभी मंच उपयोगकर्ताओं और सुरक्षा चेहरे में अपने असली नहीं बदलने के लिए –

2

कोशिश कुछ सरल:

if ($count==1) { 
     echo "Success! $count"; 
    } else { 
     echo "Unsuccessful! $count"; 
    } 

इससे आपको 1 या अधिक मान से बड़ा कुछ भी लौट रहे हैं, तो देखेंगे।

+0

अपने डेटाबेस की जाँच नहीं कह गलत उपयोगकर्ता नाम या पासवर्ड। –

+0

मैंने $ username = $ _ POST ['user_name'] बदल दिया; लेकिन एक ही समस्या है! –

+0

@PdsIr यह संभव है कि वहाँ एक ही उपयोगकर्ता नाम और पासवर्ड – Musa