PHP康盛Discuz分表模拟实现代码
Discuz!代码大全
[wma]mms:///example.wma[/wma] (嵌入 Windows media 音频)
[wmv]mms:///example.wmv[/wmv] (嵌入 Windows media 音频或视频)
Flash Movie (嵌入 Flash 动画)
效果:
[img=88,31]/admin/img/56.gif[/img] (链接图像并限制大小)
效果:
[swf]:8000/images/banner.swf[/swf] (链接 flash 动画,用法与 [img] 类似)
Flash Movie (嵌入 Flash 动画)
[qq]688888[/qq] (显示 QQ 在线状态,点这个图标可以和他(她)聊天)
[ra]rtsp:///example.ra[/ra] (嵌入 Real 音频)
[rm]rtsp:///example.rm[/rm] (嵌入 Real 音频或视频)
[quote]Discuz! Board 是由康盛创想(北京)科技有限公司开发的论坛软件[/quote] (引用内容,类似的代码还有 [code]
�
效果:只有当浏览者积分高于 20 点时,才显示其中的内容,否则显示为“**** 隐藏信息 积分高于 20 点才能显பைடு நூலகம் ****”
[list]
[*]列表项 #1
[*]列表项 #2
[*]列表项 #3
[/list] (列表)
[fly]This is sample text[/fly] (使内容横向滚动,这个效果类似 HTML 的 marquee 标签,注意:这个效果只在 Internet Explorer 浏览器下有效。)
论坛Discuz代码使用大全
论坛Discuz代码使用2008-08-28 14:211.[b]文字[/b]:在文字的位置可以任意加入您需要的字符,显示为粗体效果。
2.[i]文字[/i]:在文字的位置可以任意加入您需要的字符,显示为斜体效果。
3.[u]文字[/u]:在文字的位置可以任意加入您需要的字符,显示为下划线效果。
4.[align=center]文字[/align]:在文字的位置可以任意加入您需要的字符,center位置center 表示居中,left表示居左,right表示居右。
5.[color=red]文字[/color]:输入您的颜色代码,在标签的中间插入文字可以实现文字颜色改变。
6.[SIZE=数字]文字[/size]:输入您的字体大小,在标签的中间插入文字可以实现文字大小改变。
7.[font=隶书]改变字体[/font]8.[FLY]飞翔的文字[/FLY]:在标签的中间插入文字可以实现文字飞翔效果,类似跑马灯。
9.[MOVE]移动的文字[/MOVE]:在标签的中间插入文字可以实现文字移动效果,来回飘动。
10.[FLIPH]左右颠倒文字[/FLIPH]11.[FLIPV]上下颠倒文字[/FLIPV]12.[GLOW=255,red,2]文字[/GLOW]:在标签的中间插入文字可以实现文字发光特效,glow内属性依为宽度、颜色和边界大小。
13.[BLUR=文字宽度,方向,浓度]模糊文字[/BLUR]14.[SHADOW=255,red,2]文字[/SHADOW]:在标签的中间插入文字可以实现文字阴影特效,shadow内属性依次为宽度、颜色和边界大小。
15.[url=/]/[/url][url=/]康盛创想[/url]:有两种方法可以加入超级连接,可以连接具体地址或者文字连接。
16.[img]图片地址[/img] :在标签的中间插入图片地址可以实现插图效果。
17.[email][url=421121796@]给我发email[/url][/email] 发email给我18.[wmv=360,65,1]视频、mp3文件的链接地址[/wmv]这是论坛最常使用的插入视频或者mp3文件的格式。
用PHP MYSQL 实现论坛里的分级 分页显示
/*存放贴子的表结构------------------------------------------------------create table bbsrow(bbsrow_id int(6) not null auto_increment, //贴子ID号bbsrow_auth varchar(20) not null, //贴子作者bbsrow_parentid int(6), //贴子的父亲贴子ID号,如为首发贴则为空bbsrow_title varchar(200) not null, //贴子标题bbsrow_returncount int(3), //贴子的回复贴数,如果没有回贴则为空primary key (bbsrow_id));-----------------------------------------------------------------------------*///显示儿子贴的递归函数-------------------------------------------------- function showchildren($parent_id){global $connect_id;$query="select * from bbsrow where bbsrow_parentid='" . $parent_id . "'"; $result_top=mysql_query($query,$connect_id);echo "n";while($myrow_child=mysql_fetch_row($result_top)){echo "";echo $myrow_child[0];echo $myrow_child[1];echo $myrow_child[2];echo $myrow_child[3];echo $myrow_child[4] . "n";//如果回复贴数不为空,则表示有儿子贴,继续显示儿子贴if($myrow_child[4]!=''){showchildren($myrow_child[0]);}}echo "";}//----------------------------------------------------------------------//连接数据库并将所有首发贴放到$mainrow数组里----------------------------$connect_id=mysql_connect("localhost","test","test") or die("无法连接数据库"); mysql_select_db("bbs") or die("无法选择数据库");$query="select * from bbsrow where bbsrow_parentid=''";$result=mysql_query($query,$connect_id);$i=0;while($myrow=mysql_fetch_row($result)) {$mainrow[$i][0]=$myrow[0];$mainrow[$i][1]=$myrow[1];$mainrow[$i][2]=$myrow[2];$mainrow[$i][3]=$myrow[3];$mainrow[$i][4]=$myrow[4];$i++;}mysql_free_result($result);//----------------------------------------------------------------------//开始构建分页显示------------------------------------------------------if($currentpage!=""){$page=$currentpage;}else{$page=0;}$pagesize=10;//每页显示的首发贴数!$start=$page*$pagesize;$end=$start+$pagesize;if($end>$i) $end=$i;$totalpage=$i/$pagesize;$info=" 共有" . $i . "条纪录,分" . ceil($totalpage) . "页,当前为第" . ($page+1) . "/" . ceil($totalpage) . "页n";echo $info;if($page>0) $pagestr="上一页";$pagestr=$pagestr . " [第 ";for($i=0;$i<$totalpage;$i++){if($i!=$page){$pagestr=$pagestr . " " . ($i+1) . " ";}else{$pagestr=$pagestr . " " . ($i+1) . " ";}$pagestr=$pagestr . "页]";if($page<$totalpage-1) $pagestr=$pagestr . "下一页n";echo $pagestr;//---------------------------------------------------------------------- //开始分级显示---------------------------------------------------------- echo "n";for($i=$start;$i<$end;$i++){echo "n";echo $mainrow[$i][0];echo $mainrow[$i][1];echo $mainrow[$i][2];echo $mainrow[$i][3];echo $mainrow[$i][4] . "n";//如果回复贴数不为空,则表示有儿子贴,继续显示儿子贴if($mainrow[$i][4]!=''){showchildren($mainrow[$i][0]);}}echo "n";//----------------------------------------------------------------------?>。
实用的PHP实例代码20个2篇
实用的PHP实例代码20个2篇PHP是一种广泛应用于Web开发的脚本语言,具有简单、灵活、易学的特点。
它不仅可以用来开发网站,还可以用来编写各种实用的应用程序。
在本文中,我们将为您介绍20个实用的PHP实例代码和使用场景。
第一篇:1-10个实例1. 文件上传文件上传是Web开发中常用的功能之一。
使用PHP,您可以很容易地实现文件上传功能,从而让用户能够向您的网站或应用程序上传文件。
2. 邮件发送PHP提供了发送电子邮件的功能,您可以使用PHP编写代码来发送电子邮件,例如发送注册确认邮件、找回密码邮件等。
3. 图片缩放PHP提供了强大的图像处理功能,您可以使用PHP来缩放图片,为您的网站或应用程序提供更好的用户体验。
4. 数据库连接在许多Web应用程序中,需要与数据库进行交互。
PHP提供了各种数据库连接操作,您可以使用PHP来连接各种类型的数据库,如MySQL、Oracle等。
5. 表单验证表单验证是保证用户输入数据有效和安全的重要环节。
PHP提供了丰富的表单验证函数,您可以使用PHP来验证用户提交的表单数据,例如检查邮箱格式、密码强度等。
6. 分页功能在处理大量数据时,分页功能非常有用。
使用PHP,您可以轻松地实现分页功能,让用户能够浏览和导航数据的不同页面。
7. 登录认证登录认证是保护网站或应用程序安全的重要步骤。
使用PHP,您可以编写代码来实现用户登录认证功能,例如检查用户名和密码是否匹配等。
8. 数据加密在处理敏感信息时,数据加密是非常重要的。
PHP提供了各种数据加密函数,您可以使用PHP来对敏感数据进行加密和解密。
9. 生成验证码验证码是防止机器人和恶意攻击的有效手段。
使用PHP,您可以生成随机验证码,并将其嵌入到表单中,确保只有人类用户能够提交表单。
10. 数据备份定期数据备份是保证数据安全的重要环节。
使用PHP,您可以编写脚本来自动备份数据库,确保数据的安全可靠。
第二篇:11-20个实例11. 数据导出有时候,需要将数据库中的数据导出为Excel、CSV等格式,以方便进行数据分析或其他用途。
php,分页表格代码
竭诚为您提供优质文档/双击可除php,分页表格代码篇一:php分页代码超强悍,php经典分页代码,php分页,php怎么实现分页功能,php分页//连接数据库,获取数据源,修改成你自己的数据库名字就行$link=mysql_connect("localhost","root ","");mysql_select_db("cjcpzc",$link);mysql_query("setnamesutf8");//执行sql查询..把表名修改成你自己的$sql="select*fromcjcpzc_event";$reault=mysql_query($sql);$rows=mysql_num_rows($reault);//分页大小$pagesize=10;//总页数$pagecount=ceil($rows/$pagesize);//控制当前页(如果为空则设置成为首页,否则获得当前页)if($_get["pagenow"]==null){$pagenow=1;}else{$pagenow=$_get["pagenow"];$pagenow=$pagenow+$_get["o"];//对当前页进行相应控制,if($pagenowif($pagenow>=$pagecount){$pagenow=$pagecount;}//根据当前页进行相应计算$left=($pagenow-1)*$pagesize;$right=$left+$pagesize;}$sql="select*fromcjcpzc_eventlimit$left,$right";//e cho$pagecount;//输出sql语句,你现在就可以看到分页效果啦…..echo$sql;>当前:///设置每一页显示的记录数$conn=mysql_connect("localhost","root","");//连接数据库$rs=mysql_query("selectcount(*)fromtb_product",$con n);//取得记录总数$rs$myrow=mysql_fetch_array($rs);$numrows=$myrow[0];//计算总页数$pages=intval($numrows/$pagesize);//判断页数设置if(isset($_get[page])){$page=intval($_get[page]);}else{$page=1;//否则,设置为第一页}三、创建用例用表mytablecreatetablemytable(idintnotnullauto_increment,news_ titlevarchar(50),news_conttext,add_timedatetime,pRimaRyk ey(id))四、完整代码php分页示例$conn=mysql_connect("localhost","root","");//设定每一页显示的记录数$pagesize=10;mysql_select_db("mydata",$conn);//取得记录总数$rs,计算总页数用$rs=mysql_query("selectcount(*)fromtb_product",$con n);$myrow=mysql_fetch_array($rs);$numrows=$myrow[0];//计算总页数$pages=intval($numrows/$pagesize);if($numrows%$pagesize)$pages++;//设置页数if(isset($_get[page])){$page=intval($_get[page]);}else{//设置为第一页$page=1;}//计算记录偏移量$offset=$pagesize*($page-1);//读取指定记录数$rs=mysql_query("select*frommytableorderbyiddesclim it$offset,$pagesize",$conn);if($myrow=mysql_fetch_array($rs)){$i=0;>标题发布时间do{。
Discuz!源代码分析
Discuz!源代码分析系列(1)--./include/common.inc.php第一个文件当然是分析./include/common.inc.php这个文件,这个是Discuz的核心中的核心,基本上每次操作都include到了这个文件,下面就分七段来分析这个文件:Section One://定义PHP一些环境error_reporting(0); //关闭所有错误提示信息,避免把错误信息泄露给用户。
set_magic_quotes_runtime(0);//关闭magic_quotes_runtime; 参见get_magic_quotes_runtime(), magic_quotes_runtime, magic_quote_gpc.//设置Discuz开始的时间$mtime = explode(' ', microtime());$discuz_starttime = $mtime[1] + $mtime[0];//定义一些常量define('SYS_DEBUG', FALSE);define('IN_DISCUZ', TRUE);define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7)); //获得绝对目录//兼容4.1.0以下版本if(PHP_VERSION < '4.1.0') {$_GET = &$HTTP_GET_V ARS;$_POST = &$HTTP_POST_V ARS;$_COOKIE = &$HTTP_COOKIE_V ARS;$_SERVER = &$HTTP_SERVER_V ARS;$_ENV = &$HTTP_ENV_V ARS;$_FILES = &$HTTP_POST_FILES;}这一段基本上就是设置一下错误报告,把magic_quotes这个sick家伙给关了,然后定一个开始的时间,这样我们在论坛底部看到的Process Time就是通过这个开始的时间和一个结束的时间的差来计算的,然后定义一个IN_DISCUZ为真,这个IN_DISCUZ常量的作用就是在其他inc这样的包含文件中防止被非法引用,一旦没有这个常量的话就出现Access Denied 这样的字样然后退出。
Discuz!论坛系统DIY模块模板使用教程
Discuz!论坛系统DIY模块模板使用教程Discuz!论坛系统DIY模块模板使用教程今天为大家讲解一下在使用DIY过程中的一些技巧与方法仔细阅读,受益匪浅一、如何在模块中增加“标题”及“更多”的链接如下图样式方法:通过框架或模块都可以实现上述样式,我们以框架为例,我们在DIY的时候选中要编辑的框架点击编辑如下图所示之后点击标题在弹出的层中可以添加标题及链接,位置选择居左如下图所示同时可以设置标题的颜色及大小接下来增加“更多”的链接点击弹出层的添加新标题按扭如下图所示,会“复制”出一份新的标题你只需修改就可以了把其中的“精彩教程” 改成“更多” ,链接以及字体、颜色都进行修改就可以了,这里的位置一定要选择“居右”完成,这样框架就有了标题及更多,模块的方法同上二、DIY的模块中如何调整链接的颜色如下图样式方法:选中要修改的模块,点击编辑,选择数据如下图所示在弹出层中选择编辑如下图所示在弹出的层中可以对标题进行加粗、斜体、加下划线、修改颜色等操作完成三、如何在现有的模块中添加新的数据选中要添加数据的模块点击编辑--数据如下图所示在弹出的层中选择任意一条数据点击编辑如下图所示点击编辑后在弹出的层中选择从数据源获取此处可以添写帖子ID、文章ID、日志ID、图片ID 来获取数据如下图所示点击获取会填充模块内相应的数据字段(此处的数据字段会根据模块样式的不同有所变化,请注意)完成四、DIY时如何调用外部程序的数据当我们与第三方程序整合后如何在门户、频道、论坛、或可以DIY的区域调用这些第三方程序的数据首先我们可以在需要调用的地方拖一个展示类中的静态模块如下图所示如上图所示选择数据来源为“自定义HTML”一般第三方系统的数据调用都会有输出JS格式的我们把第三方程序提供的JS代码粘贴进HTML代码框就可以了如下图所示完成五、首页多格或首页四格如何DIY出来我们以论坛首页为例(在任何页面都可以)来制作一个首页四格首先在论坛首页拖一个 1:1的框架如下图所示接下来向已拖好的1-1框架的框架里左侧的1 里面拖入一个1:1的框架如下图所示接下来向右侧的1里面也拖入一个1:1的框架如下图所示接下来我们就可以通过拖拽模块到框架中去了此时我们可以去掉框架的标题,同时为每一个模块增加一个标题如下图所示你可以通过不同的模块样式或者CSS来美化这里完成六、如何修改整个模块的链接样式比如下图方法:选中要编辑的模块,点击编辑--样式进行修改如下图所示以上修改针对整个模块完成七、如何修改两个模块或两个框架之间的距离如下图样式选择要编辑的框架或者模块,点击编辑--样式选择外边距,勾选分别设置,在右边距中写入合适的数字就可以了例如10如下图所示完成后的效果如下图样式全方位立体式讲解DIY技巧集锦第二弹一、DIY中TAB框架如果切换点击方式(鼠标点击与鼠标滑过)如下图中的效果如何实现实现方法:拖一个TAB框架到页面中,点编辑,选择标题如下图所示在弹出的窗口中选择切换类型如下图所示。
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
这篇文章主要给大家介绍了关于thinkphp诸多限制条件下如何getshell的相关资料文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学习吧
discuz源代码详解(3)
discuz源代码详解(3)2009-03-07 13:24以下内容为程序代码:/*** 用来得到上一个页面的地址,也就是来路。
* @para string $default 这个参数是直接设置一个refer,不用判断得到** @return string*/function dreferer($default = '') {global $referer, $indexname;$default = empty($default) ? $indexname : '';if(empty($referer) && isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {$referer = preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);$referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;} else {$referer = dhtmlspecialchars($referer);}if(!preg_match("/(\.php|[a-z]+(\-\d+)+\.html)/", $referer) || strpos($referer, 'logging.php')) {$referer = $default;}return $referer;}以下内容为程序代码:/*** 设置cookie用的,我觉得这个和clearcookies放到一起比较好,不过好像这个是按字母排的…* @para string $var cookie名* @para string $value cookie值* @para int $life 生存时间* @para int $prefix cookie前缀**/function dsetcookie($var, $value, $life = 0, $prefix = 1) {global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;//echo $prefix."--".$var."--".$value."--".$life."--".$cookiepath;setcookie(($prefix ? $cookiepre : '').$var, $value,$life ? $timestamp + $life : 0, $cookiepath,$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);}以下内容为程序代码:/*** 删除论坛的附件用的* @para string $filename 附件名* @para int $havethumb 是否有缩略图* @para int $remote 是否为远程附件**/function dunlink($filename, $havethumb = 0, $remote = 0) {global $authkey, $ftp, $attachdir;if($remote) {require_once DISCUZ_ROOT.'./include/ftp.func.php';if(!$ftp['connid']) {if(!($ftp['connid'] = dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'], $ftp['ssl']))) {return;}}dftp_delete($ftp['connid'], $filename);$havethumb && dftp_delete($ftp['connid'], $filename.'.thumb.jpg');} else {@unlink($attachdir.'/'.$filename);$havethumb && @unlink($attachdir.'/'.$filename.'.thumb.jpg');}}以下内容为程序代码:/*** 生成email连接用的,比如把图片点击可在新窗口打开查看*********************换成:<ahref="mailto:*********************">*********************</a>这样的形式* @para string $email* @para int $tolink*/function emailconv($email, $tolink = 1) {$email = str_replace(array('@', '.'), array('@', '.'), $email);return $tolink ? '<a href="mailto: '.$email.'">'.$email.'</a>': $email;}以下内容为程序代码:/*** 记录错误日志用的* @para string $type 错误类型* @para string $message 错误内容* @para int $halt 发生错误后是不是就马上停止论坛的运行**/function errorlog($type, $message, $halt = 1) {global $timestamp, $discuz_userss, $onlineip, $_SERVER;$user = empty($discuz_userss) ? '' : $discuz_userss.'<br>';$user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];writelog('errorlog',dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));if($halt) {dexit();}}以下内容为程序代码:/*** 判断访问者是不是robot** @return boolean*/function getrobot() {if(!defined('IS_ROBOT')) {$kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';$kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';if(preg_match("/($kw_browsers)/",$_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', FALSE);} elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {define('IS_ROBOT', TRUE);} else {define('IS_ROBOT', FALSE);}}return IS_ROBOT;}以下内容为程序代码:/*** 得到一个文件的扩展名* @para string $filename** @return string*/function fileext($filename) {return trim(substr(strrchr($filename, '.'), 1, 10));}以下内容为程序代码:/*** 用当前时间,会员名,uid,密码,authkey生成一个form hash(哈希)** @return string*/function formhash() {global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;return substr(md5(substr($timestamp, 0, -7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key), 8, 8);}以下内容为程序代码:/*** 生成论坛访问权限的字串,以|隔开* @para string $permstr 访问权限字串** @return string*/function forumperm($permstr) {global $groupid, $extgroupids;$groupidarray = array($groupid);foreach(explode("\t", $extgroupids) as $extgroupid) {if($extgroupid = intval(trim($extgroupid))) {$groupidarray[] = $extgroupid;}}return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);}以下内容为程序代码:/*** 得到用户组,同步groupid和member['groupid'],当会员积分和当前积分不一致更新members表。
BBS论坛界面及代码(毕业设计)
<%'显示发帖者签名%>
</td>
</tr> <%
Rs1.Close Set Rs1 = nothing
'关闭发帖者信息记录集 '释放发帖者信息记录集资源
%>
<tr> <%'如果管理员登录后访问该页面,则显示修改和删除并设置链接%>
<% If Session("flag") > 4 Then %>
<td height="12" colspan="2" bgcolor="#EFEFEF">
Rs1.Open Sql1,conn,3,3
'把取出的记录存放在记录集对象中
%>
<tr align="center">
<td height="120" colspan="2"> <img src="images/<%=Rs1("logo")%>">
<%'显示发帖者头像%>
</td>
</tr>
<tr> <td height="25" align="right">发帖者:</td>
src="Images/reply.gif"
width="72" height="21" border="0" alt="回复此帖"></a>
【模板教程】Discuz X2 模块模板代码详解,DIY更容易!
栏目链接: {caturl}栏目名称: {catname}文章数: {articles}查看数: {viewnum}评论数: {commentnum}
6.文章栏目
特殊指定数据显示内容: [index=N]...[/index]
带链接的标题: <a href=...
可生成缩略图的图片: <img src=...>
当前数据顺序: {currentorder}
当前数据是否在奇数行: {parity}
-------------------------------------------------
居住小区: {residecommunity}体重: {weight}支付宝: {alipay}MSN: {msn}
阿里旺旺: {taobao}兴趣爱好: {interest}昵称: {field2}性别: {gender}交友目的: {lookingfor}
11.静态模块
详见 通用循环内容
群组公共积分: {commoncredits}群组活跃度: {activity}
15.群组活动
活动帖URL: {url}活动标题: {title}主题图片: {pic}活动介绍: {summary}活动时间: {time}
报名截止时间: {expiration}发起人: {author}发起人UID: {authorid}每人花销: {cost}
【模板教程】Discuz X2 模块模板代码详解,DIY更容易!
以下都来源于程序本身,只不过我是提取出来了,更方便大家,,,
discuz的模板制作与源代码分析
discuz的模板制作与源代码分析各位网友,大家好!我是德阳热线论坛管理员()欢迎大家到我站看看,许多使用discuz的人都会自然的想到论坛的风格、样式和模板,如何修改它,如何让它符合心中的要求,相信大家只要对discuz的模板源代码进行钻研的话,那就肯定能够自己独立修改,并且达到自己想要的风格和样式。
但是discuz的源代码极为精简,而且无注释,采用的方法多变,对象、函数等等都不易理解,无疑让大家对模板源代码头痛不已。
俗语说得好,授人以鱼不如授人以渔,我在这里不讲如局具体修改什么,而是讲一讲discuz模板的工作原理和源代码的拆开。
说到模板风格,大家自然想到的就是templates文件夹下的default模板,这里面的文件众多,它是discuz的默认模板。
在这个文件夹里的模板文件很多,最常使用到的,比如说header.htm和footer.htm两个文件,它们分别是论坛的头部和底部,在其它模板里都必须调用这两个文件,是以大家可以看到,在论坛的所有页面里,头部和底部都是相同的。
论坛最常见的三个页面,一个是主页,也就是通常的index.php,还有是主题列表页,以及帖子内容页,下面以index.php来讲述discuz模板的原理以及它牵扯到的文件。
首先我们打开index.php,在这个文件的开头是discuz作者的声明。
然后就是//定义页面define('CURSCRIPT','index');//包含common文件和forum函数库require_once'./include/common.inc.php';require_once DISCUZ_ROOT.'./include/forum.func.php';大家可以看到这里很重要的两句,就是使用require_once函数来包含两个文件,在common.inc.php里存放的是一些常用数据,而在forum.func.php里存放的是有关版块的函数,把这些分离开来单独作为一个文件,是因为这些东西会在多个文件里使用,是以为了循环利用以及代码的精简性,他们被放在一个单独的文件里。
Discuzmoderationincphp数据库注射bug脚本安全电脑资料
Discuz moderation inc php 数据库注射 bug脚本平安电脑资料由于Discuz!d的include/moderation.inc.php存在一个'二次攻击'导致数据库'注射'的bugauthor: 80vul-Bteam:.80vul.一分析在文件include/moderation.inc.php里代码:$threadlist = $loglist = array();if($tids = implodeids($moderate)) {$query = $db->query("SELECT * FROM {$tablepre}threads WHERE tid IN ($tids) AND fid='$fid' AND displayorder>='0' AND digest>='0' LIMIT $tpp");while($thread = $db->fetcharray($query)) {...$threadlist[$thread['tid']] = $thread;...foreach($threadlist as $tid => $thread) {...if($type == 'redirect') {$db->query("INSERT INTO {$tablepre}threads (fid, readperm, iconid, author, authorid, subject, dateline, lastpost, lastposter, views, replies, displayorder, digest, closed, special, attachment)VALUES ('$thread[fid]', '$thread[readperm]','$thread[iconid]', '".addslashes($thread['author'])."','$thread[authorid]', '".addslashes($thread['subject'])."', '$thread[dateline]', '$thread[dblastpost]','$thread[lastposter]', '0', '0', '0', '0', '$thread[tid]', '0', '0')");这个看上去比上面的那个用处大些,其实有很多的限制.首先$thread[lastposter]是从数据库中查询出来的值,有字数限制[不能大于15个字符];其次,这个地方需要版主权限才能操作.二利用新用户,用户名为80vul',发表新回复,然后用拥有版主权限的账号将此帖转移,挪动方式选为[挪动主题并在原来的版块中保存转向],和上面的效果一样,执行时数据库报错了:)三补丁[fix]等待官方补丁.。
Discuz之论坛模块通用函数集合function_forum详解
Discuz之论坛模块通用函数集合function_forum详解** @param $uid - 用户ID* @param $size - 头像大小 small/middle/big* @param $returnsrc - 是否返回头像地址*/function discuz_uc_avatar($uid, $size = '', $returnsrc = FALSE) { ......}======1======/*** 论坛附件删除* @param $attach - 单一附件数据*/function dunlink($attach) {......}======2======/**权限表达式* @param $formula - 权限表达式*/function formulaperm($formula) {......}======3======/**勋章权限表达式* @param $formula - 勋章权限表达式* @param $type - 1 权限验证 2 勋章字串*/function medalformulaperm($formula, $type) {......======4======/*** vip用户购买组权限是否到期* @param $terms 期限来源于 memberfields 表的 groupterms 字段* @return 返回过期信息*/function groupexpiry($terms) {......}======5======/*** 返回当前链接的域名* @return 返回域名*///清理到程序中function site() {return $_SERVER['HTTP_HOST'];}======6======/*** 显示主题分类* @param $curtypeid - 当前被选择的类型id* @return 返回的HTML数据*///使用较少function typeselect($curtypeid = 0) { ......}============/*** 更新管理者状态* @param $modacton - 动作* @param $smcols - 执行次数*/function updatemodworks($modaction, $posts = 1) { ......}======8======/*** 格式化一个sql语句,通常用于update操作** @param string $fieldname 字段名称* @param int $position 位置* @param int $value 数值 0|1* @return string*/function buildbitsql($fieldname, $position, $value) {......}======9======/*** 依据 tid 或者 fid ,自动取得 $_G['forum'] 或 $_G['thread'] 数据* @global*/function loadforum() {......}======10======** @param $tid 主题id* @param $fields 取用主题表的字段,默认 "*"* @param $addcondiction 除 tid='$tid' 以外的其他条件, 默认空 * @param $forcetableid 是否强制只从某个分表中取得 thread, 默认null* @return array 当有合法数值返回的时候, 将自动追加2个key 值threadtable, posttable 记录此主题使用的分表名称*/function get_thread_by_tid($tid, $fields = '*', $addcondiction = '', $forcetableid = null) {......}======11======/*** 依据 pid 和其他条件,从某个post数据表中取回post信息* @global $_G* @param $pid 帖子id* @param $fields 帖子表字段,默认 ** @param $addcondiction 其他条件,默认空* @param $forcetable 是否强制使用某个分表, 支持: 使用id: 0 1 2 或者 p(主表), a(副表) 或者直接制定表名 forum_post_1* @return array*/function get_post_by_pid($pid, $fields = '*', $addcondiction = '', $forcetable = null) {......}======12======/**是否有查看版块 RSS 的权限*/function rssforumperm($forum) {......}======13======/*** upload_icon_banner上传群组/版块图片* $forum中 fid和status 必须存在,status判断是群组还是版块图片,以存入不同目录* $file上传时的$_FILES* $type icon 或 banner*/function upload_icon_banner(&$data, $file, $type) {......}======14======/**用于 archiver 环境下的分页*/function arch_multi($total, $perpage, $page, $link) {......}======15======/**archiver 模板路径*/function loadarchiver($path) {......======16======/*** update_threadpartake 按参与人次更新主题热度function update_threadpartake($tid) {......}======17======/*** 获取帖子封面地址** @param int $tid* @param int $cover 负数时表示是远程,正数为本地没有值表示只取filename*/function getthreadcover($tid, $cover = 0, $getfilename = 0) { ......}======18======/***添加主题标签** @param $tags* @param $itemidfunction addthreadtag($tags, $itemid , $typeid = 'tid') { ......}======19======/***修改主题标签** @param $tags* @param $itemid* @returnfunction modthreadtag($tags, $itemid) { ......}======20======/*** 将未使用的附件转为已使用状态* @param $aid* @param $tid* @param $pid*/function convertunusedattach($aid, $tid, $pid) { ......}======21======/*** 更新附件的 TID 值* @param $where 条件* @param $oldtid 旧 TID* @param $newtid 新 TID*/function updateattachtid($where, $oldtid, $newtid) { ...... }======22======/**插入一个帖子*/function insertpost($data) {......}======23======/*** 更新POST* @global $_G* @param array $data 更新的数据* @param string/array $condition 条件* @param bool $unbuffered 是否即时返回* @param int $posttableid post分表ID* @return int 返回的更新的记录数*/function updatepost($data, $condition, $unbuffered = false, $posttableid = false) {......}。
Discuz!代码大全
论坛主管理员必备大家在论坛发表主题或回帖时,经常要用到DISCUZ代码,本文就常用的DISCUZ代码作一个介绍,大家不妨试一试:Discuz! 代码是一个HTML 代码的简化版本,来简化对帖子显示格式的控制。
1、字体加粗代码:[ b ]字体加粗[ /b ] 效果:字体加粗===========================2、斜体文字代码:[ i ]斜体文字[ /i ] 效果:斜体文字===========================3、下划线文字代码:[ u ]下划线文字[ /u ] 效果:下划线文字===========================4、字体颜色代码:[ color=red ]字体颜色[ /color ] 效果:字体颜色说明:"color=red"等号后面的是颜色的英文单词,类似的还有蓝色:blue、绿色:green、粉色:pink、灰色:gray 等,同样也可以使用颜色的16进制代码,比如"FF6600"5、字体大小代码:[ size=3 ]字体大小为3[ /size ] 效果:字体大小为3 说明:本论坛字体大小范围是从"1"——"7"。
6、改变字体代码:[ font=黑体]字体为黑体[ /font ] 效果:字体为黑体说明:"font=黑体"等号后面的为字体名字,字体必需使用论坛已用的字体库,否则无法辨认。
论坛的中文字体默认为宋体,英文字母默认字体为Tahoma。
各支持字体效果如下:QUOTE: 宋体黑体Arial Book Antiqua Century Gothic Courier New Georgia Impact Tahoma Times New Roman Verdana ==================================7、对齐格式代码:[ align=center ]居中对齐[ /align ] 效果:居中对齐说明:"align="等号后面是对齐格式,左对齐为left,居中为center,右对齐为right。
PHP论坛实现积分系统的思路代码详解
PHP论坛实现积分系统的思路代码详解⾸先在⽤户表定义⼀个积分字段;然后创建⼀个等级表,主要字段有等级名,上限积分和下限积分;再根据⽤户的⾏为进⾏积分累加;最后根据判断⽤户积分在哪个等级范围,从⽽得出⽤户等级。
⽤户表CREATE TABLE `bbs`.`user`(`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT comment '⽤户id',`avatar` VARCHAR(255) NOT NULL comment '头像',`nickname` VARCHAR(60) NOT NULL comment '昵称',`username` VARCHAR(16) NOT NULL comment '⽤户名',`password` CHAR(32) NOT NULL comment '密码',`points` INT(10) NOT NULL DEFAULT '0' comment '积分',PRIMARY KEY(`id`)) ENGINE = MYISAM;等级表CREATE TABLE `bbs`.`level`(`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT comment '等级id',`name` VARCHAR(60) NOT NULL comment '等级名',`max_points` INT(10) UNSIGNED NOT NULL comment '积分上限',`min_points` INT(10) UNSIGNED NOT NULL comment '积分下限',PRIMARY KEY(`id`)) ENGINE = MYISAM;ps:下⾯看下thinkphp删除图⽚的⽅法实现使⽤场景:新头像替换旧的头像步骤:1. 读取数据库头像的URL地址2. 获取URL地址的有效字段3. file⽂件路径设置4. 删除图⽚⽂件Thinkphp 代码如下:<?phppublic function delPic(){//获取⽤户id$uid = input('uid');if(!$uid){$this->error('uid未获取');}//获取url$img = M('member')->where('uid',$uid);$url = $img->avatar; //$url = '/up/avatar/59b25bcfcaac6.jpg'if(!$url){$this->error('获取头像失败');}//获取url有效字段(去掉⽹址)$str = parse_url($url)['path'].parse_url($url)['query'];//$str = '/up/avatar/59b25bcfcaac6.jpg'//file⽂件路径$filename = '.'.$str;//删除if(file_exists($filename)){unlink($filename);$info = '原头像删除成功';}else{$info = '未找到原头像'.$filename;}echo $info;}总结到此这篇关于PHP论坛实现积分系统的思路代码详解的⽂章就介绍到这了,更多相关php论坛积分系统内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
PYTHON实现DISCUZ论坛的自动POST登录发贴回帖
PYTHON实现DISCUZ论坛的⾃动POST登录发贴回帖#-*-coding:utf-8-*-import urllib2, urllib, cookielibimport reimport getpassimport sqlite3import randomimport timeclass Discuz:def__init__(self,user,pwd,args):ername = userself.password = pwdself.args = argsself.regex = {'loginreg':'','replyreg':'','tidreg': '[\s\S]+?'}self.conn = Noneself.cur = Noneself.islogin = Falseself.login()self.InitDB()def login(self):try:loginPage = urllib2.urlopen(self.args['loginurl']).read()formhash = re.search(self.regex['loginreg'], loginPage)formhash = formhash.group(1)#print 'login formhash:', formhashprint'start login...'cj = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 \(compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.507'opener.addheaders = [('User-agent', user_agent)]urllib2.install_opener(opener)logindata = urllib.urlencode({'cookietime': 2592000,'formhash': formhash,'loginfield':'username','username': ername,'password': self.password,'questionid': 0,'referer': self.args['referer']})request = urllib2.Request(self.args['loginsubmiturl'],logindata)response = urllib2.urlopen(request)self.islogin = Trueprint'login success...'except Exception,e:print'loggin error: %s'% edef PostReply(self, fid, tid, content):try:sql = "select * from post where fid='%s' and tid='%s'"%(fid,tid)self.cur.execute(sql)if self.cur.rowcount == -1:tidurl = self.args['tidurl']% tidreplysubmiturl = self.args['replysubmiturl']%(fid,tid)tidPage = urllib2.urlopen(tidurl).read()formhash = re.search(self.regex['replyreg'], tidPage)formhash = formhash.group(1)#print 'reply formhash:', formhashprint'start reply...'replydata = urllib.urlencode({'formhash': formhash,'message': content,'subject': '','usesig':'1'})request = urllib2.Request(replysubmiturl,replydata)response = urllib2.urlopen(request)sql = "insert into post values ('%s', '%s', '%d')"%(fid, tid, 1)self.cur.execute(sql)mit()print'reply success for [%s]'% tidurlelse:print'Skip! Thread:%s is already replied...'% tidexcept Exception, e:print'reply error: %s'% edef GetTids(self, fid):if self.islogin:fidurl = self.args['fidurl']% fidresponse = urllib2.urlopen(fidurl)content = response.read()tids = re.findall(self.regex['tidreg'], content)return tidselse:print'Error Please Login...'-下⾯简单说下过程:⾸先是得到了login的post地址:/logging.php?action=login&loginsubmit=yes ⼏个关键的parameter是。
PHP 查询多级分类的实例程序代码
PHP 查询多级分类的实例程序代码本文章来给大家介绍一个PHP 查询多级分类的实例程序代码,有需要了解的同学可进入参考。
分类表,比如category,字段有id,parentid,title查询时,我们希望得到有层级关系的数组,就是顶级是顶级分类,然后每个分类中有个children子数组,记录它的子分类,这样一级一级的分级数组。
代码如下代码如下//查询//一览()$dsql->SetQuery("SELECT * FROM category ORDER BY sortorder ASC");$dsql->Execute('parentlist');$array = array();$parentlist = array();while ($rs=$dsql->getObject('parentlist')){if($rs->parentid == 0){$parentlist[$rs->id] = (array)$rs;}else{$array[$rs->id] = (array)$rs;}}$parentlist = cat_options($parentlist, $array); //我们求的结果数组//$list父级分类的数组//$array是除父级分类外的全部分类的数组function cat_options(&$list,&$array){foreach ($list as $key => $arr){foreach ($array as $k => $value){if($value['parentid'] == $arr['id']){$list[$key]['children'][] = $value;unset($array[$k]);}}}foreach ($list as $key => $arr){if(is_array($arr['children']) && count($arr['children']) > 0){$list[$key]['children'] = cat_options($list[$key]['children'], $array);}}return $list;}好了现在给大家推荐一个无限分类的函数代码如下<?php//模拟PHP无限分类查询结果return array(array(‘id’=>1,‘pid’=>0,‘name’=>‘主页’),array(‘id’=>2,‘pid’=>0,‘name’=>‘新闻’),array(‘id’=>3,‘pid’=>0,‘name’=>‘媒体’),array(‘id’=>4,‘pid’=>0,‘name’=>‘下载’),array(‘id’=>5,‘pid’=>0,‘name’=>‘关于我们’),array(‘id’=>6,‘pid’=>2,‘name’=>‘天朝新闻’),array(‘id’=>7,‘pid’=>2,‘name’=>‘海外新闻’ ),array(‘id’=>8,‘pid’=>6,‘name’=>‘州官新闻’ ),array(‘id’=>9,‘pid’=>3,‘name’=>‘音乐’ ),array(‘id’=>10,‘pid’=>3,‘name’=>‘电影’ ),array(‘id’=>11,‘pid’=>3,‘name’=>‘小说’ ),array(‘id’=>12,‘pid’=>9,‘name’=>‘铃声’ ),array(‘id’=>13,‘pid’=>9,‘name’=>‘流行音乐’ ),array(‘id’=>14,‘pid’=>9,‘name’=>‘古典音乐’ ),array(‘id’=>15,‘pid’=>12,‘name’=>‘热门铃声’),array(‘id’=>16,‘pid’=>12,‘name’=>‘搞笑铃声’ ),array(‘id’=>17,‘pid’=>12,‘name’=>‘MP3铃声’ ),array(‘id’=>18,‘pid’=>17,‘name’=>‘128K’),array(‘id’=>19,‘pid’=>8,‘name’=>‘娱乐新闻’ ),array(‘id’=>20,‘pid’=>11,‘name’=>‘穿越类’),array(‘id’=>21,‘pid’=>11,‘name’=>‘武侠类’),);?>无限分类函数代码如下<?php/*** Tree 树型类(无限分类) * @version 1.0* @access public* @example* $tree= new Tree($result);* $arr=$tree->leaf(0);* $nav=$tree->navi(15);*/class Tree {private $result;private $tmp;private $arr;private $already = array();/*** 构造函数** @param array $result 树型数据表结果集* @param array $fields 树型数据表字段,array(分类id,父id)* @param integer $root 顶级分类的父id*/public function __construct($result, $fields = array('id', 'pid'), $root = 0) { $this->result = $result;$this->fields = $fields;$this->root = $root;$this->handler();}/*** 树型数据表结果集处理*/private function handler() {foreach ($this->result as $node) {$tmp[$node[$this->fields[1]]][] = $node;}krsort($tmp);for ($i = count($tmp); $i > 0; $i--) {foreach ($tmp as $k => $v) {if (!in_array($k, $this->already)) {if (!$this->tmp) {$this->tmp = array($k, $v);$this->already[] = $k;continue;} else {foreach ($v as $key => $value) {if ($value[$this->fields[0]] == $this->tmp[0]) {$tmp[$k][$key]['child'] = $this->tmp[1];$this->tmp = array($k, $tmp[$k]);}}}}}$this->tmp = null;}$this->tmp = $tmp;}/*** 反向递归*/private function recur_n($arr, $id) {foreach ($arr as $v) {if ($v[$this->fields[0]] == $id) {$this->arr[] = $v;if ($v[$this->fields[1]] != $this->root) $this->recur_n($arr, $v[$this->fields[1]]);}}}/*** 正向递归*/private function recur_p($arr) {foreach ($arr as $v) {$this->arr[] = $v[$this->fields[0]];if ($v['child']) $this->recur_p($v['child']);}}/*** 菜单多维数组** @param integer $id 分类id* @return array 返回分支,默认返回整个树*/public function leaf($id = null) {$id = ($id == null) ? $this->root : $id;return $this->tmp[$id];}/*** 导航一维数组** @param integer $id 分类id* @return array 返回单线分类直到顶级分类*/public function navi($id) {$this->arr = null;$this->recur_n($this->result, $id);krsort($this->arr);return $this->arr;}/*** 散落一维数组** @param integer $id 分类id* @return array 返回leaf下所有分类id*/public function leafid($id) {$this->arr = null;$this->arr[] = $id;$this->recur_p($this->leaf($id));return $this->arr;}}?>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<?phpheader("content-type:text/html;charset=utf-8");define("PerTable",4);if(!defined("PerTable"))exit("程序不能正常运行。
");/*** 基础分表类,存在当数据删除后,原表容量不足的缺陷,* 建议新增可调整各表容量的方法,修改相应表映射关系。
* @author Jiang QQ:312036773* @access public* @version 1.0.0* @copyright .com*/class CarveTable{private $mysqli;private $table;/*** 构造函数* @param String $table* @return void*/function __construct($table){$this->table = $table;$this->mysqli=new mysqli("localhost","root","1006","test");$Utf8Sql="set names utf8;";$this->mysqli->query($Utf8Sql);$initTableSql = "create table if not exists $this->table(`id` tinyint not null auto_increment primary key,`name` char(255) not null);";$this->mysqli->query($initTableSql);$initMapSql = "create table if not exists map_$this->table(`rid` tinyint not null auto_increment primary key,`name` char(255) not null);";$this->mysqli->query($initMapSql);$initMapInsertSql = "insert into map_$this->table (`name`)select '$this->table' from dualwhere not exists(select * from map_$this->tablewhere map_$this-> = '$this->table');";$this->mysqli->query($initMapInsertSql);}/*** 区间定位获取数据* @param Integer $minId 最小ID* @param Integer $maxId 最大ID* @return Array*/function getScopeInfo($minId = 1,$maxId = null){$mapBeginNum = ceil($minId/PerTable);if($maxId != null){$mapEndNum = ceil($maxId/PerTable);$targetTablesResult = $this->mysqli->query("select name from map_$this->tablewhere rid between $mapBeginNum and $mapEndNum");}$targetTablesResult = $this->mysqli->query("select name from map_$this->tablewhere rid >=$mapBeginNum;");while($row = $targetTablesResult->fetch_assoc()){if($maxId != null)$realSql = "select * from {$row['name']} where id between $minId and $maxId;";else$realSql = "select * from {$row['name']} where id>=$minId";$dataSource=$this->mysqli->query($realSql);while($row = $dataSource->fetch_assoc()){$result[] = $row;}}return $result;}/*** 根据Map_表快速定位数据* @param Integer $id* @return Array*/function getInfo($id){$targetTable = ceil($id / PerTable) ;$findTableSql = "select name from map_$this->table where rid=$targetTable";$tableRow = $this->mysqli->query($findTableSql)->fetch_row();$result = $this->mysqli->query("select * from $tableRow[0] where id=$id;")->fetch_assoc();return $result;}/*** 删除某一指定数据* @param Integer $id* @return Boolean*/function delInfo($id){$targetTable = ceil($id / PerTable) ;$findTableSql = "select name from map_$this->table where rid=$targetTable";$tableRow = $this->mysqli->query($findTableSql)->fetch_row();$this->mysqli->query("delete from $tableRow[0] where id=$id;");if($this->mysqli->affected_rows > 0)return true;elsereturn false;}/*** 分表方式增加数据* @param String $post* @return Boolean*/function addData($post){$getTableSql="SELECT table_name FROMinformation_schema.TABLESWHERE table_name like '$this->table%'order by create_time desc limit 0,1";$target_table=$this->mysqli->query($getTableSql)->fetch_row();$getCount = $this->mysqli->query("select count(`id`) from $target_table[0];")->fetch_row();$insertSql = "insert into $target_table[0] (`name`) values ('$post');";if($getCount[0] == PerTable){$newTable = $this->table . "_" . time();$createTableSql = "create table $newTable like $this->table;";$this->mysqli->query($createTableSql);$startId = $this->mysqli->query("select id from $target_table[0] order by id desc limit 0,1;")->fetch_row();$this->mysqli->query("insert into $newTable(`id`,`name`) values($startId[0] + 1,'$post');");$insertMapSql = "insert into map_$this->table (`name`) values ('$newTable');";$this->mysqli->query($insertMapSql);}else$this->mysqli->query($insertSql);if($this->mysqli->affected_rows >0)return true;elsereturn false;}}。