php - 从数据库中的表中验证用户
问题描述
我有一个名为“用户”的表,其中包含“用户名”和“密码”,如果在表单中输入的用户名和密码匹配,则用户将重定向到另一个页面。但我不知道这是否是最好的方法。每当我在表单上输入正确的用户名和密码时,表单都会重置。
<?php
class Database {
function insert() {
$dbhost = 'localhost:8888';
$conn = mysql_connect($dbhost, 'lmaia', 'Luismaia22');
if (! $conn) {
die('Could not connect: ' . mysql_error());
}
else {
echo "connected";
}
}
}
?>
<?php
session_start();
if($_SERVER["REQUEST_METHOD"] == "POST") {
// username and password sent from form
$myusername = mysqli_real_escape_string($db,$_POST['username']);
$mypassword = mysqli_real_escape_string($db,$_POST['password']);
$sql = "SELECT id FROM Users WHERE username = '$myusername' and password = '$mypassword'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
$active = $row['active'];
$count = mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count == 1) {
session_register("myusername");
$_SESSION['login_user'] = $myusername;
header("location: Dashboard.html");
}else {
$error = "Your Login Name or Password is invalid";
}
}
?>
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<div id="content">
<form id="login" method="post" accept-charset="UTF-8">
<img src="Resources/avatar.png" widht="200px" alt="Avatar" class="avatar">
<div class="container">
<label for="username"><b>Utilizador</b></label>
<input type="text" placeholder="Introduzir Nome" name="username" required>
<label for="password"><b>Password</b></label>
<input type="password" placeholder="Introduzir Password" name="password" required>
<button type="submit">Login</button>
</div>
</form>
</div>
</body>
</html>
解决方案
您正在使用 $db 变量,但它不包含任何内容,因此我相信您的 mysqli 函数仅返回“false”。你也没有创建你的类的任何实例,所以它目前并没有真正为你做任何事情。
另外,您没有在 mysqli_connect() 中指定默认数据库,我不确定这样做的结果,我相信您可能需要在构建查询时指定一个数据库,否则它可能会失败。
由于您没有从 $row 读取任何特定值,因此您不需要:
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
但是,如果您希望实际阅读“活动”列,那么您还需要在查询中指定它:
SELECT id,active FROM Users WHERE username = '$myusername' and password = '$mypassword'";
尝试更多类似的东西,看看它在哪里(请注意,我在 mysqli_connect 中添加了第四个参数,它可能需要也可能不需要,它是一个可选参数,但正如我上面所说 - 我不确定如何/如果它可以在连接函数和查询中省略默认数据库):
<?php
session_start();
$db = mysqli_connect('localhost:8888', 'lmaia', 'Luismaia22', 'database');
if(isset($_POST["submit"])) {
// username and password sent from form
$myusername = mysqli_real_escape_string($db,$_POST['username']);
$mypassword = mysqli_real_escape_string($db,$_POST['password']);
$sql = "SELECT id FROM Users WHERE username = '$myusername' and password = '$mypassword'";
$result = mysqli_query($db,$sql);
$count = mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count == 1) {
$_SESSION['login_user'] = $myusername;
header("location: Dashboard.html");
}else {
$error = "Your Login Name or Password is invalid";
}
}
?>
推荐阅读
- python - BeautifulSoup 没有从网页上抓取任何东西
- android - 如何使用 Instagram 私信 API
- flask - uWSGI 上的烧瓶套接字
- javascript - 用于在几个月内解析excel公式DATEDIF的nodejs包?
- java - Chrome 浏览器无法使用 Java 在 Appium 中启动
- mysql - #1064 - 您的 SQL 语法有错误:MAX NULL 问题
- javascript - 这是将中间件从strapi beta 20.4迁移到3的正确方法吗?
- bash - '>' 符号每当我尝试将命令的结果复制到变量时
- zabbix - 如何修复此 Zabbix 警报模板以使其正常工作?
- c++ - 阻塞管道 ConnectNamedPipe 不会触发