这个php登录代码有什么问题?

时间:2013-11-22 07:04:01

标签: php login

我为我的网站设置了一个php登录。我有一个单独的PHP文件中的PHP代码,我正在调用该php文件的表单操作。来自html的所有名称都与php中的名称相匹配。当我单击“登录”而不管它是否有任何输入时,它会将我重定向到一个地址为“mywebsite.com/login.php?username=&password=”的空白页面。当它应该回应用户名或密码无效时。

><?php 

session_start();
//Creates connection
$con = mysqli_connect("my info and stuff") or die("Error " . mysqli_error($con));
$db = mysqli_select_db($con,"users");

 if(isset($_POST["Login"])){
    $username = mysqli_real_escape_string($connect, $_POST["username"]);
    $password = mysqli_real_escape_string($connect, CRYPT_MD5($_POST["password"]));
    $query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");   
    $result = mysqli_query($query);
    $row = mysqli_num_rows($result);
    if($row == 1){
        session_register("username");
        session_register("password"); 
        header("location: profile.php");
    }
    else {
        echo ("Wrong Username or Password");
    }
}

?>

如果有更有效的方法来做到这一点,我们将不胜感激。对于php来说还是一个新手。

4 个答案:

答案 0 :(得分:4)

如果您未将form method属性值设置为POST,则会导致这种情况,因此将其设置为post,不使用method属性将将其设置为GET代码,当您使用if(isset($_POST['Login']) {}而不是Login issetif条件中的代码时,您的代码块将被忽略将被跳过。

此外,您的代码中存在许多问题,您要调用两次不需要的查询,而不是清理您的输入,使用mysqli_real_escape_string()是不够的考虑更多地了解基础知识而不是获取从你的项目开始。

此外,您告诉自己不熟悉PHP,因此请考虑使用PDO代替mysqli_(),而不必担心太多关于清理用户输入...

这是一个很好的PDO tutorialhere开始使用......当然,第一次尝试时会有一些东西反弹,但是不要离开它。

答案 1 :(得分:1)

这是问题之一,你试图执行两次sql,

$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");   
$result = mysqli_query($query);

您已执行查询,请在此处直接使用$ query变量

$row = mysqli_num_rows($query);

答案 2 :(得分:0)

更改

$query = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");   
$result = mysqli_query($query);
$row = mysqli_num_rows($result);

$result = mysqli_query("SELECT id, username FROM users WHERE username = '$username' AND password = '$password' ");   
$row = mysqli_num_rows($result);

mysqli_query用于执行查询

答案 3 :(得分:0)

这是简单的登录示例

<?php 
        //for login.php page
        session_start();

        if(isset($_POST['login']))
        {
        $username=$_REQUEST['username'];
        $password=$_REQUEST['password'];
        $password=md5($password);

    //1st query whish will fetch record and then count tham
        $query="select * from users where username='$username' and password='$password'";
        $rs= mysqli_query($query);
        @$n=mysqli_num_rows($rs);
                   or
    //2nd query which will fetch only quantity it is very usefull
        $query="select count(*) from users where username='$username' and password='$password'";
        $n=mysqli_query($query);


        if($n==1)
        {
        $_SESSION['username']=$username;
        $_SESSION['password']=$password;
        header("location: profile.php");
        }
        else 
        {
        echo ("Wrong Username or Password");
        }
        }
        ?>


        <?php 
        //for profile.php page
        session_start();
        $username=$_SESSION['username'];
        $password=$_SESSION['password'];
        echo $username."<br />".$password;
        ?>