sql >> Databasteknik >  >> RDS >> Mysql

Php-session och problem med inlägg på inloggningssidan

Redigera: Ok, så du har gjort ett stavfel i formulärfälten. Du blandar fortfarande MySQL API:er, se längre ner nedan om mixningsfunktionen med mysql_real_escape_string() .

Titta på name="myusername" och din POST-uppgift, tillsammans med den för ditt lösenord.

De matchar inte.

Ändra name="myusername" till name="username"

och name="mypassword" till name="password"

enligt

$myusername=$_POST["username"];
$mypassword=$_POST["password"];

Efter att ha använt felrapportering , skulle ha signalerat ett odefinierat index och en rubrik som redan skickats varning; se nedan.

Du har även mellanslag före <?php vilket skulle orsaka en utdata före header. Ta bort dem.

Dessutom blandar du MySQL API:er med mysql_error() . mysql_error() bör läsas som mysqli_error($con) och detta nedan:

$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

som ska läsas som

$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);

eller

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ och mysql_ funktioner blandas inte ihop.

Angående säkerhet

Jag märkte att du kanske lagrar lösenord i vanlig text. Om så är fallet är det starkt avskräckt.

Jag rekommenderar att du använder CRYPT_BLOWFISH eller PHP 5.5:s password_hash() fungera. För PHP <5.5 använd password_hash() compatibility pack .

Plus, när det gäller SQL-injektion, använd mysqli med förberedda utlåtanden , eller PDO med förberedda uttalanden , de är mycket säkrare .

Fotnoter

Det är bäst att lägga till exit; efter varje rubrik.

header("location:login_success.php");
exit;

och för alla rubriker.

Redigera:

Ta bort

$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";  
echo $mypassword . "<br>";

ersätt den sedan med:

$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);

Redigera #2 :

Det här är vad jag testade din kod med och fick framgång, därför vet jag inte vad som är fel med din nuvarande kod.

HTML-FORMEL

<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";
    }

Obs: Du bör också rensa bort dina sessioner (förstöra sessioner ), kan det finnas något på servern som cachar gamla användarnamn och lösenord.

Se också till att det inte finns några mellanslag i dina kolumner, att typerna är korrekta och att längderna är tillräckligt långa för att hålla data. Vanligtvis VARCHAR(255) är mer än tillräckligt, men föreslås när man använder hashade lösenord genererade av password_hash() , en funktion som du bör använda när du lagrar lösenord.

Se även:

på Stack.



  1. MySQL - Hur man väljer rader med maxvärde för ett fält

  2. Hur ansluter man mysql till Basex?

  3. Returnera rader som innehåller alfanumeriska tecken i SQLite

  4. Databasstruktur för att hålla statistik per dag, vecka, månad, år