संपादित करें: ठीक है, तो आपने फॉर्म फ़ील्ड में एक टाइपो बना दिया है। आप अभी भी MySQL API को मिक्स कर रहे हैं, mysql_real_escape_string()
का उपयोग करके मिक्सिंग फंक्शन के बारे में और नीचे देखें। ।
<स्ट्राइक>देखें name="myusername"
और आपका POST असाइनमेंट, आपके पासवर्ड के लिए एक के साथ। स्ट्राइक>
वे मेल नहीं खाते।
बदलें name="myusername"
करने के लिए name="username"
और name="mypassword"
करने के लिए name="password"
के अनुसार
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
त्रुटि रिपोर्टिंग का उपयोग करने के बाद , एक अपरिभाषित अनुक्रमणिका का संकेत देता और एक शीर्षलेख पहले ही चेतावनी भेज देता; नीचे देखें।
आपके पास <?php
. से पहले भी स्पेस हैं जो शीर्षलेख से पहले आउटपुट का कारण बनता है। उन्हें हटा दें।
साथ ही, आप MySQL API को mysql_error()
. के साथ मिला रहे हैं . mysql_error()
mysqli_error($con)
. के रूप में पढ़ना चाहिए और यह नीचे:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
जिसे
. के रूप में पढ़ना चाहिए$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
या
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
औरmysql_
फ़ंक्शन एक साथ नहीं मिलते हैं।
सुरक्षा के संबंध में
मैंने देखा है कि आप सादे पाठ में पासवर्ड संग्रहीत कर रहे होंगे। अगर ऐसा है, तो यह बेहद हतोत्साहित करने वाला है।
मेरा सुझाव है कि आप CRYPT_BLOWFISH का उपयोग करें
या PHP 5.5 का password_hash()
समारोह। PHP <5.5 के लिए password_hash() compatibility pack
का उपयोग करें
.
साथ ही, SQL इंजेक्शन के संबंध में, उपयोग करें mysqli
तैयार बयानों के साथ
, या तैयार बयानों के साथ PDO
, वे अधिक सुरक्षित हैं ।
फ़ुटनोट
exit;
जोड़ना सबसे अच्छा है प्रत्येक शीर्षलेख के बाद।
header("location:login_success.php");
exit;
और सभी शीर्षकों के लिए।
संपादित करें:
हटाएं
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
फिर इसे इसके साथ बदलें:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
#2 संपादित करें :
इसी के साथ मैंने आपके कोड का परीक्षण किया, और सफलता मिली, इसलिए मुझे नहीं पता कि आपके वर्तमान कोड में क्या गलत है।
एचटीएमएल फॉर्म
<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="text" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>
MySQL
<?php
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($conn,$_POST['username']);
$mypassword = mysqli_real_escape_string($conn,$_POST['password']);
echo $myusername; // echos
echo "<br>";
echo $mypassword; // echos
$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($conn,$sql);
$count=mysqli_num_rows($result);
if($count==1){
echo "Yep";
}
else{
echo "nope";
}
नायब: आपको अपने सत्र भी समाप्त करने चाहिए (सत्र नष्ट करें ), सर्वर पर कुछ पुराने उपयोगकर्ता नाम और पासवर्ड कैशिंग हो सकता है।
यह भी सुनिश्चित करें कि आपके कॉलम में कोई रिक्त स्थान नहीं है, कि प्रकार सही हैं और लंबाई डेटा को रखने के लिए पर्याप्त लंबी है। आमतौर पर VARCHAR(255)
पर्याप्त से अधिक है, लेकिन password_hash()
द्वारा उत्पन्न हैशेड पासवर्ड का उपयोग करते समय सुझाव दिया जाता है , एक फ़ंक्शन जिसका उपयोग आपको पासवर्ड संग्रहीत करते समय करना चाहिए।
यह भी देखें:
स्टैक पर।