通过用户的密码检查用户。PHP-MySQL

通过用户的密码检查用户。PHP-MySQL,php,html,mysql,Php,Html,Mysql,我试图编写一个简单的注册和登录代码,但在登录文件中遇到了一个问题 login.php- <?php session_start(); include"header.php"; include"config.php"; connect(); if(isset($_POST['login'])){ if(isset($_SESSION['uid'])){ echo"you are already logged in"; }else{ $username =

我试图编写一个简单的注册和登录代码,但在登录文件中遇到了一个问题

login.php-

<?php
session_start();
include"header.php";
include"config.php";
connect();

if(isset($_POST['login'])){
    if(isset($_SESSION['uid'])){
    echo"you are already logged in";
    }else{

    $username = protect($_POST['username']);
    $password = protect($_POST['password']);


    $login_check = mysql_query("SELECT `id` FROM `users` WHERE `username` = '$username' AND     `password` = '".md5($password)."' ") or die (mysql_error());
    echo $login_check;
    if(mysql_num_rows($login_check) == 0){
        echo"invalid login password";
    }else{
    $get_id = mysql_fetch_assoc($login_check);
    $_SESSION['uid']=$get_id['id'];
    header("Location: main.php");   
    }

    }

    }else{
    echo"u need to log in";
    }


/* */

include"footer.php";
?>
来自header.php的表单:

<form action="login.php" method="POST">
Username:<input type="text" name="username"/><br />
Password:<input type="password" name="password"/><br />
<input type="submit" name="login" value="login"/>
</form>
更新: 所以我遵循了Marc B的答案,我想我的register.php文件一定有问题。 首先,我注意到,无论我在密码输入中写入什么,表中每个ID的哈希值都是相同的。 所以我甚至切断了protect和md5部分,我看到无论我写什么作为密码,表中的密码都会有一个空白点。用户名和电子邮件都可以放入表格中。 register.php-

<?php
session_start();
include"header.php";

?>

<?php
include("config.php");
connect();
?>
Rejestracja:
<br />
<?php

if (isset($_POST['register'])){
    $username = protect($_POST['username']);
    $password = protect($_POST['password']);
    $email = protect($_POST['email']);

    if($username=="" || $password="" || $email == ""){
        echo"Wypelnij wszystkie pola";
    }elseif(strlen($username) > 20){
        echo"Nazwa musi miec max 20 znaków !";

    }elseif(strlen($email) > 50){
        echo"Email musi miec max 50 znakow!";
    }else{
        $register1 = mysql_query("SELECT `id` FROM `users` WHERE `username`='$username'") or die(mysql_error());
        $register2 = mysql_query("SELECT `id` FROM `users` WHERE `email`='$email'") or die(mysql_error());
        if(mysql_num_rows($register1) > 0){
            echo"Jest juz taki uzytkownik!";
        }elseif (mysql_num_rows($register2) > 0){
            echo"email jest juz zajety";
        }else{
            $insertstats = mysql_query("INSERT INTO `stats` (`gold`,`attack`,`defense`,`food`) VALUES (100,5,5,100)") or die(mysql_error()) ;
            $insertunits = mysql_query("INSERT INTO `units` (`worker`,`farmer`,`warrior`,`defender`) VALUES (5,5,5,10)") or die(mysql_error()) ;
            $insertweapons = mysql_query("INSERT INTO `weapons` (`sword`,`shield`) VALUES (5,5)") or die(mysql_error()) ;
            $insertusers = mysql_query("INSERT INTO `users` (`username`,`password`,`email`) VALUES ('$username','".md5($password)."','$email')") or die(mysql_error()) ;

            echo"Zarejestrowales sie";
        }
    }


}

?>
<br />
<form action="register.php" method="POST">
Nazwa uzytkownika:<input type="text" name="username"/><br />
Haslo:<input type="password" name="password"/><br />
E-mail:<input type="text" name="email"/><br />
<input type="submit" name="register" value="Register" /><br />


</form>
<?php
include"footer.php";

?>

好吧,我发现了我的错误。。。如果$username==| |$password=| |$email==我真傻。感谢所有关于改进代码的建议。很抱歉给您带来麻烦。

您没有正确比较密码。您正在对它们进行sql转义,然后执行md5哈希,这意味着添加到密码的任何转义都将成为哈希的一部分

e、 g


请注意这两个哈希是如何更改的。如果您手动md5输入原始密码,那么您将永远无法获得匹配项,因为您的转义操作正在更改原始字符串,在它被散列之前,这意味着哈希值将始终不同于原始的未转义字符串。

打开后立即在文件顶部添加错误报告。我建议您不要使用MD5存储密码。它很旧,被认为已经坏了。使用或PHP5.5的函数。对于PHP<5.5,请使用。危险:您正在使用并且应该使用。您还容易受到现代API的攻击,这会使您更容易从中受益。请进一步阅读Fred关于的评论。检查包含您密码的Column是否在开始时没有空格,因为您的代码似乎正常!!
<?php
session_start();
include"header.php";

?>

<?php
include("config.php");
connect();
?>
Rejestracja:
<br />
<?php

if (isset($_POST['register'])){
    $username = protect($_POST['username']);
    $password = protect($_POST['password']);
    $email = protect($_POST['email']);

    if($username=="" || $password="" || $email == ""){
        echo"Wypelnij wszystkie pola";
    }elseif(strlen($username) > 20){
        echo"Nazwa musi miec max 20 znaków !";

    }elseif(strlen($email) > 50){
        echo"Email musi miec max 50 znakow!";
    }else{
        $register1 = mysql_query("SELECT `id` FROM `users` WHERE `username`='$username'") or die(mysql_error());
        $register2 = mysql_query("SELECT `id` FROM `users` WHERE `email`='$email'") or die(mysql_error());
        if(mysql_num_rows($register1) > 0){
            echo"Jest juz taki uzytkownik!";
        }elseif (mysql_num_rows($register2) > 0){
            echo"email jest juz zajety";
        }else{
            $insertstats = mysql_query("INSERT INTO `stats` (`gold`,`attack`,`defense`,`food`) VALUES (100,5,5,100)") or die(mysql_error()) ;
            $insertunits = mysql_query("INSERT INTO `units` (`worker`,`farmer`,`warrior`,`defender`) VALUES (5,5,5,10)") or die(mysql_error()) ;
            $insertweapons = mysql_query("INSERT INTO `weapons` (`sword`,`shield`) VALUES (5,5)") or die(mysql_error()) ;
            $insertusers = mysql_query("INSERT INTO `users` (`username`,`password`,`email`) VALUES ('$username','".md5($password)."','$email')") or die(mysql_error()) ;

            echo"Zarejestrowales sie";
        }
    }


}

?>
<br />
<form action="register.php" method="POST">
Nazwa uzytkownika:<input type="text" name="username"/><br />
Haslo:<input type="password" name="password"/><br />
E-mail:<input type="text" name="email"/><br />
<input type="submit" name="register" value="Register" /><br />


</form>
<?php
include"footer.php";

?>
$foo = 'password with " quote';
$hashed_foo = md5($foo);         // e938052104fd22cbdf0c822065557f09
$escaped_foo = addslashes($foo);
$hashed_escaped_foo = md5($foo); // b144a3e7ad3ea3fd4ae6ade0aa49a9b9