PHP MYSQL从表中验证用户并设置SESSION';username';


PHP MYSQL verify user from table and set SESSION 'username'

我有一个论坛页面,希望使用预定义的mysql用户表中的用户名为用户进行简单登录。我使用论坛中的login.php表单文件链接,获取$_POST用户名,然后使用调用函数的login_handle.php文件连接到数据库,查询用户数组,并尝试验证$_POST用户名是否在查询的列表数组中。

下面是函数,然后是login_handle.php中的调用,我收到了各种错误,不知道这是否是一个好方法。我还想在表单和验证期间启动一个会话,该会话可以将$_POST用户名作为$_SESSION用户名,并应用于后续论坛页面。

    function isUsername($username){ //Test if proper Username from array.   
            $query = "SELECT username FROM users";
            $result = mysql_query($query);  
            $usernames = mysql_fetch_assoc($result);
            $isUname = true;
            if(!in_array("username", $usernames)) {
                echo "Please enter valid user name.<br>";
                    $isUname = false;
                    } //Search for proper username in username array.
                    return $isUname;
            }
------------------handler call-----------
            $username = $_POST["username"];
            $password = $_POST["password"];
                if(isUsername($username)==true){ // Check if username is valid.
                //$Uname = $_SESSION['username'];
                //echo "Username = " . $Uname;  
                echo '<a href="../fourm.php">go to forum</a>';
                }

首先,不赞成使用mysql。请使用mysqli。

第二,你为什么不用。。。

function isUsername($username){   
        $query = "SELECT username FROM users WHERE username == '" . $username . "'";

第三:你搜索和研究过吗?这种问题随处可见。

尽管很简单,但您需要从$_POST中查询特定的用户名,而不是整个用户表。我认为请求行数(如果用户是否在数据库中,幻影数是一个很好的方法,您可以使其更大(>=),而不是一个用户条件(==))。

function isUsername($username){ //Test if proper Username from array.   
        $query = "SELECT username FROM users where username='$username'";
        $result = mysql_query($query);  
        $rows = mysql_num_rows($result);
        $isUname = true;
        if($rows==1) {
               $isUname = true;
         }else{
            echo "Please enter valid user name.<br>";
                $isUname = false;
         }
                return $isUname;

}

当我手动将txt数组分配给变量$username进行比较时,我使用了几乎相同的函数。现在我使用的是一个用户表,我只想将查询到的用户的数组(认为mysql_fetch_assoc($result)创建了相同类型的assoc数组)分配给$username,而不是以前使用的硬拷贝元素。使用查询生成的数组是否不同于$usernames=数组("jes34"、"pes22"、"jis44"answers"jll124");阻止我这么做?

    function isUsername($username){ //Test if proper Username from array.
        $usernames=array("jes34","pes22","jis44","jll124");
        $isUname = true;            
        if(!in_array($_POST["username"], $usernames)) {
            echo "Please enter valid user name.<br>";
                $isUname = false;
                } //Search for proper username in username array.
                return $isUname;
        }

-----函数调用---if(isUsername($username)==true){dosomething}