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

Php सत्र और लॉगिन पृष्ठ में समस्याएं पोस्ट करें

संपादित करें: ठीक है, तो आपने फॉर्म फ़ील्ड में एक टाइपो बना दिया है। आप अभी भी 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() द्वारा उत्पन्न हैशेड पासवर्ड का उपयोग करते समय सुझाव दिया जाता है , एक फ़ंक्शन जिसका उपयोग आपको पासवर्ड संग्रहीत करते समय करना चाहिए।

यह भी देखें:

स्टैक पर।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं दो MySQL तालिकाओं को कैसे सिंक्रनाइज़ कर सकता हूं जिनमें समान संरचनाएं और अलग सर्वर हैं?

  2. जॉइन क्वेरी का उपयोग करके रिकॉर्ड पुनर्प्राप्त करें

  3. पर्ल डीबीआई mysql देशी एकाधिक डालने की क्षमता का उपयोग करके एकाधिक पंक्तियां डालें

  4. SQL क्वेरी सशर्त रूप से एक कुंजी मान सूची के आधार पर रिकॉर्ड पुनर्प्राप्त करने के लिए

  5. CreateView में self.object डेटाबेस में सहेजने के बाद एक आईडी क्यों नहीं है?