sql >> Databáze >  >> RDS >> Mysql

Php Session a post problémy na přihlašovací stránce

Upravit: Dobře, udělali jste překlep v polích formuláře. Stále mícháte rozhraní MySQL API, viz dále níže o funkci míchání pomocí mysql_real_escape_string() .

Podívejte se na name="myusername" a váš úkol POST spolu s heslem.

Neshodují se.

Změňte name="myusername" na name="username"

a name="mypassword" na name="password"

podle

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

Po použití hlášení chyb , by signalizoval nedefinovaný index a záhlaví již odeslané varování; viz níže.

Před <?php máte také mezery což by způsobilo výstup před hlavičkou. Odstraňte je.

Navíc mícháte MySQL API s mysql_error() . mysql_error() by se mělo číst jako mysqli_error($con) a toto níže:

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

který by měl znít jako

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

nebo

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ a mysql_ funkce se spolu nesměšují.

Ohledně bezpečnosti

Všiml jsem si, že možná ukládáte hesla v prostém textu. Pokud je tomu tak, důrazně se nedoporučuje.

Doporučuji použít CRYPT_BLOWFISH nebo PHP 5.5 password_hash() funkce. Pro PHP <5.5 použijte password_hash() compatibility pack .

Navíc, pokud jde o vkládání SQL, použijte mysqli s připravenými výpisy , nebo CHOP s připravenými výpisy , jsou mnohem bezpečnější .

Poznámky pod čarou

Nejlepší je přidat exit; za každou hlavičkou.

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

a pro všechna záhlaví.

Upravit:

Odebrat

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

pak jej nahraďte:

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

Upravit č. 2 :

To je to, s čím jsem testoval váš kód a bylo to úspěšné, takže nevím, co je s vaším současným kódem špatně.

HTML FORMULÁŘ

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

Pozn.: Měli byste také vymazat své relace (zničit relace ), na serveru může být něco, co ukládá stará uživatelská jména a hesla do mezipaměti.

Také se ujistěte, že ve sloupcích nejsou žádné mezery, že typy jsou správné a délky jsou dostatečně dlouhé, aby se do nich vešla data. Obvykle VARCHAR(255) je více než dostačující, ale doporučuje se při použití hašovaných hesel generovaných password_hash() , funkci, kterou byste měli používat při ukládání hesel.

Viz také:

na zásobníku.



  1. Existuje způsob, jak ignorovat sloupce, které na INSERT neexistují?

  2. MYSQL OR vs výkon IN

  3. Nepodařilo se sestavit konektor mysql/c (libmysql) ze zdroje v cygwin

  4. Pravidla zabezpečení dědičnosti byla porušena typem:'MySql.Data.Entity.MySqlEFConfiguration'