使用数据库的php登录脚本

使用数据库的php登录脚本,php,html,mysql,Php,Html,Mysql,你好,我在一个登录页面上工作,我有一个问题,当我输入用户名并登录页面时,会更改为错误的用户名或密码 它似乎没有登录到login_success.php,这导致人们认为问题在于sql语法,但我还没有找到原因的答案。我还认为它可能是if($count==1){并且尝试($count>1){但没有成功 我在网上搜索过,尝试过几种不同的方法,但都不管用。我是新手,将研究阻止sqlinjection的方法,但是这个网站不是实时的,只是为了练习:)这个社区对我的学习有很大的帮助。提前谢谢大家 HTML Lo

你好,我在一个登录页面上工作,我有一个问题,当我输入用户名并登录页面时,会更改为错误的用户名或密码

它似乎没有登录到login_success.php,这导致人们认为问题在于sql语法,但我还没有找到原因的答案。我还认为它可能是if($count==1){并且尝试($count>1){但没有成功

我在网上搜索过,尝试过几种不同的方法,但都不管用。我是新手,将研究阻止sqlinjection的方法,但是这个网站不是实时的,只是为了练习:)这个社区对我的学习有很大的帮助。提前谢谢大家

HTML LoginPage.HTML

<form id=login name="login" action="login.php" method="post">
   <fieldset id=fs>
      <legend>Vault Security Console:</legend>
      <!-- legeng tage creates a header title for the fieldset box, filedset pulls all data in the tag to gether with a box around it. -->
      UserName: <input type="text" name="username"> <br>
      Password: <input type="password" name="password"> <br>
      <input type="submit" value="Login"> <input type="submit" value="Register"> 
   </fieldset>
</form>

Vault安全控制台:
用户名:
密码:
php Login.php

<?php
   // Create connection
   $con=mysqli_connect('172.16.254.111',"user","password","Faults"); //(connection location , username to sql, password to sql, name of db)

   // Check connection
   if (mysqli_connect_errno($con))
   {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }
   //below is the variables from the login form
   $username = $_POST['username'];

   $password = md5(strip_tags($_POST['password']));

   $sql="SELECT * FROM Users WHERE username='.addslashes($username).' and password='.addslashes($password).'";
   $result=mysqli_query($sql);   

   //Mysql_num_row is counting table row
   $count=mysqli_num_rows($result);   

   if($count==1){   
   session_register("username");
     session_register("password"); 
   header('location:login_success.php');
   }
   //if false echo below
   else {
    echo "<H2>Wrong Username or Password</H2>";
   }   
?>

请按上述方式修改您的查询语句

请按上述方式修改您的查询语句。

试试这个

<?php
  //below is the variables from the login form
  $username = mysqli_real_escape_string($con, $_POST['username']);
  $password = md5($_POST['password']);

  $sql="SELECT * FROM Users WHERE username='$username' and password='$password'";
  $result=mysqli_query($sql);   
?>
试试这个

<?php
  //below is the variables from the login form
  $username = mysqli_real_escape_string($con, $_POST['username']);
  $password = md5($_POST['password']);

  $sql="SELECT * FROM Users WHERE username='$username' and password='$password'";
  $result=mysqli_query($sql);   
?>

我认为用户名或密码有问题。
您必须遵循以下步骤:-

  • 选择登录用户对应的密码
  • 将其与脚本生成的编码密码进行比较

  • 我认为用户名或密码有问题。
    您必须遵循以下步骤:-

  • 选择登录用户对应的密码
  • 将其与脚本生成的编码密码进行比较

  • 回显查询,然后检查输出内容并将其与数据库匹配请勿使用session_register()。它是为早期PHP4时代构建的,当时使用了register_globals。您现在不想使用它,因为它需要全局变量才能运行。检查我认为您的查询有问题。
    $sql=“从用户名=”.addslashes($username)的用户中选择*和密码=”.addslashes($password)。”;
    IMO这会将.addslashes()添加到您的查询中,而不是转义字符串,然后将其添加到查询中。尝试像这样编辑它:
    $sql=“从用户名=”.addslashes($username)的用户中选择*。“'和密码=”.addslashes($password)。”“;
    查询的连接已中断。另外,
    addslashes()
    是错误的选择。请改为尝试一个准备好的语句。jakolcz:这不起作用。只需返回else{echocho查询,然后检查输出内容并将其与数据库匹配。不要使用session_register()。它是为早期PHP4时代创建的,当时使用了register_globals。您现在不想使用它,因为它需要全局变量才能正常工作。检查一下,我认为您的查询有问题。
    $sql=“SELECT*FROM username=”.addslashes($username)。“password=”.addslashes($password)。;
    IMO这是添加了.addslashes()您可以查询,而不是转义字符串,然后将其添加到查询中。请尝试按如下方式编辑它:
    $sql=“SELECT*FROM username=”。addslashes($username)。“'和password=”。addslashes($password)。
    查询的连接已中断。另外
    addslashes()
    是错误的选择。请尝试一个预先准备好的语句。jakolcz:这不起作用。只需在每个结果中返回else{echotry一个echo,如下所示:if($count==1){echo'a';}else{echo'b';}这样您就可以看到if发生了什么。第二,您在数据库中加密了密码了吗?试试这些,告诉我,尝试这样做:$sql=”选择*FROM username='$username';确定,然后尝试回显用户名,然后从浏览器复制并粘贴到数据库中。然后重试。然后,sql语法出现问题。确保数据库中的字段用户名与此完全相同(而非用户名或用户名等)。然后尝试以下操作:$sql=”从username='$username''的用户中选择username;然后尝试echo$count;我很高兴我帮了你!:)会话既酷又简单!提示:不要忘记页面顶部的session_start()!也要阅读此内容,尽量不要使用不推荐的代码,搜索两次!在每个结果中尝试echo,如下所示:if($count==1){echo'a';}else{echo'b'}这样,您就可以看到if发生了什么。第二,您在数据库中加密了密码了吗?请尝试告诉我,然后尝试这样做:$sql=“SELECT*FROM username=”$username'“确定,然后尝试回显用户名,然后从thw浏览器复制并粘贴到数据库中。然后重试。然后sql语法出现问题。请确保字段用户名与数据库中的用户名完全相同(而不是用户名或用户名等)。然后尝试此操作:$sql=“从用户名=“$username”的用户中选择用户名”;然后尝试echo$count;我很高兴我帮了你!:)会话既酷又简单!提示:不要忘记页面顶部的会话开始()!也请阅读此内容,尽量不要使用不推荐的代码,搜索两次!
     $username = mysqli_real_escape_string($con, $_POST['username']);
     $recievedPassword = md5($_POST['password']);
    
    $qry="select password from Users where username=$username";
    $row=mysqli_query($qry);
    
    $result=mysqli_fetch_assoc($result);
    $dbPassword=$result['passsword'];
    
    if($recievedPassword==$dbPassword){
        echo "password matched"; 
    }
    else{
        echo "password mismatch, Please not encryped in db or there is any space..";
    }