为jive论坛加上投票功能

原创 2004年02月01日 23:21:00


jive是什么就不多说了,我用过好些论坛的投票,比较喜欢动网论坛的投票。
操作很简单,选择单选还是多选,然后输入投票选项,每一行做一个选项,最多10个。
我把这个功能加进jive里面,建立两个新表:
CREATE TABLE jivevote (
  voteid int not null,--投票id,跟jive的theadid保持一致
  type int NOT NULL,--投票类型,单选还是多选
  votenum int NOT NULL,--数目
  votetxt text NOT NULL,--投票的文本内容
  content1 int default 0,
  content2 int default 0,
  content3 int default 0,
  content4 int default 0,
  content5 int default 0,
  content6 int default 0,
  content7 int default 0,
  content8 int default 0,
  content9 int default 0, 
  content10 int default 0,
  PRIMARY KEY  (voteid)
);

CREATE TABLE jivevoterecord  (
  voteid int not null,--投票id,跟jive的theadid保持一致
  userid int not null--记录投过票的用户
);
写一个Poll.java文件,为求方便都写为静态方法,
package com.jivesoftware.forum.database;//这样可以调用连接池
增加主题投票,用户提交投票内容,是否单选
    public static void addVoteThread(long voteid,String votetxt,boolean single,int votenum){
        String sqlstr = "insert into jivevote (voteid,type,votetxt,votenum) values(?,?,?,?)";
        Connection con = null;
        PreparedStatement stmt = null;
        try
        {
            con = ConnectionManager.getConnection();
            stmt = con.prepareStatement(sqlstr);
            stmt.setLong(1,voteid);
            stmt.setInt(2,single?0:1);
            stmt.setString(3,votetxt);
            stmt.setInt(4,votenum);
            stmt.executeUpdate();
        }
        catch(SQLException sqle)
        {
            sqle.printStackTrace();
        }
        finally
        {
            try
            {
                stmt.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            try
            {
                con.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
执行投票操作,threadID为新建立投票的时候建立的主题id,voted数组为选项
    public static boolean vote(long threadID,int[] voted,long userID){
        if(isVoted(threadID,userID)){
          return false;
        }
        Connection con = null;
        PreparedStatement stmt = null;
        try
        {
            con = ConnectionManager.getConnection();
            for(int i=0;i              if(voted[i]!=0){
                stmt = con.prepareStatement("update jivevote set content" + voted[i] + "= content" + voted[i] + "+1 where voteid=?");
                stmt.setLong(1,threadID);
                stmt.executeUpdate();               
              }
            }
            stmt = con.prepareStatement("insert into jivevoterecord(voteid,userid) values(?,?)");
            stmt.setLong(1,threadID);
            stmt.setLong(2,userID);
            stmt.executeUpdate();
           
        }
        catch(SQLException sqle)
        {
            sqle.printStackTrace();
        }
        finally
        {
            try
            {
                stmt.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            try
            {
                con.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        return true;
  
    }
   
    判断是否已经投过票
    public static boolean isVoted(long threadID,long userID){
        Connection con = null;
        PreparedStatement stmt = null;
        boolean ret = false;
        try
        {
            con = ConnectionManager.getConnection();
            stmt = con.prepareStatement("select voteid from jivevoterecord where voteid=? and userid=?");
            stmt.setLong(1,threadID);
            stmt.setLong(2,userID);
            ResultSet rs = stmt.executeQuery();
            ret = rs.next();
           
        }
        catch(SQLException sqle)
        {
            sqle.printStackTrace();
        }
        finally
        {
            try
            {
                stmt.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            try
            {
                con.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        return ret;
    }
取得投票内容
    public static String getVoteView(long threadID,long userID){
        Connection con = null;
        PreparedStatement stmt = null;
        StringBuffer sb = new StringBuffer();
        sb.append("

" + i + ".                    + "" + i + "." + opts[i-1] + " 票数:" + rs.getInt("content"+i)
                    + "
你已经投过票了
");
      return sb.toString();
       
    }
增加一个新的jsp:
<%
/**
* $RCSfile: addVote.jsp,v $
* $Revision: 1.13.4.2 $
* $Date: 2002/05/21 20:38:12 $
*/
%>
<%@ page import="java.net.*,
java.text.*,
java.util.*,
com.jivesoftware.util.*,
com.jivesoftware.forum.*,
com.jivesoftware.forum.util.*"
errorPage="error.jsp"
%>

<%@ include file="postUtils.jsp" %>
<%@ include file="global.jsp" %>
<%@page contentType="text/html;charset=GBK"%>
<% // Put the request URI and query string in the session as an attribute.
// This is done so the error.jsp and auth.jsp pages can figure out what
// page sent it an error and redirect appropriately.
setRedirectURL(request);
%>
<%
if(pageUser==null){
throw new UnauthorizedException("你没有权限操作.");
}
long forumID = ParamUtils.getLongParameter(request,"forum",-1L);
long threadID = ParamUtils.getLongParameter(request,"thread",-1L);
int type = ParamUtils.getIntParameter(request,"type",0);
int votenum = ParamUtils.getIntParameter(request,"votenum",0);
String opt = ParamUtils.getParameter(request,"chk");
forumFactory=com.jivesoftware.forum.database.DbForumFactory.getInstance();
// Load the forum
Forum forum = forumFactory.getForum(forumID);
ForumThread thread = forum.getThread(threadID);
int opti=1;
try{
opti = Integer.parseInt(opt);
}catch(Exception e){
}
if(type==0){
int[] opts = new int[1];
opts[0] = opti;
Helper.vote(threadID,opts,pageUser.getID());
}else{
if(votenum>0){
int[] opts = new int[votenum];
int i=0;
Enumeration e = request.getParameterNames();
while ( e.hasMoreElements() ){
String vid=(String)e.nextElement();
if ( vid.startsWith("chk_") ){
opts[i] = Integer.parseInt(request.getParameter(vid));
i++;
}
}
Helper.vote(threadID,opts,pageUser.getID());
}
}
response.sendRedirect("thread.jsp?forum=" + forumID + "&thread=" + threadID);
%>
在post.jsp里面加入投票
...
    String votetxt = ParamUtils.getParameter(request,"votetxt");
    int votetype = ParamUtils.getIntParameter(request,"votetype",0);
...
   if (doPost && subjectOK && bodyOK) {
  if(fromPreview){
          newMessage = postMessage(request, reply, forumFactory, forum, thread,
                messageID, pageUser, name, email, subject, body);       
        }else{
          newMessage = postMessage(request, reply, forumFactory, forum, thread,
                messageID, pageUser, name, email, subject, body);
        }       
        thread = newMessage.getForumThread();
        //增加投票
        if(vote && votetxt!=null && !reply){
          int votenum = 0;
          String[] voteoptions = votetxt.split("/n");
          if(voteoptions.length>=10){
            votenum=10;
          }else{
            votenum = voteoptions.length;
          }
          votetxt="";
          for (int i = 0; i < votenum;i++) {
            votetxt = votetxt + voteoptions[i] + "/n";
          }
          Poll.addVoteThread(thread.getID(),votetxt,votetype==0,votenum);
          thread.setProperty("vote","true");//设置为投票帖子
        }


在显示投票内容的地方调用(我写在threadMode2.jsp里面)
<%//显示投票
String voteView = Poll.getVoteView(threadID,pageUser.getID());
out.print(voteView);
%>

简易在线投票系统(php)——投票页面

登陆后才可以进入投票页面,否则将自动回到主页。投票页面分为多选和单选两种形式。在投票完成后根据投票活动发布时设置的是否允许查看结果来确定是否自动跳转到结果页面。若不允许,会自动弹出提示框,并返回主页。...
  • tianyao9hen
  • tianyao9hen
  • 2016年01月10日 22:31
  • 3135

java编写投票功能需求分析

原文地址:http://www.phome.asia/forum/thread/20689.html
  • a694704123b
  • a694704123b
  • 2014年08月19日 20:00
  • 693

PHP+HTML简单实现BBS论坛与回帖

本文主要讲述如何通过PHP+HTML简单实现BBS论坛和发帖/回帖的功能,这是提取我们php项目的部分内容。主要内容包括:         1.通过JavaScript和Iframe实现局部布局界面 ...
  • Eastmount
  • Eastmount
  • 2015年03月14日 16:12
  • 9734

JAVA WEB项目开发案例精粹之二,投票系统

系统架构 应用服务器: Servlet容器:Tomcat 数据库服务器:MySQL 第三方工具(插件)应用 图表工具:JFreeChart 学知识点 使用jsp+struts2+...
  • github_36194559
  • github_36194559
  • 2016年09月22日 21:33
  • 1896

简易在线投票系统(php)——数据库

这个项目的数据库中有三张表,分别是:关于用户账号的users;关于投票基本信息的vote;关于投票数据存储的votetitle 1、users 共有三个表项 uid 这是账户的编码,由数据库自动...
  • tianyao9hen
  • tianyao9hen
  • 2016年01月10日 17:34
  • 1712

Android小项目之---ListView实现论坛管理效果

在android系统中,ListView的用法稍微复杂一点,配置Adpater就有几种方法,如ArrayAdapter,SimpleAdapter等。查了一些网上的相关例子,有很多都是用ListAct...
  • chaozhung
  • chaozhung
  • 2013年05月10日 08:38
  • 925

Android自定义View——投票进度条

Android自定义View——投票进度条原创作品:转载请注明出处效果展示功能属性介绍 ...
  • qq_23347751
  • qq_23347751
  • 2016年08月19日 12:14
  • 1488

H5页面上也能发起投票,让朋友圈HIGH起来!

我们经常在朋友圈里看到有人分享投票的活动,号召朋友们为他投票,票数最多的前几名可以获得奖品。这类投票活动非常受营销公司的欢迎,用户的参与度非常高,给营销公司带来的粉丝量非常可观。但是,使用这类投票平台...
  • ddwendy
  • ddwendy
  • 2016年10月19日 09:25
  • 2329

jsp在线投票系统实验

(1)数据库的建立 本次投票系统使用的是Mysql数据库。我共建了3张表:administrator表、topic表、optionlist表。administrator表是用户表,记录了管理员的帐号...
  • E8A1F6
  • E8A1F6
  • 2014年06月02日 15:32
  • 1196

简单的JavaWeb投票系统

目的帮她完成JavaWeb课程设计,也做为练手的小项目;功能1、可以实现在个人登陆,在线投票,票数统计的功能; 2、规定每个投票者每天只能投一票,并要求登录成功后才可以投票;分块1、Login类:实...
  • Run_the_youth
  • Run_the_youth
  • 2016年12月23日 19:46
  • 7326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为jive论坛加上投票功能
举报原因:
原因补充:

(最多只允许输入30个字)