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

这个php登录代码有什么问题?,php,login,Php,Login,我正在为我的网站设置一个php登录。我有一个单独的php文件中的php代码,我正在为该php文件调用表单操作。html中的所有名称都与php中的名称匹配。当我单击“登录”时,无论是否有任何输入,它都会将我重定向到一个地址为“mywebsite.com/Login.php?username=&password=”的空页面。当它应该回显用户名或密码无效时 ><?php session_start(); //Creates connection $con = mysqli_connec

我正在为我的网站设置一个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");
    }
}

?>

这是一个问题,您尝试执行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);

这是由于您没有将
表单
方法
属性值设置为
发布
,因此设置为
发布
,使用no
方法
属性将其设置为
获取
,并且在使用
if(isset($\u POST['Login']){时,代码块将被忽略
因此,如果没有
登录
设置
,您的
if
条件中的代码将被跳过

还有,在代码中有很多问题,你调用你的查询两次,不是必需的,不是清理你的输入,使用<代码> MySqLIILRealEnguleScript()/代码>不足以考虑更多地了解基础知识,而不是开始你的项目。

你也告诉过你对PHP是新的,所以考虑使用<代码> PDO < /代码>而不是<代码> MySQL()/>代码>,而不必担心<>强>多/强>关于你的用户输入的消毒……/P> 这是一个很好的开始。第一次尝试时,事情肯定会在你的头上反弹,但不要离开它。

以下更改

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


mysqli\u查询
用于执行查询

这是一个简单的登录示例

<?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;
        ?>


在您的表单中,您提到了“get”方法,这就是为什么它将参数附加到url并发送,但在后端,您使用的是$\u POST[]。在$\u POST[]中没有任何内容。那么它不显示HTML代码了吗?请停止阅读已有十年历史的PHP教程。每当升级PHP时,您的代码都会崩溃。给出这个答案的人都不知道他们在说什么。这是正确的答案。然后它会显示sql错误。它不会显示任何错误。因此,它甚至不会出现在本部分中代码。(实际上这是一个错误,但在此之前还有一个错误)所以错误必须在那行之前看我的答案从这开始这是问题之一…这并不是唯一的错误。因为你的答案偏向于他的现状,我想我可能会补充一点。我没有投你反对票。我只是添加了一些内容来支持你
<?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;
        ?>