Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP-Sitzungs- und Post-Probleme auf der Anmeldeseite

Bearbeiten: Ok, Sie haben sich also in den Formularfeldern vertippt. Sie mischen immer noch MySQL-APIs, siehe weiter unten über die Mischfunktion mit mysql_real_escape_string() .

Schauen Sie sich name="myusername" an und Ihre POST-Zuweisung, zusammen mit der für Ihr Passwort.

Sie stimmen nicht überein.

Ändern Sie name="myusername" zu name="username"

und name="mypassword" zu name="password"

gemäß

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

Nachdem Sie Fehlerberichterstattung verwendet haben , hätte einen undefinierten Index und eine bereits gesendete Header-Warnung signalisiert; siehe unten.

Sie haben auch Leerzeichen vor <?php was zu einer Ausgabe vor dem Header führen würde. Entfernen Sie sie.

Außerdem mischen Sie MySQL-APIs mit mysql_error() . mysql_error() sollte als mysqli_error($con) lauten und das unten:

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

was wie folgt lauten sollte:

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

oder

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ und mysql_ Funktionen vermischen sich nicht miteinander.

Zur Sicherheit

Mir ist aufgefallen, dass Sie Passwörter möglicherweise im Klartext speichern. Wenn dies der Fall ist, wird dringend davon abgeraten.

Ich empfehle Ihnen, CRYPT_BLOWFISH zu verwenden oder password_hash() von PHP 5.5 Funktion. Verwenden Sie für PHP <5.5 das password_hash() compatibility pack .

Außerdem sollten Sie in Bezug auf die SQL-Einschleusung verwenden mysqli mit vorbereiteten Statements , oder PDO mit vorbereiteten Anweisungen , sie sind viel sicherer .

Fußnoten

Fügen Sie am besten exit; hinzu nach jedem Header.

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

und für alle Header.

Bearbeiten:

Entfernen

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

dann ersetzen Sie es durch:

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

Änderung Nr. 2 :

Damit habe ich Ihren Code getestet und hatte Erfolg, daher weiß ich nicht, was an Ihrem aktuellen Code falsch ist.

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

Hinweis: Sie sollten auch Ihre Sitzungen löschen (Sitzungen zerstören ), könnte etwas auf dem Server alte Benutzernamen und Passwörter zwischenspeichern.

Stellen Sie außerdem sicher, dass Ihre Spalten keine Leerzeichen enthalten, dass die Typen korrekt sind und die Länge lang genug ist, um die Daten aufzunehmen. Normalerweise VARCHAR(255) ist mehr als genug, wird aber empfohlen, wenn gehashte Passwörter verwendet werden, die von password_hash() generiert werden , eine Funktion, die Sie beim Speichern von Passwörtern verwenden sollten.

Siehe auch:

auf Stapel.