本文最后更新于 914 天前,其中的信息可能已经有所发展或是发生改变。
在我使用wordpress开发表单时,客户需求限制表单提交人的ip提交次数,这是很常见的功能,可以有效过滤无用的垃圾信息提交。
首先需要获取当前访问用户的ip地址,代码如下:
function get_ip(){ if(!empty($_SERVER['HTTP_CLIENT_IP'])){$ip = $_SERVER['HTTP_CLIENT_IP'];} elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];} else{$ip = $_SERVER['REMOTE_ADDR'];} return $ip; }
那么使用$ip = get_ip();就能将用户ip赋予一个变量,然后再创建一个变量表示用户ip提交次数上限。
$ip_number_no = 2;//限制ip访问次数
接下来需要使用wordpress的$wpdb对象,他是wordpress的数据库对象,通过它来对用户提交的表单进行查询
使用$wpdb->get_var(“sql语句”),如果有结果,可以返回查询结果数,无结果则返回FALSE。更多的$wpdb用法和具体函数会在以后的文章中说明
$get_post_ip_num_check = $wpdb->get_var("
SELECT COUNT(*)
FROM $wpdb->posts
WHERE post_type = 'customer'
AND post_excerpt = '".$ip."'
AND date_format(post_date,'%Y-%m-%d') = curdate() "
);
if($get_post_ip_num_check >= $ip_number_no){
$ip_check_status = false;
//达到次数限制,不允许再次提交
}
在上面sql语句中,查询出wp_posts这个表中,文章类型为自定义类型customer、表单提交人ip(这里使用文章的摘要字段作为ip)、表单提交时间为当前时间的总数量。
post_date的日期格式为:年-月-日 小时:分钟:秒。curdate()表示当前日期:年-月-日,所以需要对字段post_date进行格式转化。
这条查询语句表示当前用户在当天内提交成功的总次数,只要对其进行限制,给提交动作增加一个判断即可达到需求目的。