Php 从数据库中的表验证用户
我有一个名为“Users”的表,其中包含“username”和“password”,如果表单中输入的用户名和密码匹配,用户将重定向到另一个页面。但我不知道这是否是最好的方法。每当我在表单上输入正确的用户名和密码时,表单就会重置Php 从数据库中的表验证用户,php,html,sql,forms,Php,Html,Sql,Forms,我有一个名为“Users”的表,其中包含“username”和“password”,如果表单中输入的用户名和密码匹配,用户将重定向到另一个页面。但我不知道这是否是最好的方法。每当我在表单上输入正确的用户名和密码时,表单就会重置 <?php class Database { function insert() { $dbhost = 'localhost:8888'; $conn = mysql_connect($dbhost, 'lmaia',
<?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>
实用程序
密码
登录
首先:在数据库类中,需要在代码的else部分返回$conn
第二:您需要包含该文件并创建一个类变量($db=newdatabase()),然后可以使用函数insert()作为mysqli_查询的链接($db->insert(),$query)
哦,顺便说一下,不要使用MySQL*函数使用MySQLI
希望对您有所帮助您使用的是$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中添加了第四个参数,可能需要,也可能不需要,这是一个可选参数,但正如我上面所说的,我不确定如何/如果在connect函数和查询中省略默认数据库):
关于您的代码有很多话要说,但我认为您首先要做的是让它工作起来。在这些情况下,我总是插入echo,以查看代码的作用。例如,在$count=mysqli\u num\u行($result)之后代码>行,您可以放置echo“Count=[$Count]
”代码>。如果为零,则可以检查以下几项,例如查询本身:echo“SQL=[$SQL]
”代码>。等等这称为“调试”。我注意到您只从用户表中选择了id
,但您希望在$row
中获得更多信息,如活动的。但是,这不会影响您的代码,因为您不使用$active
。。。草率的编码?我尝试了echo,检查sql是否无法获取我在表单中输入的参数。我知道这有点慢,但第一次使用服务器端语言,通常我是前端开发人员。我想可能是mysqli\u real\u escape\u字符串中的$db
($db
哪个未定义?是的,它未定义,但我替换了$conn的变量,仍然没有。我已经解决了连接和验证问题,唯一的问题是重定向到页面如果您确定它不是大小写问题,并且扩展名正确,您可以尝试重定向到另一个页面吗?pref请在空白处输入“Hello world”字符串或其他内容,以确定问题是在登录页面上还是在“仪表板”页面上?仍然不会进入该页面。但会进入“if”。仪表板页面与登录页面位于同一文件夹中?哈哈,只是试图消除所有可能的错误;)您是重定向到空白页还是404?
<?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";
}
}
?>