[PHP100]留言板(一)
[实例]我的留言板
** 文件结构:
conn.php
// 数据库配置
add.php
// 操作文件
list.php
//列表文件
** 步骤
建立数据库:
phpmyadmin:
建立数据库(数据库名):php100_bbs
执行建表SQL:
message table:
********这里必须要注意了, 我原来都不知道, 闹笑话了*********
*********包裹 表名/字段名等等 的 根本 不是 引号(单引号/双引号都不是)***************
********* 那是 短浪线 (我靠, 这么奇葩!!!) ************
create table 'message'{
'id' tinyint(1) not null auto_increment,
'user' varchar(25) not null, # 留言者
'title' varchar(50) not null, # 留言的标题
'content' text not null,
'lastdate' date not null,
primary key('id'),
} engine=InnoDB default charset=utf-8 auto_increment=1;
*******
// 正确的SQL
CREATE TABLE IF NOT EXISTS `message` (
`id` tinyint(1) NOT NULL AUTO_INCREMENT,
`user` varchar(25) NOT NULL,
`title` varchar(50) NOT NULL,
`content` text NOT NULL,
`lastdate` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
(这是一个简单的实例, 所以数据库可以和PHP代码同时书写)
*** 下面 去建立连接php(conn.php)
<?php
//连接数据库
// @是忽略错误
$conn=@ mysql_connect("localhost","root","") or die("数据库不存在");
// 打开 数据库(传 库名)
mysql_select_db("ph100_bbs");
// 设置中文编码
// mysql_query("set names 'GBK'"); // 使用GBK中文编码
// echo $conn;
*** 之后, 建立增加留言的php(add.php)
执行 数据插入SQL:
<?php
header("content-type:text/html;charset=utf-8");
// 导入 连接数据库文件
include("conn.php");
// 最后, 这里用来处理提交
if (isset($_POST['sub'])) {
$sql="insert into message(id,user,title,content,lastdate) values('' ,'{$_POST['user']}','{$_POST['title']}' ,'{$_POST['content']}',now() )";
//注意看$_POST数组的调用格式,里面的索引还是需要用单引号的啊;
// 最后一个参数now() , 是mysql系统函数,到DBMS上才能正确执行;
// echo $sql;
$result=mysql_query($sql) // 成功后, 返回值>1
or die("Invalid query: " . mysql_error());
}
?>
<!-- 下面需要一个表单, 用于提交 -->
<form action="add.php" method="post">
用户:<input type="text" name="user"><br>
标题:<input type="text" name="title"><br>
内容:<textarea name="content"></textarea><br>
提交按钮<input type="submit" name="sub" value="发布留言">
</form>
***********list.php********************
<?php
header("content-type:text/html;charset=utf-8");
// echo "中文";
include("conn.php");
?>
<table width=500 border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
<?php
$query=mysql_query("select * from message");
while($line=mysql_fetch_array($query))
{
?>
<tr bgcolor="#eff3ff">
<td>标题:<?php echo $line["title"]; ?></td><td>用户:<?php echo $line["user"]; ?></td>
</tr>
<tr bgcolor="#ffffff">
<td colspan="2">内容:<?php echo $line["content"]; ?></td>
</tr>
<?php
}
?>
<!-- // 看到这里你就应该知道啦,嵌入的PHP现在就是放在这个括号组(<?PHP ?>)中才好使!!! -->
</table>
************************留言板 二 **********************************************
留言板二期知识点:(细节方面)
1. 提交表单Javascript验证
提交表单的时候, 可能有些字段不能为空,可以通过pHP,也可以通过js减轻服务器压力.
<form... name="myform" onsubmit="return CheckPost();">
<script language="javascript">
function CheckPost(){
if(myform.user.value==""){
...
myform.user.focus();
return false;
}
if(myform.title.value.length<5){
...
}
...
}
2. str_replace替换函数
str_replace(被替换值, 替换的值, 被替换的内容)
/*
输入框中的回车\n不是html中的<br>;
输入框空格不是html中的
所以要替换掉
*/
function htmltocode($content){
$content=str_replace(" "," ",$content);
$content=str_replace("\n","<br>",$content);
return $content;
}
3. htmlspecialchars格式化html
功能:将html格式化, 防止在输出时被浏览器执行
htmlspecialchars(要格式化的对象, 定义单双引号, 编码)
4. md5加密函数
md5(加密对象)
5. COOKIE的使用和登陆
cookie的机制
保存在客户端的
setcookie("TEST","value",3600,"/dir",".domains.com",true)
test:cookie名
value: cookie值
3600: 保存时间
/dir: 保存路径
.domains.com: 起效域名**
true: http发送
注意: 刚设置的cookie不能当场生效, 需要刷新一次
实例演示部分:
在原页面加入导航(head.php文件)
登陆页面:
一个form提交表单的页面,然后用cookie记录登陆状态.
<!-- login.php -->
<?php include("conn.php"); include("head.php"); if (isset($_GET["out"])) { //清楚cookie setcookie("cookie","out"); //刷新页面 echo "<script language=\"javascript\">location.href='login.php';</script>"; // location是一种windows对象 // href是location对象的属性 } if (isset($_POST['submit'])) { if ($_POST['id']=='admin') { $pw=md5($_POST['pw']); // md5加密的结果 是一样的. if ($pw=="6e0eba50b4fae046faad673c1e18a2d9") { setcookie("cookie","ok"); echo "<script language=\"javascript\">location.href='login.php';</script>";// 这句话是为了让页面刷新 // 所以重新载入当前页面 } } } // echo md5("l12abc"); if($_COOKIE['cookie']!='ok'){ ?> <script language="javascript"> function checkLogin(){ if (loginform.id.value=="") { alert("用户名不能为空"); loginform.id.focus(); return false; }; if (loginform.pw.value=="") { alert("密码不能为空"); loginform.pw.focus(); return false; }; } </script> <form action="" method="post" name="loginform" onsubmit="return checkLogin();"> ID: <input type="text" name="id"><br> PW: <input type="password" name="pw"><br> <input type="submit" name="submit" value="登陆"> </form> <?php }else{ ?> <a href="?out=login">锐出</a> <?php } ?>
<!-- list.php --> <?php // header("content-type:text/html;charset=utf-8"); // echo "中文"; /* [实例]我的留言板 ** 文件结构: conn.php // 数据库配置 add.php // 操作文件 list.php //列表文件 ** 步骤 建立数据库: phpmyadmin: 建立数据库(数据库名):php100_bbs 执行建表SQL: message table: ********这里必须要注意了, 我原来都不知道, 闹笑话了********* *********包裹 表名/字段名等等 的 根本 不是 引号(单引号/双引号都不是)*************** ********* 那是 短浪线 (我靠, 这么奇葩!!!) ************ create table 'message'{ 'id' tinyint(1) not null auto_increment, 'user' varchar(25) not null, # 留言者 'title' varchar(50) not null, # 留言的标题 'content' text not null, 'lastdate' date not null, primary key('id'), } engine=InnoDB default charset=utf-8 auto_increment=1; ******* // 正确的SQL CREATE TABLE IF NOT EXISTS `message` ( `id` tinyint(1) NOT NULL AUTO_INCREMENT, `user` varchar(25) NOT NULL, `title` varchar(50) NOT NULL, `content` text NOT NULL, `lastdate` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; (这是一个简单的实例, 所以数据库可以和PHP代码同时书写) *** 下面 去建立连接php(conn.php) *** 之后, 建立增加留言的php(add.php) 执行 数据插入SQL: */ /**/ include("conn.php"); include("head.php"); ?> <table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef"> <?php $query=mysql_query("select * from message"); while($line=mysql_fetch_array($query)) { ?> <tr bgcolor="#eff3ff"> <td>标题:<?php echo $line["title"]; ?></td><td>用户:<?php echo $line["user"]; ?></td> </tr> <tr bgcolor="#ffffff"> <td colspan="2">内容:<?php echo tohtmlcode($line["content"]); ?></td> </tr> <?php } ?> <!-- // 看到这里你就应该知道啦,嵌入的PHP现在就是放在这个括号组(<?PHP ?>)中才好使!!! --> </table>
<!-- add.php --> <?php // header("content-type:text/html;charset=utf-8"); // 导入 连接数据库文件 include("conn.php"); // 最后, 这里用来处理提交 if (isset($_POST['sub'])) { $c=tohtmlcode($_POST['content']); $sql="insert into message(id,user,title,content,lastdate) values('' ,'{$_POST['user']}','{$_POST['title']}' ,'{$_POST['content']}',now() )"; //注意看$_POST数组的调用格式,里面的索引还是需要用单引号的啊; // 最后一个参数now() , 是mysql系统函数,到DBMS上才能正确执行; // echo $sql; $result=mysql_query($sql) // 成功后, 返回值>1 or die("Invalid query: " . mysql_error()); } include("head.php"); ?> <script language=javascript> function checkPost(){ if (myform.user.value=="") { alert("请填写用户名"); myform.user.focus(); return false; }; if (myform.title.value.length<5) { alert("标题不能少于5个字符"); myform.title.focus(); return false; }; if (myform.content.value=="") { alert("必须填写内容"); myform.content.focus(); return false; }; } </script> <!-- 下面需要一个表单, 用于提交 --> <form action="add.php" method="post" name="myform" onsubmit="return checkPost();"> 用户:<input type="text" name="user"><br> 标题:<input type="text" name="title"><br> 内容:<textarea rows="30" cols="80" name="content"></textarea><br> 提交按钮<input type="submit" name="sub" value="发布留言"> </form>
<!-- conn.php --> <?php //连接数据库 // @是忽略错误 $conn=@ mysql_connect("localhost","root","") or die("数据库不存在"); // 打开 数据库(传 库名) mysql_select_db("ph100_bbs"); // 设置中文编码 // mysql_query("set names 'GBK'"); // 使用GBK中文编码 // echo $conn; /* 保存到数据库中的空格和回车都没问题, 问题是显示的html中有不同 所以在显示的时候转换它们就可以了 */ function tohtmlcode($content){ return str_replace("\n", "<br>", str_replace(" ", " ", $content)); }
<!-- head.php - 用于制作导航功能 --> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title></title> <link rel="stylesheet" href="images/css.css" type="text/css"> <b> <a href="add.php">添加留言</a> | <a href="list.php">浏览留言</a> | <a href="login.php">登陆</a> </b> <hr size=1>