跟我一起学写php单文件留言本

原创单文件留言板 gbk版

看了视频教程之后写的留言版

基本涵盖了大部分php基础知识点,变量,常量,循环(if,switch),变量作用域,session,函数,递归函数,安全处理,类,构造函数,静态变量,数据库连接、增加、查询、更新、删除

html的知识点 隐藏表单 js表单验证  页面定时重定向  css悬浮

实现功能:

增加留言  留言删除 翻页 管理员修改密码 基于一个页面实现留言板的完整功能

 

注释比较详细

用户名:admin

密码:123456

<?php

session_start(); //启动会话

/*

* 单文件留言本
* 请注明来自于 PHP100.com

*/

 

//变量 定义、赋值

$db_host = 'localhost:3306'; //设置数据库主机端口号 一般为localhost:3360 通常不需修改

$db_user = 'root'; //设置数据库用户名

$db_pass = 'liujie'; //设置数据库密码

$db_name = 'test'; //设置数据库名称

$db_char = 'GBK'; //设置数据库字符集 默认GBK 通常情况不需修改

 

//定义常量

define('Per_page',6); //定义每页记录数

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh" >

 

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GBK" />

<title>k 留言板</title>

<style>

<!--

body{padding:0;margin:0;height:100%;overflow-y:auto;}

#contain{width:900px;margin:0 auto;}

#hd{width:400px;margin:50px auto;}

.forms{margin:60px auto;width:400px;color:green;font-size:20px;}

.list{width:900px;margin:20px auto;}

.current{color:green;font-size:20px;}

#showmsg {display:none; top:100px; left:300px; width:600px; height:300px;position:fixed;background:#CCF;padding:50px;opacity: 0.9;} /* IE并不认识fixed,而FF认识 */

* html #showmsg {position:absolute;} /* 这个只有IE认识 */

-->

</style>

<script language="javascript">

<!--

//表单验证

function CheckForm(){

if(myform.username.value==""){

alert("请填写用户名");

myform.username.focus();

return false;

}

if(myform.title.value==""){

alert("请填写标题");

myform.title.focus();

return false;

}

if(myform.msg.value.length<5){

alert("留言需要大于5个字符");

myform.msg.focus();

return false;

}

}

function CheckPassword(){

if(repassform.admin_pass.value.length<6){

alert("密码长度大于6");

repassform.admin_pass.focus();

return false;

}

if(repassform.admin_pass.value != repassform.admin_pass2.value){

alert("密码不相同");

repassform.admin_pass2.focus();

return false;

}

 

}

//全选

function checkAll(name)

{

var el = document.getElementsByTagName('input');

var len = el.length;

for(var i=0; i<len; i++)

{

if((el[i].type=="checkbox") && (el[i].name==name))

{

el[i].checked = true;

}

}

}

//取消全选

function clearAll(name)

{

var el = document.getElementsByTagName('input');

var len = el.length;

for(var i=0; i<len; i++)

{

if((el[i].type=="checkbox") && (el[i].name==name))

{

el[i].checked = false;

}

}

}

//反选

function disAll(name)

{

var el = document.getElementsByTagName('input');

var len = el.length;

for(var i=0; i<len; i++)

{

if((el[i].type=="checkbox") && (el[i].name==name) && el[i].checked == true)

{

el[i].checked = false;

}else{

el[i].checked = true;

}

}

}

//-->

 

 

 

</script>

</head>

<body>

<div id="contain">

<div id="hd"><h1>留言板</h1><a href="?">首页</a> <a href="?do=manage">管理</a></div>

<div id="showmsg">

<p id="info" name="info"></p>

<p id="tip" name="tip"></p>

</div>

<script language="javascript">

<!--

//跳转

function Redirect(Url){

window.location = Url;

}

var i = 0;

//显示倒计时

function dis(time){

document.getElementById("tip").innerHTML = "" + (time - i) + "秒后跳转";

i++;

}

//显示提示,定时跳转

function ShowMsg(msg,time,Url){

document.getElementById("showmsg").style.display= "block" ;

document.getElementById("info").innerHTML = msg;

if(time>0 && Url != ''){

timer=setInterval("dis('"+time+"')", 1000);//显示时间

timer=setTimeout("Redirect('"+Url+"')",time * 1000); //跳转

}

}

//-->

</script>

 

<?php

//实例化基础类

$base = new base($db_host,$db_user,$db_pass,$db_name,$db_char);

 

//定义基础类

class base{

private static $conn ;

var $err ;

//php5 构造函数 初始化连接

function __construct($db_host,$db_user,$db_pass,$db_name,$db_char='GBK'){

/*连接数据库& 设置数据库字符集*/

@ $dbo = mysql_connect($db_host,$db_user,$db_pass) or die('请检查是否数据库密码是否正确。');

mysql_select_db($db_name,$dbo) or die ('数据库不存在,请确认是否正确安装');

mysql_query("set names '$db_char'",$dbo);

$this->conn = $dbo;

}

//php4 构造函数

function base($db_host,$db_user,$db_pass,$db_name,$db_char='GBK'){

$this->__construct($db_host,$db_user,$db_pass,$db_name,$db_char);

}

//增加留言

function add(&$data){

$username = $data['username']?$data['username']:'匿名';

$title = $data['title'];

$msg = $data['msg'];

$sql = sprintf("insert into `liuyan` values('','%s','%s','%s','%s')",$username,$title,$msg,time());

mysql_query($sql,$this->conn);

return mysql_insert_id($this->conn);

}

//留言列表

function lists($p=0){

$c = 0;

if($p>0)$c=($p-1) * Per_page;

$limit = " limit ".$c.",".Per_page;

$where = '1';

$r = '';

$sql = sprintf("SELECT * from `liuyan` where '%s' $limit",$where.$limit);

$query = mysql_query($sql,$this->conn);

while($row = mysql_fetch_array($query)){

$r[] = $row;

}

return $r;

}

//统计分页

function page(){

$sql = "select count(id) from `liuyan`";

$query = mysql_query($sql,$this->conn);

$row = mysql_fetch_row($query);

$page['totals'] = $row[0];

$page['nums'] = ceil($row[0]/Per_page);

return $page;

}

//删除留言

function del($id){

$this->check();

 

if(is_array($id)){

$ids .= implode(',',$id);

}else{

$ids = $id;

}

$sql = "delete from `liuyan` where id in($ids)";

mysql_query($sql,$this->conn);

return mysql_affected_rows($this->conn);

}

//登录

function login($admin_name,$admin_pass){

$pass = md5($admin_name.$admin_pass.$admin_name);

$sql="select * from `admin` where `name`='$admin_name' and `pass` = '$pass' ";

$query = mysql_query($sql,$this->conn);

$row = mysql_fetch_array($query);

if($row['id']>0){

$_SESSION=$row;

ShowMsg('登录成功,欢迎管理员'.$_SESSION['name'],3,'?do=manage');

}else{

ShowMsg('登录失败'.$_SESSION['name'],3,'?do=login');

}

}

//密码修改

function repass($admin_name,$admin_pass,$admin_id){

$this->check();

$pass = md5($admin_name.$admin_pass.$admin_name);

$sql = "UPDATE `admin` set name='$admin_name' , pass='$pass' where id=$admin_id";

mysql_query($sql,$this->conn);

return mysql_affected_rows($this->conn);

}

//退出

function logout(){

$this->check();

session_destroy();

}

//检查是否登录

function check(){

if($_SESSION['name'] && $_SESSION['pass']){

//ShowMsg('登录成功,欢迎管理员'.$_SESSION['name'],3,'?do=manage');

}else{

ShowMsg('请先登录'.$_SESSION['name'],3,'?do=login');

}

}

function getErr(){

return $this->err;

}

function setErr(){

$this->err = mysql_error($this->conn);

}

}

 

//安全处理 递归函数

function Post_check($arr){

if(is_array($arr)){

foreach($arr as $n=>$k){

$data[$n] = Post_check($k);

}

}else{

return addslashes(trim($arr));

}

return $data;

}

 

//定时跳转

function ShowMsg($msg,$time=0,$url=''){

echo "<script>ShowMsg('$msg',$time,'$url');</script>";

exit;

}

 

?>

<?php

//流程处理 不同操作显示不同界面

 

$do = $_REQUEST['do'];

 

switch($do){

 

 

 

//添加留言

case 'add':

if($_POST['do'] == 'add'){

$data = Post_check($_POST);

if(@$base->add($data)>1){

echo '留言添加成功';

}else{

echo $base->err;

}

}

break;

 

//删除留言

case 'del':

$data = Post_check($_POST);

$affected_rows=$base->del($data['id']);

if($affected_rows>0){

echo '成功删除'.$affected_rows.'行'.'<a href="?do=manage">返回</a>';

}else{

echo '删除失败';

}

break;

 

 

//管理员修改密码

case 'repass':

$data = Post_check($_POST);

$r = $base->repass($data['name'],$data['admin_pass'],$data['id']);

if($r){

echo '密码修改成功';

}else{

echo '密码修改失败';

}

break;

 

 

//管理员退出登录

case 'logout':

$base->logout();

ShowMsg('成功退出登录'.$_SESSION['name'],3,'?do=');

break;

 

 

 

//管理员登录

case 'login':

 

if($_POST['admin_name'] && $_POST['admin_pass']){

$data = Post_check($_POST);

$base->login($data['admin_name'],$data['admin_pass']);

}

 

?>

<!--登录部分-->

<div class="forms" >

<table>

<form action="" method="post" name="myform" id="myform" onsubmit="return CheckForm();">

<tr><td><label for = "admin_name">管理员:</label><input type="text" id="admin_name" name="admin_name"/></td></tr>

<tr><td>  </td></tr>

<tr>

<td>

<label for = "admin_pass">密  码:</label><input type="password" id="admin_pass" name="admin_pass"/></td></tr>

<tr><td>  </td></tr>

<tr><td colspan="2">

<input type= "submit" value = "登录" />

</form>

</td></tr></table>

</div>

<!--登录部分-->

 

 

<?php

//管理留言

break;

case 'manage':

$base->check();

$p = intval($_GET['p']);

$lists = $base ->lists($p);

if(!$lists){

echo '留言为空';

}else{

 

 

?>

<!--修改密码-->

<div class='admin'>

<form action="" method="post" name="repassform" id="repassform" onsubmit="return CheckPassword();">

<input type = "hidden" id ="do" name = "do" value = "repass" />

<input type = "hidden" id ="id" name = "id" value = "<?php echo $_SESSION['id'];?>" />

<input type = "hidden" id ="name" name = "name" value = "<?php echo $_SESSION['name'];?>" />

<table>

<tr><td>管理员:<?php echo $_SESSION['name'];?></td><td>  <a href="?do=logout">退出</a>    </td><td>新密码:<input type="password" id="admin_pass" name="admin_pass"/></td><td>      </td><td>重复密码:<input type="password" id="admin_pass2" name="admin_pass2"/></td><td>      </td><td><input type= "submit" value = "修改密码" /></td></tr>

</table>

</form>

</div>

<!--修改密码-->

<!--管理列表-->

<div class="list">

<form action="" method="post">

<input type = "hidden" id ="do" name = "do" value = "del" />

<table width="880px">

<tr>

<td width="5%">选择</td><td width="5%">id</td><td width="15%">name</td><td width="15%">title</td><td width="40%">msg</td><td width="15%">time</td>

</tr>

<?php foreach($lists as $row){

?>

<tr><td><input type="checkbox" name="id[]" id="id[]" value="<?php echo $row['id']?>"/></td><td><?php echo $row['id'];?></td><td><?php echo $row['name'];?></td><td><?php echo $row['title'];?></td><td><?php echo $row['msg'];?></td><td><?php echo date("Y-m-d",$row['addtime']);?></td></tr>

<?php

}

?>

<tr>

<td width="5%"><input type="button" value="全选" onclick="checkAll('id[]')" /></td><td width="5%"><input type="button" value="取消" onclick="clearAll('id[]')" /></td><td width="5%"><input type="button" value="反选" onclick="disAll('id[]')" /></td><td width="5%"><input type="submit" value="删除"/></a></td>

</tr>

 

</table>

</form>

<?PHP

}

//分页

$baseurl = '?do=manage&p=';

$pages = $base->page();

echo '共'.$pages['totals'].'条 '.$p.'/'.$pages['nums'].'页';

echo "<a style='margin:0 10px;' href='".$baseurl."0' target='_self'>首页</a>";

for($i=0;$i<3;$i++){

$class='';

$link = 1;

if($p-1>0)$link =$p-1;

$link+=$i;

if($link>$pages['nums'])break;

if($link==$p){

$class="class='current'";

}

echo "<a style='margin:0 10px;' $class href='".$baseurl.$link."' target='_self'>".$link."</a>";

}

echo "<a style='margin:0 10px;' href='".$baseurl.$pages[nums]."' target='_self'>末页</a>";

?>

</div>

<!--管理列表-->

<?php

break;

?>

 

<?php

//默认显示留言列表

default :

$p = intval($_GET['p']);

$lists = $base ->lists($p);

if(!$lists){

echo '留言为空';

}else{

 

 

?>

<div class="list">

<!--留言列表-->

<table width="880px">

<tr>

<td width="5%">id</td><td width="15%">name</td><td width="15%">title</td><td width="50%">msg</td><td width="15%">time</td>

</tr>

<?php foreach($lists as $row){

?>

<tr><td><?php echo $row['id'];?></td><td><?php echo $row['name'];?></td><td><?php echo $row['title'];?></td><td><?php echo $row['msg'];?></td><td><?php echo date("Y-m-d",$row['addtime']);?></td></tr>

<?php

}

?>

</table>

<!--留言列表-->

 

<?PHP

}

//分页部分

$pages = $base->page();

echo '共'.$pages['totals'].'条 '.$p.'/'.$pages['nums'].'页';

echo "<a style='margin:0 10px;' href='?p=0' target='_self'>首页</a>";

//显示当前页,上一页 下一页 并自定义样式

for($i=0;$i<3;$i++){

$class='';

$link = 1;

if($p-1>0)$link =$p-1;

$link+=$i;

if($link>$pages['nums'])break;

if($link==$p){

$class="class='current'";

}

echo "<a style='margin:0 10px;' $class href='?p=$link' target='_self'>".$link."</a>";

}

echo "<a style='margin:0 10px;' href='?p=$pages[nums]' target='_self'>末页</a>";

?>

</div>

<div class="forms" >

<form action="" method="post" name="myform" id="myform" onsubmit="return CheckForm();">

<input type = "hidden"id ="do" name = "do" value = "add" />

<label for = "username">用户</label><input id="username" name="username"/><br/>

<label for = "title">标题</label><input id="title" name="title"/><br/>

<label for = "msg">信息</label><textarea id="msg" name="msg"></textarea>

<input type= "submit" value = "提交" />

</form>

</div>

 

<?php

break;

 

 

}?>

</div>

</body>

</html>

来自 http://www.3oom.com/blog/15.html

时间: 2025-01-29 19:53:44

跟我一起学写php单文件留言本的相关文章

fis入门-单文件编译之文件优化(optimize)

FIS(Front-end Integrated Solution ),是百度的前端集成解决方案.最近几天在研究前端构建的东西,就顺便了解了下,果断各种高大上,可以到FIS官网围观感受一下.如果对fis还不熟悉的童鞋,可以跑下官网的小demo体验一下. 好了,这篇文章不是fis的科普文,官方文档已经挺详细了.这里主要讲下FIS单文件编译的优化(optimize)环节. FIS单文件编译-optimize FIS详细运行原理这里不展开,有兴趣的可以看下官方文档.我们只是简单地看下单文件编译的其中一

mfc-VS2013下MFC单文件工程不知咋的rc被清空了?求原因,最好有解决方案。谢谢大神!

问题描述 VS2013下MFC单文件工程不知咋的rc被清空了?求原因,最好有解决方案.谢谢大神! VS2013下MFC单文件工程不知咋的rc被清空了?求原因,最好有解决方案.谢谢大神! 解决方案 有可能是文件系统本身的破坏,比如计算机没有正常关机,或者被病毒或者恶意程序破坏.也可能是你的误操作,比如删除了什么,或者错误地执行了命令,比如撤销等等. 解决方案二: 如果是学生习作,并且代码不多,有两个办法,一个是再新建一个程序,把你的代码都贴过去,另一个办法是新建一个程序,把它的rc添加到你这个项目

不要再天天写表单了,淘宝大牛教你零基础写PHP扩展

很多PHPer天天写表单,不知如何提升.如果你已经熟悉了数据集和服务器端的优化,不妨试试通过PHP扩展向系统层进军.当原有的PHP代码实现出现性能瓶颈,可以考虑通过PHP扩展实现:纯PHP代码无法实现的功能,可以考虑通过PHP扩展调用其他相关库实现.既能提升业务能力,又能帮助大家逐渐通过扩展了解PHP 源代码层的运作机制. 扩展入门较难,这里特别推荐淘宝大牛信海龙老师的入门课程,手把手教会你只要一块钱. 我们精选出文集中的第二章内容,以供免费试读. (如果你不喜欢付费课程,也可以通过PHP手册第

asp.net单文件带进度条上传的解决方案_实用技巧

最近做项目中遇到很多问题,比如带进度条的文件上传,看了网上很多资料还没找到真正意义上的ASP.NET实现进度条上传(可能是我没找到),下面我来跟大家分享一下我实现的这个程序. 首先看下界面效果,当然你可以完全修改界面为你自己所用. 先解释一下这个程序,该程序采用了jquery框架,实现了小文件上传,不超过80Mb,可以在web.config文件中进行相应的配置,但是有个最大值,具体需要查看msdn.开发环境采用visual studio 2013 .net framework 4.5,运行的时候

问一个web在tomcat中的servlet简单问题,刚学servlet编译一个文件通不过

问题描述 问一个web在tomcat中的servlet简单问题,刚学servlet编译一个文件通不过 在我tomcat中运行后 打开自己编写的一个HelloServlet文件打不开.怎么解决好? 错误500 type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception ja

利用vue写todolist单页应用_javascript技巧

网上有很多关于vue的todolist小程序.大多是利用vue-cli脚手架工具开发的,这个官网的文档也不支持新手从单文件开始学习.所以用大家熟悉的开发方式写了这个todolist,希望和大家一起学习. 1.vue是啥? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.简单说是一个模板引擎,做过后端的应该很清楚,以前靠服务器端渲染的dom,放在浏览器端端渲染,vue拿到数据渲染成dom.当然vue不仅仅是用来干这个的,数据驱动,数据双向绑定,赋予了用户很

用 FileStream BinaryWriter写文件,想写一定的内容后就写到别的文件里,这种怎么处理

问题描述 fStream=newFileStream("d://"+fname+".txt",FileMode.Append);BinaryWriterbW=newBinaryWriter(fStream,Encoding.Unicode);for(ulongval=0;val<totalNumberOfFreeBytes;val=val+512){DriverStream.Position=(int)(val);byte[]bytes=newbyte[512

php单文件版在线代码编辑器

 这篇文章主要介绍了php单文件版在线代码编辑器,个人感觉相当不错,分享给大家,需要的朋友可以参考下     密码加密方式: * md5(自设密码+$ace) //$ace为cdn镜像地址 使用方法: * 1.确认 $pwd 变量值为 false, 上传本文件到PHP空间并访问 * 2.第一次访问提示设置密码,设置密码并牢记 * 3.使用第一次设置的密码登录后,默认编辑的是本php文件, * 4.本文件是编辑器核心文件,请不要随意修改 * 5.保存编辑的文件请用 Ctrl + S 按键组合,等待

csv-CFile写数据到文件中的问题

问题描述 CFile写数据到文件中的问题 使用CFile读写文件,将计算的多个类型结果(有long .int.cstring.double)输入到文本中的一行内,并用","隔开,形成csv格式.例如结果是:文件名:aaa.xxx,eee A:12% B:15% C:35%,D:38%,请教怎么写入文本.难道非要转换格式再输入,就不能像fwite一样一次写入文件中,aaa.xxx A:12% B:15% C:35,D:38%而且还要采用seekend()追加的方式进行吗 解决方案 你要的