翁松秀
WAMP之初体验——文章发布系统
项目概况
- 这学期大三修的数据库,想把MySQL、PHP、Apache打包学一下,就用WAMP小服务器做了一个学生的文章发布系统当做入门,可以实现注册与登录、并登录发表文章功能。有了项目就有了具体的学习目标,从整体设计分析到具体实现,每一步的目标都很明确,遇到的问题也很明确,这样有方向地去解决问题,通过这种方式去学习,入门以后再更深入地学习。
设计分析
- 基于WAMP(Window下的Apache+MySQL+PHP)开发一个学生的文章发布系统,系统以网页的形式,用HTML设计网页的框架,通过PHP连接数据库对数据的保存和操作,实现简单的两个功能:用户可以凭用户信息(学号、姓名、邮箱、密码)注册;用户可以登录系统发表文章。用户信息保存在数据库,以两个表保存,student(学号,姓名,邮箱,密码)、essay(学号,文章,题材),用户提交的文章以文件的形式存在小服务器。
- 页面设计:页面之间的切换触发以HTML的“POST”和超链接两种方式。页面之间的数据共享主要通过PHP的$_POST[]获得上一个页面的form“POST”过来的数据,以及通过PHP的SESSION来保存登录用户的信息,实现所有页面共享。
- 数据库设计:用student(学号、姓名、邮箱、密码)表存用户的基本信息,用essay(学号、文章、体裁)表存用户发表文章记录(还没研究数据类型和所占字节,所以这里字节可能开得不是很恰当T_T)。
数据库设计:
具体实现
- HTML: 实现每个页面,文本框,文字,超链接的布局,以及页面之前的切换。
设置页面的背景:
<body bgcolor = "#cccccc" background = "./3.jpg" width = "100%" height = "100%">
设置form表单:
<form method = post action = "click.php">
<center>
<font size = 6 face = 楷体><H1>文章发布系统<H1></font><br></br>
学号:<input type = text size = 20 name = num></font><br></br>
密码:<input type = password size = 20 name = passwd></font><br></br>
<input type = submit h name = click value = 登陆 >
<input type = submit name = click value = 注册 ><br></br>
</center>
<form method = "post" action = upload_file.php enctype = "multipart/form-data">
文章:<input type = "file" name = "file"><br></br>
体裁:<select name = kind><option Value=poem selected>诗歌
<option Value=prose selected>散文
<option Value=drame selected>戏剧
<option Value=novel selected>小说<pre></pre>
</select><br></br>
<input type = submit name = submit value = "发表">
</form>
<form method = post action = "check.php">
学号:<input type=text name = userID><br>
姓名:<input type=text name = username><br>
邮箱:<input type=text name = useremail><br>
密码:<input type=password name = password1><br>
确认:<input type=password name = password2><br>
<p>
<input type = submit value=注册>
<input type = reset value=重置>
- PHP:实现页面之间的数据共享、从数据库读取数据与存储数据到数据库实现用户信息在所有页面共享、将用户上传到服务器的临时文件保存到本地。
1,连接数据库:
/*
连接数据库
*/
$host = "localhost";
$user = "root";
$password = "password";
$dbase_name = "user";
$table_name = "student";
$conn = mysqli_connect($host,$user,$password);
/*
2,用SESSION保存用户的学号,供所有页面共享:
/*
用SESSION保存用户的学号
实现所有页面内共享数据
*/
$_SESSION['number'] = $num;
3,操作数据库:
$mysqli_command = "select * from ".$table_name;
$result = mysqli_query($conn,$mysqli_command);
4,保存数据库复制的文件到本地:
move_uploaded_file($_FILES["file"]["tmp_name"],
"D:/wamp/www/file/".iconv("UTF-8","gb2312",$_FILES["file"]["name"]));
MySQL:保存用户的基本信息与用户的文章发表记录,并对数据进行操作。
难点突破
编码产生的乱码
产生编码的原因是源文件编码、页面编码、数据库编码不一致导致编码,把这三者的编码统一的就不会产生编码。如果将他们都设成utf8.
1,源文件编码
设定编辑器保存文件的默认编码,比如EditPlus将保存文件的默认编码设为utf8:工具->配置自定义工具->文件->UTF-8。
2, 页面编码
在HTML代码的head里告诉浏览器编码为utf8
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
3,数据库编码
创建数据库时指定编码格式为utf8
mysql>create database mydb character set utf8;
页面之间数据共享
1,通过HTML的form表单,将表单数据POST给下一个页面,下一个页面通过$_POST接受上一个页面POST过来的数据。
POST
<form method = post action = "check.php">
学号:<input type=text name = userID><br>
姓名:<input type=text name = username><br>
邮箱:<input type=text name = useremail><br>
密码:<input type=password name = password1><br>
确认:<input type=password name = password2><br>
$_POST
$num = mysqli_real_escape_string($conn,$_POST['userID']);
$name = mysqli_real_escape_string($conn,$_POST['username']);
$email = mysqli_real_escape_string($conn,$_POST['useremail']);
$passwd = mysqli_real_escape_string($conn,$_POST['password1']);
2,通过设置SESSION保存用户的基本信息,实现所有页面共享。SESSION用起来很简单,在代码最前面开启session_start(),然后把想共享的数据保存在
SESSION[′number′]=
S
E
S
S
I
O
N
[
′
n
u
m
b
e
r
′
]
=
num,其他页面要共享该
num变量的时候,只需要在代码最前面开启sessionstart()就可以直接使用
n
u
m
变
量
的
时
候
,
只
需
要
在
代
码
最
前
面
开
启
s
e
s
s
i
o
n
s
t
a
r
t
(
)
就
可
以
直
接
使
用
num变量。
3,cookie,这次没用到,感兴趣的可以查看PHP手册。
项目成果
主页面:
登录页面:
注册页面:
数据库:
页面设计:
个人总结
自己独立完成的第一个小项目,自己动手写下这篇个人的第一篇博客,刚开始一点头绪都没有,项目根本不知道怎么做,博客不知道怎么写,但着手开始做之后开始慢慢了解,慢慢规划问题的整体框架,然后逐步去解决问题。博客写得确实渣,毕竟第一篇博客和第一个项目,但还是坚持写下来了,希望自己以后能多锻炼,能多做项目,然后多写博客,不断提高自己的水平。——路漫漫其修远兮,吾将上下而求索。