PHP实现用户输入存储、管理后台搭建及权限控制作业问题
PHP作业问题解决方案
首先修正原有代码的两处基础问题:
- process.php存在重复冗余,重复写了两次HTML头部和表单校验逻辑,可直接删除后半段重复内容
- process.php中变量名拼写错误,
$EmailAdressErr需修改为$EmailAddressErr,否则会触发未定义变量报错 - 将content.php的form表单action属性改为
action="process.php",让表单提交到校验处理文件
1. 存储用户提交的表单信息
作业场景推荐用CSV文件存储,无需配置数据库,实现简单。在process.php的校验逻辑末尾添加如下代码,校验通过后将数据写入CSV文件:
// 放在表单校验逻辑结束后 if (empty($FirstNameErr) && empty($LastNameErr) && empty($EmailAddressErr)) { // 打开csv文件,a模式为追加写入 $file = fopen('users.csv', 'a'); // 仅首次创建文件时写入表头 if (filesize('users.csv') == 0) { fputcsv($file, ['First Name', 'Last Name', 'Email', '提交时间']); } // 写入用户提交的数据 fputcsv($file, [$FirstName, $LastName, $EmailAddress, date('Y-m-d H:i:s')]); fclose($file); }
需确保代码所在目录有写入权限,避免文件写入失败。
2. 提交成功的确认提示
在上述校验通过的判断分支里添加成功提示即可,还可增加跳转逻辑避免用户刷新重复提交:
if (empty($FirstNameErr) && empty($LastNameErr) && empty($EmailAddressErr)) { // 上方存储逻辑保留 echo '<p style="color: green;">表单提交成功!感谢您的填写。</p>'; // 可选:3秒后跳转回表单页 header("refresh:3;url=content.php"); exit; }
3. 管理后台拉取数据展示
新建admin.php作为管理后台文件,读取CSV文件内容输出为表格:
<!DOCTYPE html> <html> <head> <title>用户提交数据管理</title> <style> table {border-collapse: collapse;} th, td {border: 1px solid #ccc; padding: 8px 12px;} </style> </head> <body> <h2>用户提交的表单数据</h2> <table> <?php $file = fopen('users.csv', 'r'); $line = 0; while ($row = fgetcsv($file)) { echo '<tr>'; foreach ($row as $col) { // 第一行是表头用th标签 $tag = $line == 0 ? 'th' : 'td'; echo "<$tag>".htmlspecialchars($col)."</$tag>"; } echo '</tr>'; $line++; } fclose($file); ?> </table> </body> </html>
4. 管理后台密码访问权限控制
用HTTP基础认证实现,代码最简单适配作业需求,将以下代码放在admin.php最顶部即可:
<?php // 配置管理员账号密码,可自行修改 $admin_account = 'admin'; $admin_password = 'test123'; // 校验账号密码 if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] !== $admin_account || $_SERVER['PHP_AUTH_PW'] !== $admin_password) { header('WWW-Authenticate: Basic realm="管理后台"'); header('HTTP/1.0 401 Unauthorized'); echo '请输入正确的管理员账号密码后访问'; exit; } // 后续接上面的表格展示逻辑 ?>
如果需要自定义登录页面,可改用Session实现:校验账号密码通过后写入Session标识,后续访问后台时判断Session是否存在即可。
内容的提问来源于stack exchange,提问作者TeddyPoon
相关产品推荐
相关产品推荐

