sql >> Database teknologi >  >> RDS >> Mysql

Php-session og postproblemer på login-siden

Rediger: Ok, så du har lavet en tastefejl i formularfelterne. Du blander stadig MySQL API'er, se længere nede nedenfor om blandingsfunktionen ved hjælp af mysql_real_escape_string() .

Se på name="myusername" og din POST-opgave, sammen med den til din adgangskode.

De matcher ikke.

Skift name="myusername" til name="username"

og name="mypassword" til name="password"

som pr.

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

Efter at have brugt fejlrapportering , ville have signaleret et udefineret indeks og en advarsel om allerede sendt overskrifter; se nedenfor.

Du har også mellemrum før <?php hvilket ville forårsage et output før header. Fjern dem.

Derudover blander du MySQL API'er med mysql_error() . mysql_error() skal læses som mysqli_error($con) og dette nedenfor:

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

som skal læses 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_ og mysql_ funktioner blandes ikke sammen.

Med hensyn til sikkerhed

Jeg har bemærket, at du muligvis gemmer adgangskoder i almindelig tekst. Hvis dette er tilfældet, frarådes det stærkt.

Jeg anbefaler, at du bruger CRYPT_BLOWFISH eller PHP 5.5's password_hash() fungere. Til PHP <5.5 skal du bruge password_hash() compatibility pack .

Plus, med hensyn til SQL-injektion, brug mysqli med udarbejdede udtalelser , eller BOB med forberedte erklæringer , de er meget sikrere .

Fodnoter

Det er bedst at tilføje exit; efter hver overskrift.

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

og for alle overskrifter.

Rediger:

Fjern

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

erstat den derefter 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']);

Rediger #2 :

Dette er hvad jeg testede din kode med og fik succes, derfor ved jeg ikke hvad der er galt med din nuværende kode.

HTML-FORMULAR

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

NB: Du bør også rydde ud af dine sessioner (ødelæg sessioner ), kan der være noget på serveren, der cacher gamle brugernavne og adgangskoder.

Sørg også for, at der ikke er mellemrum i dine kolonner, at typerne er korrekte, og at længderne er lange nok til at holde dataene. Normalt VARCHAR(255) er mere end nok, men foreslås ved brug af hash-kodeord genereret af password_hash() , en funktion, som du bør bruge, når du gemmer adgangskoder.

Se også:

på stakken.



  1. Kan ikke oprette forbindelse til Vagrant ved hjælp af HeidiSQL:Kan ikke oprette forbindelse til MySQL-server på 'localhost'

  2. Hvordan SUBSTRING() virker i MariaDB

  3. mysql_insert_id problem ved samtidig indsættelse af data

  4. Forespørgsel, der ignorerer mellemrummene