php,$ip = $_SERVER['REMOTE_ADDR'];,$time = time();,
`,,2. 在数据库中创建一个新表,用于存储已提交表单的IP地址和提交时间。表名为
form_submissions,字段包括
id(自增长主键)、
ip(存储IP地址)和
submit_time(存储提交时间)。,,3. 在提交表单之前,检查用户IP是否在
form_submissions表中存在,并且距离上次提交时间小于24小时。如果满足条件,则拒绝提交并提示用户。,,
`php,$sql = "SELECT * FROM form_submissions WHERE ip = '$ip' AND submit_time >= $time 86400";,$result = mysql_query($sql);,if (mysql_num_rows($result) > 0) {, echo "您已经在过去的24小时内提交过表单,请24小时后再试。";, exit;,},
`,,4. 如果用户IP不在
form_submissions表中,或者距离上次提交时间大于等于24小时,则将表单数据插入到相应的表中,并将用户IP和提交时间插入到
form_submissions表中。,,
`php,// 插入表单数据到相应表中的代码...,,$sql = "INSERT INTO form_submissions (ip, submit_time) VALUES ('$ip', $time)";,mysql_query($sql);,
“,,通过以上方法,可以实现织梦DedeCMS自定义表单限制垃圾信息,IP24小时只能发布一次。在织梦DedeCMS中,自定义表单是一种非常实用的功能,可以用于在线订单、报名等互动应用,为了提高系统的安全性和减少垃圾信息的提交,可以通过多种方法对表单数据进行校验和过滤。
前端数据验证
通过前端JavaScript代码对用户输入的数据进行初步校验,这一步主要是为了防止不懂网站制作的用户提交无效或恶意数据,可以检查电话号码和邮箱格式是否正确,以下是一个简单的示例:
<form action="/plus/diy.php" enctype="multipart/formdata" method="post" name="gbook" onsubmit="return saveIt();"><br/> <input type="hidden" name="action" value="post" /> <br/> <input type="hidden" name="diyid" value="1" /> <br/> <input type="hidden" name="do" value="2" /> <br/> <input class="txt" name="name" id="name" type="text" placeholder="姓名:" /> <br/> <input class="txt" name="tel" id="tel" type="text" placeholder="电话:" /> <br/> <input class="txt" name="mail" id="mail" type="text" placeholder="邮箱:" /> <br/> <textarea class="textarea1" name="nr" id="nr"></textarea> </form>
<script type="text/javascript"> function check() { var fankui = document.getElementById('fankui'); var names = document.getElementById('names'); if (fankui.value.length == 0) { alert("反馈内容不能为空"); fankui.value = ""; fankui.focus(); return false; } if (names.value.length == 0) { alert("姓名不能为空"); names.value = ""; names.focus(); return false; } } </script>
后端PHP正则验证
尽管前端验证可以过滤掉一些无效数据,但有经验的用户仍然可以通过绕过前端限制直接向服务器提交数据,在后端进行进一步的验证是必不可少的,可以在plus/diy.php
文件中添加如下代码来验证手机号码和邮箱:
//判断手机号码是否正确 if (!eregi("^((13[09])|147|(15[0359])|180|182|(18[59]))[09]{8}$", $tel)) { showMsg('手机号码不对,请正确填写', '1'); exit(); } //验证邮箱 if (!eregi("^[_.09az]+@([09az][09az]+.)+[az]{2,3}$", $mail)) { showMsg('请您填写正确的EMail地址!', '1'); exit(); }
IP限制提交
为了防止某些用户有意或无意地多次提交表单,可以使用Cookies来限制每个IP每24小时只能发布一次,具体实现方法如下:
//检测游客是否已经提交过表单 if (isset($_COOKIE['VOTE_MEMBER_IP'])) { if ($_COOKIE['VOTE_MEMBER_IP'] == $_SERVER['REMOTE_ADDR']) { showMsg('您已经填写过表单啦', '1'); exit(); } else { setcookie('VOTE_MEMBER_IP', $_SERVER['REMOTE_ADDR'], time() * 24 * 3600, '/'); } } else { setcookie('VOTE_MEMBER_IP', $_SERVER['REMOTE_ADDR'], time() * 24 * 3600, '/'); }
表格归纳
步骤 | |
前端数据验证 | 使用JavaScript进行基本的表单字段验证,如必填项、电话和邮箱格式。 |
后端PHP正则验证 | 在plus/diy.php 文件中使用正则表达式校验手机号和邮箱。 |
IP限制提交 | 使用Cookies记录每个IP地址的提交时间,限制每24小时只能提交一次。 |
FAQs
Q1: 如何确保用户提交的数据在后台也进行了有效的验证?
A1: 确保后台验证有效性的方法是在plus/diy.php
文件中添加正则表达式校验代码,使用eregi
函数匹配手机号和邮箱格式,如果不匹配则提示错误信息并终止脚本执行,这样可以有效防止恶意用户绕过前端验证直接提交数据。
Q2: 为什么需要限制每个IP地址每24小时只能提交一次表单?
A2: 限制每个IP地址每24小时只能提交一次表单是为了减少垃圾信息的提交,避免某些用户有意或无意地多次提交表单,从而减轻服务器的负担,提高数据处理效率,通过设置Cookies记录IP地址和提交时间,可以有效地控制每个IP地址的提交频率。
织梦DedeCMS自定义表单限制垃圾信息:IP24小时只能发布一次
1. 引言
在织梦DedeCMS中,为了防止垃圾信息的发布,可以通过限制IP地址在一定时间内的发布频率来实现,以下是具体实现IP24小时只能发布一次的功能步骤。
2. 准备工作
确保织梦DedeCMS系统已安装并正常运行。
准备好自定义表单,确保表单能够正确接收数据。
3. 修改代码
1、定位文件:找到自定义表单的提交处理文件,通常是include/postinfo.class.php
。
2、添加限制代码:
在postinfo.class.php
文件中,找到处理数据提交的部分。
在该部分添加以下代码:
// 检查IP地址24小时内的提交次数 $ip = GetIP(); $timestamp = time(); $query = "SELECT COUNT(*) AS count FROM dede_addonarticle WHERE ip='$ip' AND addtime>'$timestamp24*3600'"; $db>SetQuery($query); $result = $db>GetOne(); if ($result['count'] >= 1) { ShowMsg("您的IP地址24小时内已经提交过信息,请24小时后再试!", "1"); exit(); }
3、保存并测试:
保存修改后的postinfo.class.php
文件。
通过自定义表单提交数据,测试是否能够正常限制IP地址的提交次数。
4. 说明
上述代码通过查询数据库中24小时内同一IP地址的提交记录数来判断是否超过限制。
如果超过限制,则提示用户并阻止提交。
5. 注意事项
确保数据库连接正常,并且表dede_addonarticle
存在且包含ip
和addtime
字段。
修改数据库查询语句中的表名和字段名,以适应您的实际数据库结构。
6. 归纳
通过上述步骤,可以在织梦DedeCMS中实现IP地址24小时只能发布一次的功能,有效减少垃圾信息的发布。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1140280.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复