织梦自定义表单实现网站留言功能完整教程

原创 2021-02-8 本文共7391个字,预计耗時19分钟 764次阅读
文章摘要:网站留言功能算是比较常见的,客户就要求在网站联系我们下增加一个类似下面的网站留言功能。查看网上的教程都是使用自定义表单实现,也就使用织梦的自定义表单功能给实现了,各项功能还是很不错的,给整理一下,从头开始如果使用自定义表单功能实现网站留言功...

织梦自定义表单实现网站留言功能完整教程

网站留言功能算是比较常见的,客户就要求在网站联系我们下增加一个类似下面的网站留言功能。查看网上的教程都是使用自定义表单实现,也就使用织梦的自定义表单功能给实现了,各项功能还是很不错的,给整理一下,从头开始如果使用自定义表单功能实现网站留言功能。

网站留言功能

自定义表单留言功能

1.创建自定义表单

网站后台->核心->频道模型->自定义表单->增加新的自定义表单,然后名称自定以如“ 在线留言”,最后那里内容公开选“完全公开”

增加自定义表单

2.添加表单字段

增加表单后会自动返回至表单列表,然后点击右侧管理里的修改图标,可以修改表单内容

修改表单增加字段

如果想要增加一个文章前面的提到的表单,需要五个字段,主题-名字-邮箱-手机号-内容,因为手机号电话号不同可以有“-”符号,所以这前四个都可以定义为单文本,最后内容比较多可以用多行文本。

提示文字和字段名称都是自定义的,同一表单里不要出现重复即可,为了方便最好使用英文名称,提示中文,字段最大长达按需设置,直接默认的255也是可以,最大长度就是能够储存的最大文字个数,如我这里名字设置了最大20(即20个中文),其他地方就是内容相对多点设置100或200都行

自定义表单添加字段

3.获取表单代码

添加字段完成后回到表单列表,点击管理下的前台预览(即上一步骤第一张图里),再点击右上角发布信息,得到了一个包含所添加字段的表单。

获取自定义表单代码

获取自定义表单代码

然后鼠标右键-查看网页源码,冲网页源码里找到一个from标签包裹的表单代码,复制保存下来。这段就是设置的自定义表单内容,可以将其直接放在模板文件里,因为是织梦默认的HTML结构,如果想要美观可以自定义结构,然后使用CSS美化,重构需要注意的input的name值,ID值,type属性,from标签不要改动,table标签的内容完全可以替换的,例如自带的如下格式:

<form action="/plus/diy.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="action" value="post" />
<input type="hidden" name="diyid" value="1" />
<input type="hidden" name="do" value="2" />
<table style="width:97%;" cellpadding="0" cellspacing="1">
<tr>
  <td align="right" valign="top">主题:</td>
  <td><input type='text' name='subject' id='subject' style='width:250px'  class='intxt' value='' />
</td>
</tr>
<tr>
  <td align="right" valign="top">名字:</td>
  <td><input type='text' name='name' id='name' style='width:250px'  class='intxt' value='' />
</td>
</tr>
<tr>
  <td align="right" valign="top">邮箱:</td>
  <td><input type='text' name='email' id='email' style='width:250px'  class='intxt' value='' />
</td>
</tr>
<tr>
  <td align="right" valign="top">电话/手机:</td>
  <td><input type='text' name='telnum' id='telnum' style='width:250px'  class='intxt' value='' />
</td>
</tr>
<tr>
  <td align="right" valign="top">留言内容:</td>
  <td><textarea name='content' id='content' style='width:90%;height:80'></textarea>
</td>
</tr>
<input type="hidden" name="dede_fields" value="subject,text;name,text;email,text;telnum,text;content,multitext" />
<input type="hidden" name="dede_fieldshash" value="b56ddac5d3dc0dc1e007e9c9d3d777d5" /></table>
<div align='center' style='height:30px;padding-top:10px;'>
<input type="submit" name="submit" value="提 交" class='coolbg' />
&nbsp;
<input type="reset" name="reset" value="重 置" class='coolbg' />
</div>
</form>

修改完后可以是下面格式:其中的class类名是为了后起CSS美化添加的,也可以自定义的。

<form action="/plus/diy.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="action" value="post" />
<input type="hidden" name="diyid" value="1" />
<input type="hidden" name="do" value="2" />
<div class="wd50">
<input type='text' name='subject' id='subject' value='' placeholder="主题" />
</div>
<div class="wd50">
<input type='text' name='name' id='name' value='' placeholder="名字" />
</div>
<div class="wd50">
<input type='text' name='email' id='email' value='' placeholder="邮箱" />
</div>
<div class="wd50">
<input type='text' name='telnum' id='telnum' value='' placeholder="电话/手机" />
</div>
<div class="wd100">
<textarea name='content' id='content' placeholder="留言内容"></textarea>
</div>
<input type="hidden" name="dede_fields" value="subject,text;name,text;email,text;telnum,text;content,multitext" />
<input type="hidden" name="dede_fieldshash" value="b56ddac5d3dc0dc1e007e9c9d3d777d5" />
<div class="wd100 subbtn">
<input type="submit" name="submit" value="提 交" class='coolbg' />
<!-- <input type="reset" name="reset" value="重 置" class='coolbg' /> -->
</div>
</form>

最后辅以CSS代码美化,就呈现了想要的效果:

.lymsg .msgtitle{
font-size: 22px;
text-align: center;
margin-bottom: 25px;
color: inherit;
}
.lymsg>form>div{
display: inline-block;
}
@media screen and (max-width: 760px){
.lymsg>form>div{
  width: 100% !important;
}
}
.lymsg>form>div>input{
box-sizing: border-box;
padding: 0 15px;
border: 1px solid #ddd;
height: 40px;
line-height: 40px;
color: #444;
width: 100%;
margin-bottom: 0;
font-size: 14px;
font-weight: 400;
outline:none;
}
.lymsg>form .wd50{
width: 46%;
margin-right: 4%;
float: left;
margin-bottom: 20px;
}
.lymsg>form>div>textarea{
box-sizing: border-box;
border: 1px solid #ddd;
min-height: 100px;
padding: 15px;
color: #444;
width: 100%;
margin-bottom: 0;
outline: none;
font-size: 14px;
font-weight: 400;
}
.lymsg>form .wd100{
width: 96%;
margin-bottom: 20px;
}
.lymsg>form .subbtn>input{
box-sizing: border-box;
width: 100%;
line-height: 40px;
height: 40px;
float: right;
padding: 0px 15px;
border: 0px;
color: #fff;
position: relative;
background-color: #333;
cursor: pointer;
}
.lymsg>form .subbtn>input:hover{background-color: #223053;}

织梦自定义表单留言功能增强

至此呢,留言的基本功能已经实现了,可以在后台- 核心-频道模型- 自定义表单-在线留言,查看留言内容。

但是呢还有些不足之处需要有所改进,目前为止,会有不能监测是否填写了留言就提交,或者电话号码邮等信息格式没有识别监测功能;不能阻止用户在短时间提交多次留言,留言提交后跳转默认留言列表问题。需要足以解决以体现用户体验,完善功能。

1.留言内容的监测

可以在前台使用Javascript实现,在表单下面定义一个监测函数,用以监测提交前表单内容是否填写,以及填写正确,在提交表单前拦截监测,合格后才提交,不合格提示用户需要正确填写。如下面的我的函数是可以监测邮箱和电话号码是否正确格式,其他内容给没有做相应的检查,比较简单,但足以使用

<script type="text/javascript">
function checkForm(){
let emialRe = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
let mobilelRe = /^1\d{10}$/;
let telRe = /^0\d{2,3}-?\d{7,8}$/;
let telnum = document.getElementById('telnum').value;
let email = document.getElementById('email').value;
  // 正则匹配 电话 邮箱
if(telnum.length == 0 || !(mobilelRe.test(telnum)|| telRe.test(telnum))){
  alert('请正确填写您电话号');
  return false;
}
if(email.length == 0 || !emialRe.test(email)){
  alert('请正确填写您的邮箱');
  return false;
}

if(document.getElementById('subject').value.length == 0){
  alert('请填写内容主题');
  return false;
}
if(document.getElementById('name').value.length == 0){
  alert('请输入您的姓名');
  return false;
}
if(document.getElementById('content').value.length == 0){
  alert('请输入留言内容');
  return false;
}
return true;
}
</script>

然后在form表单提交前拦截监测即可,实现也很简单,就是在from标签里增加onsubmit属性,指向检查函数checkForm,将表单HTMLform标签修改为:

<form action="/plus/diy.php" enctype="multipart/form-data" method="post" onSubmit="return checkForm();">

2.防止用户短时间重复提交

修改目录plus/diy.php 大致51 行 查找关键词“if(!is_array($diyform))”在这个函数后添加(时间可以自定义这里是一分钟3600秒):

// 增加 防止重复提交留言
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()*$row['spec']*3600,'/');
	}

}else{
	setcookie('VOTE_MEMBER_IP',$_SERVER['REMOTE_ADDR'],time()*$row['spec']*3600,'/');
}
// 增加 防止重复提交留言

防止短时间多次提交

织梦默认的提交成功后是跳转至首页,如果设置了短时间不能多次提交可以跳转到提交页面,修改方式同样是/plus/diy.php文件

//showmsg($bkmsg, $goto);  //默认跳转到首页
showmsg($bkmsg, -1); //调回上一页面即提交页面

3.提交成功后会跳转至织梦默认的留言列表

这样提交留言成功后会跳转到默认的留言列表(第三步骤的第一张图的位置),没必要让用户看见别人的留言内容。所以需要进行修改,同样是plus/diy.php文件大概106行将源码的$goto注释掉,改写如下,可以实现提交完成后返回到填写表单的页面。

//$goto = "diy.php?action=list&diyid={$diy->diyid}";
$goto = "javascript:history.go(-1)";//返回页面

自定义表单搜索功能实现

留言多了,可能后期管理比较麻烦,需要找到相关用户的留言内容,一条一条找不现实,所以需要有个表单检索功能,如下图,可实现更加字段名关键词检索信息。其添加步骤也不复杂,两个步骤修改表单列表模板文件,增加列表搜索函数。

自定义表单结果检索

1.模板文件增加区块

在路径\dede\templets\下找到文件diy_list.htm,搜索关键词“内容列表”大概11行位置下添加搜索标签区块

<!--搜索功能-->
<div class="bodytitletxt" style="padding-left:10px;">
<form name='form1' action="diy_list.php">
	<input type='hidden' name='action' value='list' />
	<input type='hidden' name='diyid' value='<?php echo $diy->diyid; ?>' />
	关键字:
	<input type='text' name='keyword' size='20' value="<?php echo $keyword; ?>" />
	<select name="field">
	<?php
		foreach($fieldlist as $k=>$fielddata)
		{
			if($k==$field)
			{
				echo "<option value='{$k}' selected>{$fielddata[0]}</option>\r\n";
			}
			else
			{
				echo "<option value='{$k}'>{$fielddata[0]}</option>\r\n";
			}
		}
	?>
	</select>
	<input type='submit' name='sb' value='确定' class="coolbg np" />
</form>
</div>
<!--搜索功能 end-->

2.增加搜索函数

路径\dede\diy_list.php文件中将

$query = "SELECT * FROM {$diy->table} ORDER BY id DESC";

改成

if(empty($keyword)){
    $keyword = '';
    $addquery = '';
}
else{
    $addquery = " WHERE {$field} LIKE '%".trim($keyword)."%' ";
}
$query = "SELECT * FROM {$diy->table} $addquery ORDER BY id DESC";

然后继续找到

$datalist->SetParameter('diyid', $diyid);

在其下方追加

$datalist->SetParameter('keyword', $keyword);
$datalist->SetParameter('field', $field);

到这里关于使用织梦自定义表单实现留言功能的全部细节介绍完毕,按照本文下来,实现的留言功能可实现前端判断留言内容是否为空,格式是否正确,防止短时间重复提交,以及留言内容检索功能,可适用于大部分的网站需求。

如果需要验证码功能(表单验证码可以阻止掉恶意灌水留言)可继续看织梦带验证码功能的自定表单教程:http://doc.ydqic.com/3690.html
版权免责申明
① 本站源码模板等资源SVIP用户永久不限量免费下载
② 所有资源来源于网络收集,如有侵权,请联系站长进行删除处理。
③ 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。
④ 如果你有源码需要出售,可以联系管理详谈。
⑤ 本站提供的源码、模板、插件等等资源,都不包含技术服务请大家谅解。
⑥ 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
⑦ 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。
⑧ 网站资源绝不做任何二次加密或添加后门(原版加密除外)
常见问题F&Q
需要积分的资源怎么下载?
您可以注册后签到等活跃动作获得积分,积分可下载,也可充值升级等级免费下载。
源码模板等文件安全吗?有没有后门病毒吗?
站内资源标有“已测试”标签的资源源码,表示已经在本地安装测试调试过才分享出来的,可以保证一定的安全;若不放心可以自行下载模板资源后使用D盾等查杀工具扫一遍确认安全。
本站网站模板等源码提供安装服务吗?
本站资源收集于网络并分享出来共同学习,不提供免费安装服务,模板源码安装等需要有一定熟悉度,小白用户可以下载资源后雇人安装调试。