php+mysql留言板实现代码分享

前言

今天没什么想说的,直接上正文吧。。。。。。。。

正文

在前几天学习的基础上,自己重新把功能实现一遍,并把自己的总结都写在代码的注释里面。。。

上次忘了的sql+PHP的查询总结

mysqli查询结果:
1.用它的mysqli_result类,文档是这样说的 “代表从一个数据库查询中获取的结果集” 。。。
query语句执行完以后一般是返回truefalse,但如果执行的是select语句的话,返回的就是一个对象了,但是执行不成功肯定是false,所以一般前面要先判断。。

2.如果他是对象的话,那么就可以调用mysqli_result类下的fetch_array()函数,这个函数是不可逆的,就是显示完以后重复加载该函数没用,要解决的这种情况我们可以用一个数组存储一下。。。
如果里面什么都不填的话他返回的数组里面即含有索引,又含有字段,详细可以自己用var_dump函数测试一下。。。
所以可以用一个常量MYSQLI_ASSOC,注意常量不需要引号,也不需要$

登录功能

由于http是无记忆的,关闭网页后会消失数据,因此才要用数据库去存储数据
所以我们用session跟cookie来实现登录功能,我用的是session,因为session一般都在服务器端,比较安全

还有几点注意事项

1.Undefined index:的错误,这种错误我出现了很多次,主要是post或者get请求为空导致的,后来是在class类里面调用了isset函数解决的…..

2.代码中所有注释中的var_dump函数都是用做测试

3.还有就是html语句跟PHP语句的混写一定要小心,很容易就会写错

4.我用的是PHPstudy搭建的环境,数据库起名PHP10

下面就附上代码

1.book.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php


/*
留言板首页
*/
session_start();
include ('connect.php');
include ('mysql.php');
//var_dump($_SESSION);

?>

<?php date_default_timezone_set("PRC"); //这句话解决的是It is not safe to rely on the system's timezone settings报错

?>

<!DOCTYPE html>


<html>
<head>
<meta charset="UTF-8">
<title>留言板</title>
<style>
.wrap {
width:800px;
margin:0px auto;

}
.add {overflow: hidden;}
.add .content {
width: 798px;
margin: :0;
padding: 0;
}
.add .user{float: left;}
.add .btn{float: right;}
.msg{ margin:20px 0px;background: #ccc; padding:5px;}
.msg .info{overflow: hidden;}
.msg .user{float: left;color:blue;}
.msg .time{float:right;color:#999;}
.msg .content{width:100%padding:5px;}


</style>

</head>


<body>
<div class="wrap">
<!-- 发表留言 -->
<div class="add">
<form action='save.php' method='post' >
<textarea class="content" name='content' cols="50" rows="5"></textarea>
<input class="user" type="text" name='user' />
<input class="btn" type="submit" value="发表留言"/>
<a class='btn' href='login.php'>登录</a>
</form>
</div>
<?php
foreach ($d as $row ) {
?>
<!--查看留言 -->
<div class='msg'>
<div class='info'>
<span class='user'><?php echo $row['user'] ;?></span>
<span class ='time'><?php echo date("Y-m-d H:i:s",$row['intime']);?> <!--用了date函数改变一下格式-->
<?php if(isset($_SESSION['username']) == true) {?>
<a onclick="return confirm('你确定要删除吗?')" href="delete.php?id=<?php echo $row['id'];?>">删除</a></span>
<!--这里用onclick去写js-->
<?php }?>
</div>
<div class='content'>
<?php echo $row['content'] ;?>
</div>
</div>
<?php
}
?>
</div>
</body>

</html>

2.save.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
/*
此处是完成留言板的增加留言的功能
无论你是否是管理员都可以发表留言
*/

include ('connect.php');
include('test3.php');
$n = new input();
$flag = $n->post('content');

if($flag === false)
{
die("输入内容不能为空!!");
}
$content = $flag;


$flag = $n->post('user');
if( $flag == false )
{
die("输入名字违规!!");
}
$user = $flag;

// var_dump($n->post($user));
$time = time(); //time函数是用来表示时间戳,从1970年开始,也就是1970之前不能表示
$sql = "insert into msg(content,user,intime) values('{$content}','{$user}','{$time}')";
/*
这里用花括号是因为你在单引号里面不知道这个$后面跟着的是变量还是字符串
*/

//echo $sql;

$db->query("SET NAMES UTF8");
//确保数据传输也是UTF-8,防止出现乱码,可能会出现这种情况,但我发现我删除之后没影响,最好还是些写写吧,小心是UTF8,没有横线

$flag = $db->query($sql);
if($flag == true)
{
header("location:book.php");//重定向
}
else
{
echo '操作失败!';
}
//header("location:book.php");

?>

3.connect.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

/*
此处是数据库连接的关键文件
每次执行sql都需要连接数据库
单独写进一个文件在用文件包含比较方便
*/

$host = '127.0.0.1';
$dbuser = 'root';
$pwd = 'root';
$dbname = 'php10';

$db = new mysqli($host,$dbuser,$pwd,$dbname);
$db->query('SET NAMES UTF8');
if($db->connect_errno !=0)
{
die('连接失败!');
}



?>

4.test3.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php

/*
此处是用于输入的判断,这里的试isset函数帮我解决了那个Undefined index:的错误
这里也让我明白了这个PHP函数可以随意返回东西,不想C++那样只能返回对应函数类型的值
*/
class input{
function post($key)
{
if(isset($_POST[$key]) === false)
{
return false;
}
//禁止使用的用户名,代码恶意过滤
$n = ['张三','李四','王五'];
foreach( $n as $name)
{
if($key == $name)
{
return false;
}
}

$val = $_POST[$key];
return $val;
}

function get($key)
{

if(isset($_GET[$key]) === false)
{
return false;
}
//禁止使用的用户名,代码恶意过滤
$val = $_GET[$key];
return $val;

}




}

?>

5.mysql.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

/*
此处是留言板颜面查询功能的实现

*/
include ('connect.php');


$sql = "select * from msg order by id DESC";
//执行SQL语句
$mysqli_result = $db->query($sql);
if($mysqli_result === false)
{
echo '操作失败!';
exit;

}
/*
fetch_array首次调用显示最新的一条记录
重复调用,依次显示后面的记录
如果没记录可显示,就返回NULL

*/

// echo $c['id'];
// echo $c['content'];
// echo $c['user'];
// echo $c['intime']; //测试部分。。这里的$符号忘记了写,找了很久才找得到,原谅新手O(∩_∩)O

$d = [];
while($c = $mysqli_result->fetch_array(MYSQLI_ASSOC)) //这里的$c变量运用了类型转换
{
$d[] = $c;
/*
这里的[]可以天可以不填,不填的话,就会自动索引从0开始,并且是个二维数组,一维对应的字段键值,如果自己想定义可以这样$d[$c['id']] = $c;这是以id为键值
*/
}



?>

6.login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php 
/*
登录功能的实现

*/


session_start(); //session的用法其实就是相当与一个数组,可跨网页使用
include ('test3.php');
$input = new input();

include ('connect.php');
$act = $input->get('act');
//var_dump($act);

if($act !== false)
{
$username = $input->post('username');
$password = $input->post('password');
//var_dump($username,$password);
/*
把下面这一段代码放在外面的话,一直会爆未定义变量的错误,找了很久才发现因该在里面写
请原谅新手。。。。

*/
$sql = "select * from ada where username='{$username}' and password='{$password}'";

$mysqli_result = $db->query($sql);
if($row = $mysqli_result->fetch_array(MYSQLI_ASSOC))
{
$_SESSION['username'] = $row['username'];
header("Location:book.php");
}
else
{
echo"登陆失败!";
exit;
}
}



?>






<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8"/>
<title>管理员登陆</title>
</head>
<body>
<form action = 'login.php?act=chk' method="post"> <!--get方法的变量只需要在这个action里面定义即可-->
<input type="text" name='username'/>
<input type='password' name= 'password' /> <!--type改成password可以隐藏明文-->
<input type='submit' value='点击登录'/>
</form>

</body>

</html>

7.delete.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

/*
删除功能的实现
*/

session_start();
if(isset($_SESSION['username']) ==false)
{
echo "需要管理员权限!!";
exit;
}

include ('test3.php');
$input = new input();


$id = $input->get('id');
include('connect.php');
$sql = "delete from msg where id='{$id}'";
$is = $db->query($sql);
if($is == true)
{
header("Location:book.php");
}
else
echo "删除失败!!";

?>

听说,打赏我的人最后都成了大佬。



文章目录
  1. 1. 前言
  2. 2. 正文
    1. 2.0.1. 上次忘了的sql+PHP的查询总结
    2. 2.0.2. 登录功能
    3. 2.0.3. 还有几点注意事项
    4. 2.0.4. 下面就附上代码