PHP留言板结构
1.新建Message类
1 | class Message{ |
Message对象包含3个属性,name、time、content,分别是留言用户名,留言时间、留言内容。
在创建对象时,构造函数使将值赋给对象的3个属性。
show()方法则是显示留言内容。
2.新建MessageBoard类
上图左边是MessageBoard类的结构。
MessageBoard类包含1个属性,messages。messages的数据类型是数组,其中存放了所有的留言。
MessageBoard类包含5个方法,showForm()、saveData()、loadData()、showAllMessages()、showForm()。
这5个方法的具体作用写在下面。
2.1显示页面
2.1.1showForm()
1 | function showForm(){ |
showForm()方法用于显示留言板的表单,通过echo输出HTML语句标签显示表单,表单提交的方式为POST。
2.1.2showAllMessages()
1 | function showAllMessages(){ |
showAllMessages()方法用于输出留言内容。上面说过messages的数据类型是数组,所以使用foreach()循环输出数组内容,messages中的元素属于Message类,所以使用自身的方法show()来显示留言内容。
2.2留言的接收和读取
2.2.1receiveMessage()
1 | function receiveMessage(){ |
receiveMessage()方法用于接收留言,如果收到留言则使用saveData()方法将留言存储起来。
2.2.2saveData()
1 | function saveData($u,$t,$c){ |
此时的saveData()方法只是用于测试整个留言板是否正常工作,还没有连接数据库,所以无法将数据存储在数据库中。只是将要存储的内容显示在页面上。
2.2.3loadData()
1 | function loadData(){ |
和saveData()方法一样,此时的loadData()也只是测试阶段。使用$temp存储留言,使用array_push()函数将留言存放在messages数组中。
3.数据库
数据库中的数据结构
上图的左边是DB类的结构,database属性和构造函数。具体内容写在下面。
上图的右边是数据库中数据表的结构,4个字段:ID、name、time、content,分别表示留言发表顺序、留言者、留言时间、留言内容。
3.1数据库建立&数据表建立
使用PHPMyAdmin的图形化界面建立数据库以及数据表
3.1.1数据库建立
3.1.2数据表建立
3.2连接数据库
3.2.1创建DB类
1 | class DB{ |
DB类的两个方法分别是构造函数和析构函数。
构造函数在对象实例化时执行,其中包含mySQL数据库的配置信息:IP地址、账户、密码。使用PHP自带的mysql_connect()函数连接mySQL数据库,使用PHP自带的mysql_select_db()函数选择数据库。
析构函数在将对象销毁时断开与mySQL数据库的连接,同样适用了PHP自带的mysql_close()函数。
3.2.2MessageBoard继承DB
1 | class MessageBoard extends DB |
通过继承DB类,使MessageBoard类可以使用DB类中的方法和属性。
在继承父类后,子类可以使用父类的属性和方法,但是因为子类已经声明了自己的构造函数,所以无法直接继承父类的构造函数,可以使用下面的代码来继承父类的构造函数。
1 | parent::__construct(); |
3.3数据库的读写
3.3.1SQL语法
1 | INSERT INTO `all_messages`(`name`,`time`,`content`) VALUE('chessur','2019-3-24','Hello World') |
1 | SELECT * FROM `all_messages`; |
INSERT INTO是向数据库中插入数据
SELECT是从数据库中选择数据
3.3.2saveData()
1 | function saveData($u,$t,$c){ |
在连接了mySQL数据库后,我们可以将savaData()方法改写为真正的方法,而不再只是测试的作用。
mysql_query()函数可以执行一条mySQL语句。
3.3.3loadData()
1 | function loadData(){ |
$query中的mySQL语句是选择表中所有数据,使用mysql_query($query)找到所有数据后,将全部留言放入messages这个数组中,完成留言数据的加载。
4.mysql函数
4.1mysql_query()
mysql_query() 函数执行一条 MySQL 语句。
1 | mysql_query(query,connection) |
1 | mysql_query($query) |
4.2mysql_connect()
mysql_connect() 函数打开非持久的 MySQL 连接。
1 | mysql_connect(server,user,pwd,newlink,clientflag) |
1 | mysql_open($this->database) |
4.3mysql_select_db()
mysql_select_db() 函数设置活动的 MySQL 数据库。
如果成功,则该函数返回 true。如果失败,则返回 false。
1 | mysql_select_db(database,connection) |
1 | mysql_select_db("db_messages",$this->database) |
4.4mysql_close()
mysql_close() 函数关闭非持久的 MySQL 连接。
1 | mysql_close(link_identifier) |
1 | mysql_close($this->database) |
4.5mysql_fetch_array()
mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有
1 | mysql_fetch_array(data,array_type) |
1 | mysql_fetch_array($result) |
4.6SELECT
SELECT 语句用于从数据库中选取数据。
1 | SELECT column_name,column_name |
1 | SELECT * FROM `all_messages`; |
4.7INSERT INTO SELECT
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
1 | INSERT INTO table2 |
1 | INSERT INTO `all_messages`(`name`,`time`,`content`) VALUE('".$u."','".$t."','".$c."') |
5.缺陷
1.没有删除功能。
2.刷新页面时表单会重复提交。
3.时间显示不正确。
1 | /*date()函数参数*/ |
将上面代码中的h改成H即为24小时
1 | date("Y-m-d H:i:s",time()) |
时区设置在php.ini中搜索”timezone”修改
6.参考
[1] php留言板製作
[2] PHP 教程
[3] SQL 教程