前段时间学了一下PHP,想着写一个简易的学生信息管理系统,这篇博客记录了大概过程。源码链接
结构
主页面
主页面是用html写的简单的表单,没有多余的部分
连接数据库
将主页面显示的表单信息和数据库连接起来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<style type="text/css">
a{text-decoration: none}
</style>
<body>
<div style="text-align: center; font-size: 26px; border-bottom: black 2px solid" >
<p>学生信息</p>
<a href="first.php">浏览信息</a>
<a href="add.php">添加信息</a>
</div>
<table border="1" cellspacing="0" style="margin: 20px auto" >
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>班级</th>
<th>操作</th>
</tr>
<?php
header('Content-type:text/html;charset=utf-8');//设置编码格式
$link=mysqli_connect('localhost:3308','root','','students');//连接数据库
if (!$link) {//判断连接状态
die("连接失败: " . mysqli_connect_error());
}
mysqli_set_charset($link,'utf8');//设置客户端默认字符集
$sql="SELECT* FROM information";//sql语句,查询数据表信息
foreach ($link->query($sql) as $value){//遍历数据表中的信息
echo '<tr>';
echo "<th>{$value['id']}</th>";
echo "<th>{$value['name']}</th>";
echo "<th>{$value['age']}</th>";
echo "<th>{$value['sex']}</th>";
echo "<th>{$value['class']}</th>";
echo "<th>
<a href='alter.php?id={$value['id']}'>修改</a>
<a href='action.php?id={$value['id']}' οnclick=\"return confirm('确认删除该名学生的信息吗?')\">删除</a>
</th>";
//跳转到指定的页面,并且在url后面添加上?id,跳转后用来获取相应id的值
echo '<tr>';
}
mysqli_close($link);
?>
</table><!--获取数据库的php代码要放在table标签之内,数据库中取出来的值才能和之前的表头一起组成一个表格-->
</body>
</html>
前台添加功能页面
下面的代码实现的只是前台表单信息的添加,添加数据库信息的sql语句放在了action.php中
<form action="action.php?id=add" method="post"><!--url后面加上id便于action.php判断是哪个页面跳转过来的-->
<table style="margin: 20px auto;text-align:left">
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td>性别:</td>
<td><input type="radio" name="sex" value="男">男</td>
<td><input type="radio" name="sex" value="女">女</td>
</tr>
<tr>
<td>班级:</td>
<td><input type="text" name="class"></td>
</tr>
<tr>
<td><a href="first.php">返回</a></td>
<td><input type="submit" value="提交"></td>
</tr>
<tr>
</tr>
</table>
</form>
前台更改信息页面
通过在url上添加id来获取更改前的数据
<form action="action.php?id=alt" method="post"><!--url后面加id便于action.php判断是哪个页面跳转过来的-->
<?php
$link=mysqli_connect('localhost:3308','root','','students');
if (!$link) {
die("连接失败: ".mysqli_connect_error());
}
mysqli_set_charset($link,'utf8');
$id=$_GET['id'];//获取在first.php中是点击哪个数据的更改选项跳转过来的
$sql="SELECT* FROM information where id=$id";
if (!$link) {
die("连接失败: ".mysqli_connect_error());
}
foreach ($link->query($sql) as $value) {
/*$_id=$value['id'];
$name=$value['name'];
$sex=$value['sex'];
$age=$value['age'];
$class=$value['class'];*/
}
mysqli_close($link);
?>
<table style="margin: 20px auto;text-align:left">
<input type="hidden" name="id" value="<?php echo $value['id']?>"><!--记录跳转过来前的信息-->
<tr>
<td>姓名:</td>
<td><input type="text" name="name" value='<?php echo $value['name']?>'></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age" value="<?php echo $value['age']?>"></td>
</tr>
<tr>
<td>性别:</td>
<td><input type="radio" name="sex" value="男">男</td>
<td><input type="radio" name="sex" value="女">女</td>
</tr>
<tr>
<td>班级:</td>
<td><input type="text" name="class" value="<?php echo $value['class']?>"</td>
</tr>
<tr>
<td><a href="first.php">返回</a></td>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
<tr>
</tr>
</table>
</form>
数据库的修改,删除,添加
通过switch分别执行三个功能的sql语句
<?php
header('Content-type:text/html;charset=utf-8');
$link=mysqli_connect('localhost:3308','root','','students');
switch ($_GET["id"]){//通过url中传过来的id值判断执行添加,更改,删除的sql操作
case 'add':
$name=$_POST['name'];
$age=$_POST['age'];
$sex=$_POST['sex'];
$class=$_POST['class'];
$sql="INSERT INTO information (name,age,sex,class) VALUES ('$name', '$age', '$sex', '$class')";
if ($link->query($sql)=== true){
echo "<script language='JavaScript' type='text/javascript'>
window.location.href='first.php';//删除成功则跳转到首页
</script>";
}else{
echo '添加失败'.$link->error;
}
break;
case 'alt':
$id=$_POST['id'];
$name=$_POST['name'];
$sex=$_POST['sex'];
$age=$_POST['age'];
$class=$_POST['class'];
$sql="update information set name='$name',sex='$sex',age='$age',class='$class' where id='$id'";
if ($link->query($sql)=== true){
echo "<script language='JavaScript' type='text/javascript'>
window.location.href='first.php';
</script>";
}else{
echo '更改失败'.$link->error;
}
break;
default://因为跳转到这个页面的只有三个url,所以如果id值不是那两个的话就是这个
$id = $_GET["id"];//通过url的传递获取删除数据的id值
$db = new MySQLi("localhost:3308","root","","students");
$sql = "delete from information where id='{$id}'";
if($db->query($sql))
{
header("location:first.php");
}
else
{
echo "删除失败!";}
break;
}
mysqli_close($link);
过程中我遇到的问题
第一个问题
写首页的时候要将数据库服务器和显示页面进行数据连接,当时没有注意双引号和单引号的区别,就顺手随便写了,结果php代码并没有执行。因为双引号里面的内容将会被解释,即解析内容中的变量后再输出,但是单引号里面的不需要解释直接输出,即输出的内容会与输入的内容一致。
foreach ($link->query($sql) as $value){
echo '<tr>';
echo '<th>{$value["id"]}</th>';//错误代码
echo '<th>{$value["name"]}</th>';
echo '<th>{$value["age"]}</th>';
echo '<th>{$value["sex"]}</th>';
echo '<th>{$value["class"]}</th>';
echo '<td>
<a href="alter.php">修改</a>
<a href="alter.php">删除</a>
</td>';
echo '<tr>';
}
第二个问题
写删除信息功能的时候,想的是应该将删除数据库的sql语句放在js的click事件中,当点击删除的时候同时删除显示的信息和数据库的信息,但是有点复杂能力不足没有实现,查了一下其实删除数据只需要删除掉插入数据库的字段就行,不必多余的去再删除一下显示的信息。因为foreach遍历出的数组中元素的个数就是数据表中的每一行的记录数,减少相应的记录数便会减少相应的数组元素。
<?php
header('Content-type:text/html;charset=utf-8');//设置编码格式
$link=mysqli_connect('localhost:3308','root','','students');//连接数据库
if (!$link) {//判断连接状态
die("连接失败: " . mysqli_connect_error());
}
mysqli_set_charset($link,'utf8');//设置客户端默认字符集
$sql="SELECT* FROM information";//sql语句,查询数据表信息
foreach ($link->query($sql) as $value){//遍历数据表中的信息
echo '<tr>';
echo "<th>{$value['id']}</th>";
echo "<th>{$value['name']}</th>";
echo "<th>{$value['age']}</th>";
echo "<th>{$value['sex']}</th>";
echo "<th>{$value['class']}</th>";
echo "<th>
<a href='alter.php?id={$value['id']}'>修改</a>
<a href='action.php?id={$value['id']}' οnclick=\"return confirm('确认删除该名学生的信息吗?')\">删除</a>
</th>";
//跳转到指定的页面,并且在url后面添加上?id,跳转后用来获取相应id的值
echo '<tr>';
}
mysqli_close($link);
?>
第三个问题
实现将删除,修改,添加三个功能集成在一个页面上是通过跳转前在url上加id和switch语句实现的。
<?php
header('Content-type:text/html;charset=utf-8');//设置编码格式
$link=mysqli_connect('localhost:3308','root','','students');//连接数据库
if (!$link) {//判断连接状态
die("连接失败: " . mysqli_connect_error());
}
mysqli_set_charset($link,'utf8');//设置客户端默认字符集
$sql="SELECT* FROM information";//sql语句,查询数据表信息
foreach ($link->query($sql) as $value){//遍历数据表中的信息
echo '<tr>';
echo "<th>{$value['id']}</th>";
echo "<th>{$value['name']}</th>";
echo "<th>{$value['age']}</th>";
echo "<th>{$value['sex']}</th>";
echo "<th>{$value['class']}</th>";
echo "<th>
<a href='alter.php?id={$value['id']}'>修改</a>
<a href='action.php?id={$value['id']}' οnclick=\"return confirm('确认删除该名学生的信息吗?')\">删除</a>
</th>";
//跳转到指定的页面,并且在url后面添加上?id,跳转后用来获取相应id的值
echo '<tr>';
}
mysqli_close($link);
?>