sql >> Database >  >> RDS >> Mysql

Php-sessie en postproblemen op de inlogpagina

Bewerken: Oké, je hebt dus een typfout gemaakt in de formuliervelden. Je mixt nog steeds MySQL API's, zie verderop over de mixfunctie met mysql_real_escape_string() .

Kijk naar name="myusername" en uw POST-toewijzing, samen met die voor uw wachtwoord.

Ze komen niet overeen.

Wijzig name="myusername" naar name="username"

en name="mypassword" naar name="password"

volgens

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

Na gebruik te hebben gemaakt van foutrapportage , zou een niet-gedefinieerde index hebben gesignaleerd en een headers al verzonden waarschuwing; zie hieronder.

Je hebt ook spaties voor <?php die een uitvoer vóór de kop zou veroorzaken. Verwijder ze.

Bovendien mix je MySQL API's met mysql_error() . mysql_error() moet lezen als mysqli_error($con) en dit hieronder:

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

die moet lezen als

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

of

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ en mysql_ functies vermengen zich niet met elkaar.

Over beveiliging

Ik heb gemerkt dat u wachtwoorden in platte tekst opslaat. Als dit het geval is, wordt dit ten zeerste afgeraden.

Ik raad je aan om CRYPT_BLOWFISH te gebruiken of PHP 5.5's password_hash() functie. Gebruik voor PHP <5.5 het password_hash() compatibility pack .

Plus, met betrekking tot SQL-injectie, gebruik mysqli met voorbereide verklaringen , of BOB met voorbereide verklaringen , ze zijn veel veiliger .

Voetnoten

Het is het beste om exit; . toe te voegen na elke kop.

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

en voor alle koppen.

Bewerken:

Verwijderen

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

vervang het dan door:

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

Bewerk #2 :

Dit is waarmee ik je code heb getest en succes heb gehad, daarom weet ik niet wat er mis is met je huidige code.

HTML-FORMULIER

<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>

MijnSQL

<?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: Je moet ook je sessies wissen (sessies vernietigen ), kan er iets op de server zijn dat oude gebruikersnamen en wachtwoorden in de cache opslaat.

Zorg er ook voor dat er geen spaties in uw kolommen zijn, dat de typen correct zijn en dat de lengtes lang genoeg zijn om de gegevens te bevatten. Gewoonlijk VARCHAR(255) is meer dan genoeg, maar wordt aanbevolen bij het gebruik van gehashte wachtwoorden die zijn gegenereerd door password_hash() , een functie die u zou moeten gebruiken bij het opslaan van wachtwoorden.

Zie ook:

op stapel.



  1. Hoe een gekoppelde server MySQL te maken

  2. Ongedefinieerde variabele fout in mijn PHP-script

  3. MySQL:zoek naar dezelfde string in meerdere kolommen

  4. Echt worstelen met CONCAT_WS ... help een newbie :)