mysql_fetch Doç şifre satır dönmek için reddediyor.

2 Cevap

Kullanıcı adınızı satır dışarı mükemmel geliyor ama şifre satır yoluyla gelmek için reddediyor.

Ben burada bir kayıp am.

Herkes çözüm ne olduğunu biliyor mu?

İşte benim kod ::

<?php

//Mass include file
include ("includes/mass.php");

//This is the login script
//Grabbing the login values and storing them

$username = $_POST['username'];
$password = $_POST['password'];
$submit   = $_POST['submit'];

if (isset($submit))
{
    if (strlen($username)<2) // put || ($username==(same as value on the database)
    {
        echo ("<br>You must enter a longer username</br>");
    }
    elseif (strlen($password)<=6)
    {
        echo ("<br>You must enter a longer password<br>");
    }
    else
    {
        $sql = "SELECT * FROM user WHERE username = '$username'";
        $query = mysql_query($sql);
        $numrows = mysql_num_rows($query);

        if ($numrows != 0)
        {
            while ($row = mysql_fetch_assoc($query))
                $dbusername = $row['username'];
            $dbpassword = $row['password'];         

            if ($dbusername == $username && $dbpassword == $password)
            {
                echo "your in!";
            }
            else
            {
                echo "Wrong info";
            }
        }
        else
        {
            die ("That username doesnt exist");
        }
    }
}

?>

2 Cevap

Siz bir süre sonra eksik parantez var.

Her ikisi de

$dbusername = $row['username'];
$dbpassword = $row['password'];      

Durum böyle değil ise döngü içinde olmalıdır.

Sen böyle bir şey yapmanız gerekir:

while ($row = mysql_fetch_assoc($query)) {

    $dbusername = $row['username'];
    $dbpassword = $row['password'];           

    if ($dbusername == $username && $dbpassword == $password) {
        echo "your in!";
    }
....

Dedi Matthew ne ekleme:

Sen kullanıcıya "adı yok" gibi mesajları göstermek gerekir. Bu kullanıcının yanlış bir kullanıcı adı ve / veya yanlış parola sağlar durumda içeri kırmak isteyen bir hacker için değerli bilgiler sağlar, siz "geçersiz kullanıcı adı veya şifre" göstermesi gerekir.

Kullanıcı adınızı benzersiz değilse komut başarısız olur. Belki de böyle midir?

Bunun dışında, düz metin ve kullanıcı girişi değil temizlik olarak şifreleri saklamak: çok kötü fikirler ...

Edit: arada, neden sorguda kendisini geçerli bir kullanıcı adı / şifre kombinasyonu kontrol etmiyoruz:

... WHERE username='" . mysql_real_escape_string($username) . "'
    AND password='" . some_hashing_function($password) .  "'";

Another edit: Sen ne oluyor dikkatlice bakmak gerekiyor; benim ilk cevap (non-benzersiz kullanıcı kimliği) bir sorun olabilir, ancak @ codaddict cevabı zaten sorunu çözmek olabilir.

Temelde, ne deyim kaşlı olmadan gibi bu gibi:

while ($row = mysql_fetch_assoc($query))
    $dbusername = $row['username'];
    $dbpassword = $row['password'];         
    ....

aynı olarak php için:

while ($row = mysql_fetch_assoc($query))
{
    $dbusername = $row['username'];
}
$dbpassword = $row['password'];
...

böylece $ dbpassword doldurmak istediğiniz zaman, $ satır zaten boş.