帮我优化这段代码,使其可以成功实现管理员和普通用户登录<?php //数据库连接 require_once 'connect.php'; //从登录页接受来的数据 $name=$_POST['username']; $pwd=$_POST['password']; session_start(); $_SESSION['username'] = $username; $_SESSION['user_type'] = $row['user_type']; $sql="select id,username,password from user where username='$name' AND password='$pwd';"; $result=mysqli_query($conn,$sql); $row=mysqli_num_rows($result); if(!$row){ echo "<script>alert('密码错误,请重新输入');location='login.html'</script>"; } else{ // 跳转到相应的页面 if ($row['user_type'] == 'admin') { header('Location:zsgc.php'); } else { header("refresh:3;url='welcome.php'"); } }
时间: 2023-08-31 11:42:47 浏览: 109
这段代码有一些问题,下面是改进的建议:
1. 首先,需要在接受到数据之前对数据进行安全过滤,避免 SQL 注入攻击。可以使用 mysqli_real_escape_string 函数来实现。
2. 在判断用户是否存在时,应该使用 mysqli_fetch_assoc 函数来获取查询结果。如果查询结果为空,则返回错误信息。
3. 在设置 session 变量时,应该使用正确的变量名,即 $name 而不是 $username。
4. 在跳转页面时,应该使用 exit 函数来避免后续代码的执行。
下面是代码的改进版本:
```
<?php
// 数据库连接
require_once 'connect.php';
// 从登录页接受来的数据
$name = mysqli_real_escape_string($conn, $_POST['username']);
$pwd = mysqli_real_escape_string($conn, $_POST['password']);
// 查询用户是否存在
$sql = "SELECT id, username, user_type FROM user WHERE username='$name' AND password='$pwd';";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
if (!$row) {
// 错误处理
echo "<script>alert('密码错误,请重新输入');location='login.html'</script>";
} else {
// 设置 session 变量
session_start();
$_SESSION['username'] = $name;
$_SESSION['user_type'] = $row['user_type'];
// 跳转到相应的页面
if ($row['user_type'] == 'admin') {
header('Location:zsgc.php');
exit();
} else {
header("refresh:3;url='welcome.php'");
exit();
}
}
```
阅读全文