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

时间:2014-11-05 22:41:24

标签: php mysql function session

我有一个论坛页面,希望用户使用预定义的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>';
                }

2 个答案:

答案 0 :(得分:0)

首先,不推荐使用mysql。请使用mysqli。

其次,为什么不使用像...这样的东西。

function isUsername($username){   
        $query = "SELECT username FROM users WHERE username == '" . $username . "'";
第三:你搜索和研究了吗? 这些问题随处可见。

答案 1 :(得分:0)

虽然很简单,但您需要从$ _POST查询特定的用户名,而不是整个usertable。 我认为请求行数(如果用户在数据库中,幻影数量是一个很好的方法,你可以使它更大(&gt; =)而不是一个用户条件(==))。

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 = array(“jes34”,“pes22”,“jis44”,“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){do something}