Emlog教程 - 添加评论人等级输出 emlog

首先在module.php中添加以下函数


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//comment:输出评论人等级
function echo_levels($comment_author_email,$comment_author_url){
$DB = MySql::getInstance();
$adminEmail = '"[email protected]"';
if($comment_author_email==$adminEmail)
{
echo '<sy id="ys">(管理员)</sy>';
}
$sql = "SELECT cid as author_count,mail FROM emlog_comment WHERE mail != '' and mail = $comment_author_email and hide ='n'";
$res = $DB->query($sql);
$author_count = mysql_num_rows($res);
if($author_count>=0 && $author_count<5 && $comment_author_email!=$adminEmail)
echo '<sy id="ya">(打酱油的)</sy>';
else if($author_count>=5 && $author_count<10 && $comment_author_email!=$adminEmail)
echo '<sy id="yb">(匆匆过客)</sy>';
else if($author_count>=10 && $author_count<20 && $comment_author_email!=$adminEmail)
echo '<sy id="yc">(新生入住)</sy>';
else if($author_count>=20 && $author_count<30 && $comment_author_email!=$adminEmail)
echo '<sy id="yd">(常住住户)</sy>';
else if($author_count>=30 &&$author_count<40 && $comment_author_email!=$adminEmail)
echo '活跃住户';
else if($author_count>=40 && $author_coun<50 && $comment_author_email!=$adminEmail)
echo '积极住户';
else if($author_count>=50 && $author_coun<60 && $comment_author_email!=$adminEmail)
echo '五好住户';
else if($author_count>=60 && $author_coun<70 && $comment_author_email!=$adminEmail)
echo '十佳住户';
else if($author_count>=70 && $author_coun<80 && $comment_author_email!=$adminEmail)
echo '住户委员';
else if($author_count>=100 && $comment_author_email!=$adminEmail)
echo '住户代表';
}
?>

以上代码用于判断评论人所填写的e-mail统计次数,达到相应次数后输出不同的等级,所以在评论中只人e-mail不认名称。

其中上面的<sy id="y*">是给输出等级添加相应的css,一般是文字颜色,可直接写在CSS文件中。

调用代码:

<?php $mail_str="\"".strip_tags($comment['mail']).\"";echo_levels($mail_str,"\"".$comment['url']."\""); ?>

在需要调用的地方插入以上代码即可


标签: emlog

admin 发布于  2015-6-19 09:15 

修复emlog绕过验证码刷评论的bug 代码人生

 最近博客常常被人刷评论,最狠的一次被刷了10000多广告。

    先看看评论验证码是怎么检查的。

    emlog/include/controller/comment_controller.php,先获得$imgcode:

<pre style="overflow:auto" ;class="prettyprint lang-php linenums">$imgcode = isset($_POST['imgcode']) ? addslashes(trim(strtoupper($_POST['imgcode']))) : '';

  检查:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">} elseif (ISLOGIN == false && Option::get('comment_code') == 'y' && session_start() && $imgcode != $_SESSION['code']) {
emMsg('评论失败:验证码错误');
}


上述代码,几个判断依次是:

  1. 没有登录(非管理员和作者)
  2. 后台开启了评论验证码
  3. 开启session
  4. 将session中的code与$imgcode比较,不相等则验证码错误


    第4步明显有问题。熟悉php验证码流程的同学应该清楚,验证码生成的时候将会设置一个session,这里就是code,再和POST过来的也就是用户输入的做比较。

    然而如果我们并没有访问验证码生成页面,那么也就没生成session。那么$_SESSION['code']就是NULL。

    php中==是弱类型比较,NULL和''(空字符串)比较的结果是TRUE的。

    所以这里,我们的$imgcode如果输入一个空值,并且不去访问生成验证码的页面,那么这个$imgcode != $_SESSION['code']就不成立,就不会提示验证码错误,从而绕过了验证码检查逻辑。

    所以,我这里做测试。

    先正常留言,填写验证码,中途抓包:

    QQ20150614-1@2x.png

    将PHPSESSID修改成随意一个值,目的是让其$_SESSION不存在。再将imgcode修改成空:

    QQ20150614-2@2x.png

    发送数据包,可见没有提示失败(302跳转了),说明评论成功:

    QQ20150614-3@2x.png

    载入一个字典,即可刷评论:

    QQ20150614-4@2x.png

    QQ20150614-5@2x.png


    修复方法是判断session是否为空:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">empty($_SESSION['code']) || $_SESSION['code'] != $imgcode


  不满足这个条件即提示错误。

    另外的方法是和我博客一样,使用第三方验证码,简洁又方便:极验

还有就是像我博客这样,增加一个打勾的措施也可以在一定程度上防止机器人刷评论.

注:  这只是对开了验证码的有效,没有开验证码想我博客这样的可以不修改.

原文地址:https://www.leavesongs.com/PENETRATION/emlog-comment-captcha-bypass.html


admin 发布于  2015-6-18 14:22 

emlog 控制导航显示条数的方法 emlog

方法其实很简单的,只要在模版文件module.php中找到

readCache('navi');

后面加

$i=0;

然后在

foreach($navi_cache as $value):

后面加

$i++;if($i>=7)break;

其中的7表示显示前7个导航。本教程以默认模板为例。

标签: emlog

admin 发布于  2015-6-12 22:32 

emlog修默认改导航栏地址 emlog

如果EMLOG使用的是Windows的服务器,点击前台的登录,经常会出现404问题。
因为服务器无法判定admin的路径是文件还是目录,如果访问mrxn.net/admin/,后面加上斜杠,指明是目录,则不会出现404的问题。
进入EMLOG后台,导航,选择登录的导航,修改,会提示默认导航无法修改,出现这种问题,需要修改程序文件。
使用编辑工具(不能使用记事本),打开admin/navbar.php文件后
查找并删除

    if ($type != Navi_Model::navitype_custom) { $url = '该导航地址由系统生成,无法修改'; }

    此段代码是为了判定,导航是否是默认导航,如果是的话,就不显示导航地址,只显示这段文字。
    删除了上面一段代码之后,发现文本框虽然显示了导航地址,但还是不可修改状态,

    继续查找并删除

$conf_isdefault = $type != Navi_Model::navitype_custom ? 'disabled="disabled"' : '';

    此段代码设定了,如果是默认导航的话,那文本框就不可修改。
    以上步骤搞定了以后,虽然文本框可以修改,可以提交,但发现修改后还是不能生效

    最后,查找以下代码:

    if ($isdefault == 'n') { $navi_data['url'] = $url; } 

    留下中间一行,修改为:

    $navi_data['url'] = $url;

    此段代码是在提交的时候判断导航是否为默认导航,如果不是默认导航才修改,去掉修改条件就OK。

    这下,把登录的地址,加个“/”改为“admin/”就搞定了~

标签: emlog

admin 发布于  2015-6-10 23:34 

Emlog gid自动补全断号id的方法 emlog

Emlog文章连接使用gid自增号作为文章的ID,但是由于后台有删除文章的功能,一旦删除文章那么gid自增就会出现断号。
    其实断号问题解决很方便,只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。
    我这里的解决方法是这样的,我把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。

    找到我们的addlog添加文章和页面函数。路径在include/model/log_model.php中的


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"> /**

  • 添加文章、页面
  • @param array $logData
  • @return int
    */
    function addlog($logData) {
    $kItem = array();
    $dItem = array();
    foreach ($logData as $key => $data) {
    $kItem[] = $key;
    $dItem[] = $data;
    }
    $field = implode(',', $kItem);
    $values = "'" . implode("','", $dItem) . "'";
    $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
    $logid = $this->db->insert_id();
    return $logid;
    }

    修改为:



    <pre style="overflow:auto" ;class="prettyprint lang-php linenums">function addlog($logData) {
    $kItem = array();
    $dItem = array();
    foreach ($logData as $key => $data) {
    $kItem[] = $key;
    $dItem[] = $data;
    }
    $field = implode(',', $kItem);
    $values = "'" . implode("','", $dItem) . "'";
    $gidarr[0]='0';
    $res = $this->db->query("SELECT gid From " . DB_PREFIX . "blog ORDER BY gid ASC");
    while ($row = $this->db->fetch_array($res)) {
    $gidarr[] = $row['gid'];
    }
    foreach($gidarr as $key=>$val){
    if($key!=$val){
    $field = 'gid,'.$field;
    $values = "'".$key."',".$values;
    break;
    }
    }
    $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
    $logid = $this->db->insert_id();
    return $logid;
    }

    通过改变是否需要插入语句添加gid和gid值,来自增或者插入。 假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。
          友情提示,在更改文件时请先做好备份。



admin 发布于  2015-6-8 23:49 

关于设置Emlog评论人邮件必填的操作方法 emlog

使用Emlog博客的朋友应该都知道Emlog评论人邮件不是必填的,下面说下修把Emlog评论人邮件改为必填的方法,本方法来源于EM论坛,经测试(测试版本5.3.1)可以正常使用

第一步,找到根目录下include/controller/comment_controller.php这个文件中的


elseif ($mail != '' && !checkMail($mail)) { emMsg('评论失败:邮件地址不符合规范');

替换成

elseif (empty($mail)){ emMsg('评论失败:邮件地址不规范或未填写邮件地址', 'javascript:history.back(-1);');

这个就可以实现Emlog评论人邮件必填,需要的朋友动手试试吧,如有疑问,可在下面留言。


标签: emlog

admin 发布于  2015-6-8 10:28 

侧边栏最新评论按评论数最多输出文章标题 emlog

侧边栏最新评论按评论数最多输出文章标题,以下按默认板子为例:将模版module.php中的


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//widget:最新评论
function widget_newcomm($title){
global $CACHE;
$com_cache = $CACHE->readCache('comment');
?>
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="newcomment">
<?php
foreach($com_cache as $value):
$url = Url::comment($value['gid'], $value['page'], $value['cid']);
?>
<li id="comment"><?php echo $value['name']; ?>
<br /><a href="<?php echo $url; ?>"><?php echo $value['content']; ?></a></li>
<?php endforeach; ?>
</ul>
</li>
<?php }?>

替换成



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php //widget:热评文章
function widget_newcomm($title){$index_comnum = Option::get('index_comnum');?>
<li>
<h3><span><?php echo $title;?></span></h3>
<ul id="newcomment">
<?php $db = MySql::getInstance();$db = MySql::getInstance();
$sql = $db->query ("SELECT * FROM ".DB_PREFIX."blog inner join ".DB_PREFIX."sort WHERE hide='n' AND type='blog' AND top='n' AND sortid=sid order by comnum DESC limit 0,$index_comnum");
while($row = $db->fetch_array($sql)){?>
<li id="comment"><a href="<?php echo Url::log($row['gid']);?>" title="<?php echo $row['title'];?>" /><?php echo $row['title'];?></a></li>
<?php }?></ul><?php }?>

这样就搞定收工了!本文转载自舍力


标签: emlog

admin 发布于  2015-6-7 13:58 

EMLOG给友链前面加上Favicon图标 emlog

在网站的友情链接页面,经常可以看到网站的图标增加美感。在以前,大部分采用的是谷歌来获取图标,但谷歌被墙,导致图标无法显示。如果你的博客的友情链接,需要展示友链图标的,也可以用到以下几种方式获取favicon图标:

第一种:采用我博客友链冰翼 的api ,我推荐使用这个,我亲测,速度杠杠的,而且图标还很准确!

新版Favicon接口的调用方式:

< img width = "16" height = "16" src = "http://api.byi.pw/favicon/?url=网址" />

具体的参数和使用方法请移步:http://api.byi.pw/favicon

第二种,采用dnspod,代码如下(ps:把其中的网址改为自己的网址即可):

http://statics.dnspod.cn/proxy_favicon/_/favicon?domain=mrxn.net<br />

第三种,直接上代码

调用方法:http://g.soz.im/http://www.shuyong.net<br /> 更详细的介绍:http://g.soz.im/<br />
如果你的博客是EMLOG的,可以参考下面的方法将你的博客友链加上favicon图标

以第二中方法为例,首页在网站的模板根目录找到module.php(默认板子为例),将其中的


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">< img width = "16" height = "16" src = "http://api.byi.pw/favicon/?url=网址" />


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><li><a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a></li>

替换为



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><li><img src="http://g.soz.im/&lt;?php echo $value['url']; ?>/cdn.ico?defaulticon=lightpng" width="16" height="16" /><a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a></li>

即可


博客现在使用的代码



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><li><img src="<?php echo $value['url']; ?>/favicon.ico" onerror="vascript:this.src='<?php echo TEMPLATE_URL; ?>images/demo.ico';" width="16" height="16" /><a href="http://www.shuyong.net/go/?url=&lt;?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a></li>


博闻广记使用下面代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//友情链接
function index_link(){
global $CACHE;
$link_cache = $CACHE->readCache('link');
if (!blog_tool_ishome()) return;
?>
<div id="link_bk">
<b>友情链接:</b><?php foreach($link_cache as $value): ?>
<?php
$urlinfo = parse_url($value['url']);
$urlHost = explode(".",$urlinfo['host']);
$urlHost = array_reverse($urlHost);
?>
<img class="linkimg" src="<?=$urlinfo['scheme']?>://www.<?=$urlHost[1]?>.<?=$urlHost[0]?>/favicon.ico" onerror="javascript:this.src='<?php echo TEMPLATE_URL; ?>images/favicon.ico';"><a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a>&nbsp;&nbsp;&nbsp;
<?php endforeach; ?></div>
<?php }?>




标签: emlog

admin 发布于  2015-6-7 13:58 

Mrxn教你用表格给你的emlog加上个性化的版权吧 emlog

Mrxn教你用表格给你的emlog加上个性化的版权吧!

我看了大部分的emlog模板版权都很简单,基本上都是一句话写完的,很是不美观!我认为哈!!!

大家可以现在看一下我的博客的文章版权还是不错的吧! ---  效果如下图所示:

点击查看原图


<pre style="overflow:auto" ;class="prettyprint lang-html linenums"><table width="770px" cellspacing="0" cellpadding="0" table-layout: fixed border-style:dashed; border-width:1px; border-color:#EEEEEE;>
<tr>
<th width="75" align="left" bgcolor="#F9F9F9" scope="row">本文标签:</th>
<td width="420" align="left" bgcolor="#F9F9F9" white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;><?php blog_tag($logid);?></td>
<td width="105" rowspan="4" align="center" background="http://api.k780.com:88/?app=qr.vget&amp;level=L&amp;size=4&amp;appkey=11926&amp;sign=4d1a837e7024195acf7d80362b610dcf&amp;data=&lt;?php echo $logurl;?>"></td>
</tr>
<tr>
<th width="75" align="left" bgcolor="#F9F9F9" scope="row">本文标题:</th>
<td width="420" align="left" bgcolor="#F9F9F9" white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;><a href="<?php echo $logurl;?>"><?php echo $log_title; ?></a></td>
</tr>
<tr>
<th width="75" align="left" bgcolor="#F9F9F9" scope="row">本文地址:</th>
<td width="420" align="left" bgcolor="#F9F9F9" white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;><a href="<?php echo $logurl;?>"><?php echo $logurl;?></a>(扫二维码进入博客触屏版哦)</td>
</tr>
<tr>
<th colspan="2" align="left" bgcolor="#F9F9F9" scope="row" white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;>除非注明,文章均为 《<a style="color:red;"<?php blog_author($author); ?>》>></a><a href="<?php echo BLOG_URL;?>">原创</a> ,欢迎转载!转载请注明本文地址,谢谢!</th>
</tr>
</table>

上面我把代码放出来.需要的自己看着折腾吧,不会的请在留言板留言,或者是加入QQ群反馈.



标签: 代码 emlog

admin 发布于  2015-6-7 07:49 

Emlog手机版获取文章标签和分类 emlog

代码仍旧是从module文件里拿出来,经过一些修改而得,使用基本没什么问题。里面的分类和标签链接地址还是电脑版的,不过也不必修改,毕竟手机版也没有分类和标签的功能,如果不需要的可以将其去掉。


以下是调用分类名(带链接)的代码:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">//获取文章对应的分类
function blog_sort($blogid){
global $CACHE;
$log_cache_sort = $CACHE->readCache('logsort');
if(!empty($log_cache_sort[$blogid])){
$blog_sort = "<a href=\"".Url::sort($log_cache_sort[$blogid]['id'])."\">".$log_cache_sort[$blogid]['name']."</a>";
}
else{
$blog_sort = "暂未分类";
}
echo $blog_sort;
}
把上面的代码放在手机版的index.php里的最后。然后进入view文件夹,按自己需要选择添加位置:

想显示在文章页面:打开single.php,放到里面的适当位置即可:

<?php blog_sort($logid); ?>

想显示在文章列表里:打开log.php文件,在 <?php foreach($logs as $value): ?> 与 <?php endforeach; ?> 之间放入如下调用代码:



<?php blog_sort($value['logid']); ?>

下面是获取文章标签的代码:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums">//获取文章对应的标签
function blog_tag($blogid){
global $CACHE;
$log_cache_tags = $CACHE->readCache('logtags');
if (!empty($log_cache_tags[$blogid])){
$tag = '';
foreach ($log_cache_tags[$blogid] as $value){
$tag .= "<a href=\"".Url::tag($value['tagurl'])."\">".$value['tagname'].'</a>&nbsp;';
}
echo $tag;
}
}
同样是放到index.php文件的后面,至于和上面的分类代码谁先谁后是无关紧要了,建议彼此隔开一行,方便查看修改。每个标签之间已用空格(即&nbsp;)隔开,你也可以去掉再用CSS定义。



调用方法和上面的分类调用一样,文章页面的标签调用代码:

<?php blog_tag($logid); ?>

文章列表页面的标签调用代码:

<?php blog_tag($value['logid']); ?>

感觉内容和之前发的差不多(-_-#),我只是想写详细一点。



本文作者: 笑忘书,转载请注明出处




标签: emlog

admin 发布于  2015-6-7 00:08