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

标签 php html mysql xampp

我创建了一个带有提交按钮的表单。我还在 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>

最佳答案

您的代码中存在一些错误或不完善。

首先,您的输入密码字段没有名称。 只需将 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 为 true,那么只需查看数据库就已经完成了检查。我将 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 - 尝试使用用户名和密码创建用户登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43037016/

相关文章:

php - 如何在 MySQL 上为不同的组创建唯一的 ID?

html - 外部样式表不起作用

PHP artisan migrate 不会迁移所有表

php - 如何检查字段是否为空?

php - 使用 php jquery 和 ajax 的 html2fpdf - 使用完整的 CSS 导出

html - CSS clear属性在具体案例中的使用的一些疑惑

javascript - 没有元标记的响应式网页?

php - 登录后显示个人资料图片

mysql - sql查询获取最新发送的消息

php - PDO 两表连接