在网上我们经常能看到投票,本文就是介绍一个简单的投票如何做。
1:代码变量介绍
$vote:题干实体。
$options:选项集合。
2:前台部分代码及注释
//题干
<p class="c_6d f14 ti2">
<?php if(count($vote) > 0 && $vote=$vote[0]):?>
<?php echo mb_substr($vote['name'], 0, 55, 'utf8');?>
<?php endif;?>
</p>
//操作选项
<form id="voteForm">
<table cellpadding="0" cellspacing="0">
<?php foreach ($options as $v):?>
<tr>
<td width="15">
//判断题是单选还是多选 注意name的值:'option[]',value的值:是选项的编号
<input name='option[]' value="<?php echo $v['id'];?>" type="<?php echo $vote['type'] == 1 ? 'radio':'checkbox'?>" />
</td>
<td width="200">
//选项文本
<a title="<?php echo $v['name'];?>" target="_blank" href="javascript:void(0)" class="f14">
<?php echo mb_substr($v['name'], 0, 17, 'utf8');?>
</a>
</td>
<td width="50" class="tr">
<span class="c_6d">
//得到的票数 注意span的命名方式 用'score'+选项的编号
<span id="score<?php echo $v['id'];?>"><?php echo $v['count'];?></span>票
</span>
</td>
</tr>
<?php endforeach;?>
<tr>
<td colspan="3" height="40">
<input id="voteBtn" name="submit" type="button" class="button_tp" value="" />
<input id="voteReset" type="reset" style="display:none" />
</td>
</tr>
</table>
</form>
<script type="text/javascript">
$(function(){
$("#voteBtn").click(function(){
var flag = false;//标记是否选择了选项
var form = $("#voteForm");//form表单对象
var options = form.find("input[name='option[]']");//选项集合
//如果用户选择了投票选项 把flag设置true 退出循环
$(options).each(function(i){
if($(this).attr('checked') == 'checked'){
flag = true;
return false;
}
});
if(!flag){
alert('请选择投票选项');
return false;
}
jj.ajax(
"<?php echo site_url() . '?c=newsc&m=vote'?>",
form.serialize(),
function(data){
//后台返回的数据格式是 [{'id':1},{'id':2}] 是用户投的选项的编号的集合
var ids = eval('(' + data + ')');
//处理前台投票选项得到得票数
$(ids).each(function(i){
var id = $(this).attr('id');
var score = $("#score" + id);
var oldScore = parseInt(score.html(), 10);
score.html(oldScore + 1);
});
$("#voteReset").click();
alert('投票成功');
}
);
});
});
</script>
3:后台代码及注释
public function vote(){
$options = $_POST['option'];//取投的选项的编号集合
//更新选项所得票数 并拼写出[{'id':1},{'id':2}]这样的字符串
$msg = '[';
for($i=0,$j=count($options); $i<$j; $i++){
$id = $options[$i];
$where = array('id' => $id);
$model = $this->optionm->getModel($where);
$d['count'] = intval($model['count']) + 1;
$this->optionm->update($d, $where);
if($i != $j-1){
//注意末尾有一个英文的逗号','
$msg .= '{id:' . $id . '},';
}else{
$msg .= '{id:' . $id . '}';
}
}
$msg .= ']';
echo $msg;
}