尝试使用用户名和密码创建用户登录

Posted

技术标签:

【中文标题】尝试使用用户名和密码创建用户登录【英文标题】:Trying to create a user login with username and password 【发布时间】:2017-08-19 14:33:09 【问题描述】:

我创建了一个带有提交按钮的表单。我还连接到 db.php 文件中的 XAMPP 数据库。我只是想在字段中输入用户名和密码并重定向到另一个 .php 文件。每次我用用户名和密码登录时,什么都没有发生。任何帮助将不胜感激。 谢谢。

<?php

  error_reporting(E_ALL & ~E_NOTICE);
  session_start();
  print_r($_POST['submit']);

  $dbCon = mysqli_connect('localhost', 'root', '', 'osticket') or die('can not connect');

  mysqli_select_db($dbCon, 'osticket');


 if ($_POST['submit']) 
   $username = trim($_POST['username']);
   $username = strip_tags($username);
   $username = htmlspecialchars($username);

   $password = trim($_POST['password']);
   $password = strip_tags($password);
   $password = htmlspecialchars($password);

   $username = mysqli_real_escape_string($dbCon,$username);
   $password = mysqli_real_escape_string($dbCon,$password);


   $sql = "SELECT * FROM ost_staff WHERE username = '$username' AND password = '$password'";
   $query = mysqli_query($dbCon, $sql) or die (mysqli_connect_error($dbCon));


   if ($query) 
    $result = mysqli_fetch_array($query);
    $_SESSION['username'] = $result["username"];
    $_SESSION['staff_id'] = $result["staff_id"];;

    header('Location: user.php');
    else 
       echo "Incorrect username and password";
   


 ?>


<form class="form-signin" method="post" action="ticket.php">
              <h2 class="form-signin-heading">Sign In</h2>
              <label for="inputUsername" class="sr-only">Username</label>
              <input type="text" id="inputUsername" class="form-control"         placeholder="Username" name="username" required autofocus>
              <label for="inputPassword" class="sr-only">Password</label>
              <input type="password" id="inputPassword" class="form-control" placeholder="Password" name="password" required>
              <div class="checkbox">
              <label>
              <input type="checkbox" value="remember-me"> Remember me
              </label>
              <input type="submit" value='Try it' name='submit'/>
      </form>

【问题讨论】:

你能把你的表格也发一下吗 只是好奇,为什么还要检查输入是否与返回的数据相同?您已经使用输入找到了与数据库相似的 usernamepassword,它要么返回 1 个结果,要么根本不返回。 我猜你想被黑。 @CarlJan 刚开始使用 php :/ 尝试为学校创建一个具有用户名并通过登录的简单网站。没什么太花哨的。 @arif_suhail_123 他们都是你的。 【参考方案1】:

您的代码中存在一些错误或缺陷。

首先,您输入的密码字段没有名称。 只需将 name="password" 添加到您的输入字段:

<input type="password" id="inputPassword" class="form-control" placeholder="Password" name="password" required>

并且还将输入“提交”更改为按钮。

<button type="submit" value='Try it' name='submit'>test</button>

还以(不太确定您是否已经这样做了,因为它已被切断)结束表格

之后代码应该可以工作,但它不是很漂亮。因此,如果您以后想更改它,这里只是一些建议:

代码更改

变化:

if ($query) 
 $row = mysqli_fetch_row($query);
 $staff_id = row[0];
 $dbUsername = row[3];
 $dbPassword = row[5];

if ($username == $dbUsername && $password == $dbPassword) 
 $_SESSION['username'] = $username;
 $_SESSION['staff_id'] = $staff_ID;
 header('Location: user.php');
 else 
 echo "Incorrect username and password";

收件人:

if ($query) 
 $result = mysqli_fetch_array($query);
 $_SESSION['username'] = $result["username"];
 $_SESSION['staff_id'] = $result["staff_id"];;

 header('Location: user.php');
 else 
    echo "Incorrect username and password";

因为如果 $query 为真,那么只需查看数据库即可完成检查。而且我把fetch_row改成了fetch_array,不过那只是因为我更喜欢这种方式。

添加安全性

为了让您的代码更安全,这里还有一些建议:

$username = trim($_POST['username']);
$username = strip_tags($username);
$username = htmlspecialchars($username);

$password = trim($_POST['password']);
$password = strip_tags($password);
$password = htmlspecialchars($password);

$username = mysqli_real_escape_string($dbCon,$username);
$password = mysqli_real_escape_string($dbCon,$password);

这是非常基本的,可以防止一些攻击。

也许您还想让它更安全并散列密码 (http://php.net/manual/en/function.password-hash.php)

还有很多其他的东西你可以改变,但我想让它保持简单。如果您有任何问题,请随时问我。

【讨论】:

更新了我的 php 并添加了表单名称。当我运行 php 时,它会转到一个新页面,上面写着。 “试试吧。”如果我输入了错误的密码,即使我回显“用户名和密码不正确”,它仍然会转到此页面。谢谢。 @Dead_Master @EricHo23 所以我也有一些更改jsfiddle.net/3o9s5p7q/2(查看 cmets)。如果这不起作用,那是数据库的错误,因为我在我的电脑上尝试过它并且它有效 ^^ 嗯。也许它是我正在使用的数据库变量?这是它的gyazo。 gyazo.com/f9790c8612b24f426ee4419fc40a7078 @EricHo23 有一些东西:更改 $sql = "SELECT * FROM osticket WHERE username = '$username' AND password='$password'"; to $sql = "SELECT * FROM osticket WHERE username = '$username' AND passwd='$password'"; (jsfiddle.net/3o9s5p7q/4) 这很奇怪。我刚刚重新安装了 osTicket,所以我得到了一个新的 phpmyadmin 数据库。当您登录时,它究竟在为您做什么?数据库现在称为“eric”,表称为“ost_staff”,我从中提取用户名和密码。

以上是关于尝试使用用户名和密码创建用户登录的主要内容,如果未能解决你的问题,请参考以下文章

比较密码 BcryptJS

Jenkins github用户名密码登录

Telnet 使用用户名和密码登录到邮件服务器

SqlConnection 使用 Dynamics GP 用户名和密码——用户登录失败

Graphql 的登录突变未找到用户

无法使用有效的用户名和密码登录 django 管理页面