织梦表单获取IP和提交,自定义表单拒绝垃圾留言

获取提交时间:
网上用的最多的肯定是JS方法,此方法是提交的时候再去获取时间,并将它赋值给一个input

<script type="text/javascript">

window.onload = function(){

var nowDate = new Date();

var str = nowDate.getFullYear()+"-"+(nowDate.getMonth() + 1) +"-"+nowDate.getDate()+" "+nowDate.getHours()+":"+nowDate.getMinutes()+":"+nowDate.getSeconds();

document.getElementById("mytime").value=str;

}

</script>

第二种是在表单添加PHP代码:此方法只适合动态预览或者伪静态,因为生成过后的表单,里面的时间字段始终是生成的时候的时间。所以达不到我们的要求,写法如下:

<input name="shijian" id="shijian" value="{dede:php} echo $showtime=date("Y-m-d H:i:s");{/dede:php}">

第三种是结合前台和后台一起实现获取时间同时获取浏览者IP地址:
在diy.php文件中加入以下代码:

if($fieldinfo[1] == 'textdata')
{
   ${$fieldinfo[0]} = FilterSearch(stripslashes(${$fieldinfo[0]}));
   ${$fieldinfo[0]} = addslashes(${$fieldinfo[0]});
}
//后面添加

if($fieldinfo[0] == 'ip')
{
   ${$fieldinfo[0]}=GetIP();
}
   if($fieldinfo[0] == 'time')
{
   ${$fieldinfo[0]}=date("Y-m-d H:i:s");
}

接下来在留言表单页面添加两个hidden的input(测试的时候,我没有在前台添加这两个后台同样可以获取到);代码如下很简单:

<input type="hidden" name="ip" id="ip" value="">
<input type="hidden" name="time" id="time" value="">

以上三种方法,不用说肯定是第三种好很多,它没有JS那么多代码,也没有第二种方法死板,我所使用的任何网站当中都采用此方法获取提交时间。
接下来要说的是自定义表单如何防止垃圾流言,网上很多是结合验证码来实现,如果使用AJAX来提交表单的话,不是每次提交过后都要刷新验证码才行吗?不然加个验证码只是摆设而已,即浪费精力又浪费时间。对于我们这种懒人,用最简单的代码实现同样的功能就是我所需要的。
接下来说的就是使用IP来判定表单是否有过提交。两三句话就可以完成的事情,首先查找

$dsql->ExecuteNoneQuery($query)

这是留言插入数据库代码,我们在这个判断语句上一行,$query = “INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, 0 $addvalue); “的下一行添加:

$get_ip = GetIP();                    //获取IP
$select_ip = "SELECT * FROM `{$diy->table}` WHERE `ip` = '$get_ip'";     //查询IP语句
$se = $dsql->GetOne($select_ip);                                         //$dsql->GetOne()函数是织梦dsql类的一个方法,返回一个数组;将查询到的结果赋值给$se;如果没有查询到返回空

有了查询结果还愁不知道怎么办吗?
在执行插入之前先判断一下此变量是否为空,如果为空说明数据库当中没有此IP留言,可以留言,如果不为空则此IP不能留言:

if( $se == '' && $dsql->ExecuteNoneQuery($query))    //$se == '' 也可以用函数判断是否为空,这个判断一定要在$dsql->ExecuteNoneQuery($query)它前面,学过IF都知道是为什么;
{
   echo "可以留言";
}else{
   echo "这个IP已经留过言了";
}

至此完美打造织梦自定义表单的IP和留言时间,并且根据IP来判定访客是否可以正常留言;像在一个小时之内只准留言一条,同样的道理,查询数据库当中的时间,再获取现在时间做一下对比就可以实现的。通过这种方法,可以延伸出各样的留言功能。希望对各位有所帮助

发表评论


昵称

沙发空缺中,还不快抢~