我正在学习使用一些基于 mysqli 的视频教程制作网站。我开始知道使用准备好的语句更安全,我正在尝试创建一个登录系统。这是我到目前为止所做的。
这段代码帮助我完全登录成功。
<form action ="" method="post">
User Name:<br/>
<input type='text' name='username' />
<br/><br/>
Password:<br/>
<input type='password' name='password' />
<br/><br/>
<input type='submit' name='submit' value='login'>
</form>
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=? LIMIT 1");
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->bind_result($username, $password);
$stmt->store_result();
if($stmt->num_rows == 1) //To check if the row exists
{
while($stmt->fetch()) //fetching the contents of the row
{$_SESSION['Logged'] = 1;
$_SESSION['username'] = $username;
echo 'Success!';
exit();
}
}
else {
echo "INVALID USERNAME/PASSWORD Combination!";
}
$stmt->close();
}
else
{
}
$con->close();
?>
但我还需要检查用户是否尚未激活或已被禁止或停用。所以我又做了一个代码。
这是我制作的代码
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=? LIMIT 1");
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->bind_result($username, $password);
$stmt->store_result();
if($stmt->num_rows == 1) //To check if the row exists
{
$result=$con->query($stmt);
$row=$result->fetch_array(MYSQLI_ASSOC);
$user_id= $row['user_id'];
$status = $row['status'];
if($status=='d'){
echo "YOUR account has been DEACTIVATED.";
}else{
$_SESSION['Logged'] = 1;
$_SESSION['user_id'] = $user_id;
$_SESSION['username'] = $username;
echo 'Success!';
exit();
}
}
else {
echo "INVALID USERNAME/PASSWORD Combination!";
}
$stmt->free_result();
$stmt->close();
}
else
{
}
$con->close();
?>
当我使用这个时,我收到以下错误
警告:mysqli_query() 期望参数 1 为字符串,即第 33 行 C:\XAMPP\htdocs\login\login.php 中给出的对象
致命错误:在第 34 行对 F:\XAMPP\htdocs\login\login.php 中的非对象调用成员函数 fetch_array()
我有数据库表列
用户身份,
用户名,
密码(md5),
用户级别,
地位。
在 user_level 下我有以下内容
a = admin
m = member
状态下
a = activated
n = not activated
d = deactivated
b = banned
登录时,我需要检查用户状态是否以及它是否被激活,它应该移动到索引页面,或者如果它被激活,它应该显示用户已被停用,对于其他人也是如此。
如何在准备好的语句中做到这一点?
我在所有页面都有这个 connect.php
?php
//error_reporting(0);
'session_start';
$con = new mysqli('localhost', 'username', 'password', 'database');
if($con->connect_errno > 0){
die('Sorry, We\'re experiencing some connection problems.');
}
?>