php简易在线投票系统,ThinkPHP 框架 简易投票系统
最近學習php框架ThinkPHP.話說學習技術最簡單的方法就是動手,所以自己寫了一個簡單的投票系統(無美工...),環境是LAMP。
這個簡單投票系統是給我班做投票用的,寫的倉促,交互不好。第一次寫希望大家多多包涵。
ThinkPHP的規范這里就不說了,先來項目結構。
其中3個class.*.php是發送郵件的腳本。其他文件夾的作用學過ThinkPHP的應該都清楚,在此就不解釋了。
一.index.php
方
define('THINKPATH','./ThinkPHP/');
define('APP_NAME','Vote');
define('APP_PATH','.');
require_once(THINKPATH.'ThinkPHP.php');
APP::run();
?>
二.進入Lib/Action目錄。共4個Action類文件。
先看IndexAction.class.php
//?本文檔自動生成,僅供測試運行
classIndexActionextendsAction
{
publicfunctionindex(){$this->display();
}
}
?>
LoginAction.class.php
classLoginActionextendsAction{
publicfunctionindex(){
$this->display();
}
/****************************************************
-對用戶提交的用戶信息進行檢查
-***************************************************/
publicfunctioncheck(){
$snum=$_POST['snum'];
$pwd=$_POST['password'];
$User=M('classmates');//建立與數據庫think_classmates表的鏈接
if($User->where("snum='$snum'")->getField('password')==$pwd){
session_start();//會話打開
$_SESSION['snum']=$snum;
$this->redirect('Vote/index');//跳轉到用戶投票頁面
}
else{
$loginfailed="用戶名或密碼錯誤
";
$this->assign('loginfailed',$loginfailed);
$this->display('index');
}
}
}
?>
QuitAction.class.php
實現用戶的退出功能.銷毀用戶 SESSION.
classQuitActionextendsAction{
publicfunctionindex(){
session_start();
unset($_SESSION['username']);
$this->redirect('Index/index');
}
}
?>
VoteAction.class.php
classVoteActionextendsAction{
/******************************************/
//--顯示投票首頁信息?包括用戶信息的顯示?及
//--目前可以?進行投票的活動
/*******************************************/
publicfunctionindex(){
session_start();
if(isset($_SESSION['snum'])){
$snum=$_SESSION['snum'];
$User=M('classmates');
$username=$User->where("snum='$snum'")->getField('username');
$email=$User->where("snum='$snum'")->getField('email');
$hello="你好,".$username;
$quit=" | 退出
";
$information="用戶信息:
"."真實姓名:".$username."
郵箱:".$email;
$reset="重填";
$this->assign('hello',$hello);
$this->assign('quit',$quit);
$this->assign('information',$information);
$this->assign('reset',$reset);
$this->assign();
$this->display();
}
else
$this->redirect('Index/index');
}
/***************************************************/
//--用戶信息重置?包括用戶真實姓名,密碼,
//--電子郵件地址的設置
/**************************************************/
publicfunctionresets(){
session_start();
if(isset($_SESSION['snum'])){
$this->display();
}
else
$this->redirect('Index/index');
}
publicfunctionupdate(){
session_start();
if(isset($_SESSION['snum'])){
$User=M('classmates');
$snum=$_SESSION['snum'];
$data['username']=$_POST['username'];
$data['password']=$_POST['password'];
$data['email']=$_POST['email'];
$User->where("snum='$snum'")->save($data);
$updatesuccess="信息更新成功
";
$this->assign('updatesuccess',$updatesuccess);
$this->redirect('Vote/index');
}
else
$this->redirect('Index/index');
}
/*******************************************************/
//--用戶參與的一個投票活動。
//--主要功能是判斷用戶參與的是哪種投票活動
/******************************************************/
publicfunctionvote(){
if(isset($_SESSION['snum'])){
$id=$_GET['id'];
/*if($id==1)
echo?"精神文明";
`else?if?($id==2)
echo?"優秀團員";*/
if($id==1){
$actionname="精神文明投票:
";
$actiontype='jingshenwenming';
}
elseif($id==2){
$actionname="優秀團員投票:
";
$actiontype='youxiutuanyuan';
}
$this->assign('actionname',$actionname);
$this->assign('actiontype',$actiontype);
$this->display();}
else
$this->redirect('Index/index');
}
/*****************************************************************/
//--對用戶的投票進行計算,并更新數據庫
//--顯示用戶此次投票活動的選擇
/*****************************************************************/
publicfunctioncalculate(){
if(isset($_SESSION['snum'])){
$actiontype=$_GET['type'];//獲得投票活動類型
$schoolnumber=array();//聲明復選框數組
$schoolnumber=$_POST['schoolnumber'];
$list='你選的候選人如下:
';//顯示提示信息
$Can=M('final');//創建投票活動表連接
$User=M('classmates');//創建用戶信息表連接
foreach($schoolnumberas$candidate){
if($candidate!=''){//如果某個人被選中
$data[$actiontype]=$Can->where("snum='$candidate'")->getField($actiontype);
$data[$actiontype]++;
$Can->where("snum='$candidate'")->save($data);
$list.=$User->where("snum='$candidate'")->getField('username');
$list.='
';
}
}
$this->assign('list',$list);
$this->display();
}
else
$this->redirect('Index/index');
}
}
?>
三.進入項目目錄下的/Tpl/default/目錄 共3個模板目錄。
進入Index :
index.html
歡迎投票中心登錄
進入Login:
index.html
0903的娃趕快登錄吧~{$loginfailed}
學 號:
密 碼:
進入Vote:
共4個模板文件。
index.html
投票~{$loginsuccess}
{$hello}{$quit}
{$information}
{$reset}
你的投票:
投票活動 | 狀態 |
| 精神文明 | 未投票 |
| 優秀團員 | 未投票 |
resets.html
用戶信息~真實姓名:
 密    碼 :
e-mail   :
calculate.html
投票結果~{$list}
返回
vote.html
投票~{$actionname}
李嘉峻
聞亦晨
高子涵
四.回到主項目目錄。解釋一下三個class.*.php文件。這三個文件是phpmailer解壓后得到的文件,將它們復制到項目中就可以使用phpmailer發送郵件了。
最后一個文件是Mail.php 實現郵件的發送功能。
require("class.phpmailer.php");
/****************************************/
//--應用linux的crontab來定時執行此腳本,
//--如果到達定時的時刻則向think_classmates
//--中所有的用戶發送投票結果的郵件
//--在規定時間之前沒有投票的用戶算作放棄
/****************************************/
/*************************************/
//--連接數據庫函數
/*************************************/
functionConnect(){
$conn=@mysql_connect("localhost","root","changyisheng");
if(!$conn){
die("連接數據庫失敗:".mysql_error());
}
mysql_select_db("Vote",$conn);
mysql_query("set?character?set?'utf8'");
}
/*************************************/
//--將表中的用戶數據根據活動分表
//--每一個投票活動一個數組
/*************************************/
functionDataToArray(){
//$User=M('final');//查詢表think_final
//$list=$User->select();
Connect();//連接數據庫
$sql="SELECT?*?FROM?think_final";
$list=mysql_query($sql);//進行查詢
while($tt=mysql_fetch_array($list)){
$snum=$tt['snum'];
$actionname1=$tt['jingshenwenming'];
$actionname2=$tt['youxiutuanyuan'];
$list1[$snum]=$actionname1;
$list2[$snum]=$actionname2;
}
$result[0]=$list1;
$result[2]=$list2;
return$result;
}
/**************************************/
//--將傳進來的$array數組根據票數進行排序
//--結果返回排序好的數組
/*************************************/
functionArrayToData($array){
foreach($arrayas$action){
arsort($action);
$list[]=$action;
}
//??dump($list);
return$list;
}
/**************************************/
//--將排序好的數組中學號翻譯成學生姓名
//--結果返回一個文本(對人友好的)
/**************************************/
functionNumberToName($array){
//$User=M('classmates');//學生信息數據庫
Connect();
$sql="SELECT?*?FROM?think_classmates";
//進行查詢
$mark=1;
foreach($arrayas$action){
if($mark==1)
$list.="精神文明投票結果:
";
elseif($mark==2)
$list.="優秀團員投票結果
";
$mark++;
foreach($actionas$snum=>$value){
//echo?$snum;//輸出學生學號
//$username=$User->where("snum='$snum'")->getField('username');//獲得學生姓名
$array=mysql_query($sql);
while($row=mysql_fetch_array($array)){
if($row['snum']==$snum){
$username=$row['username'];
$list.=$username.":".$value."票
";
break;
}
}
}
}
return$list;
}
if(time()==mktime(11,16)){
//連接數據庫
$mail=newPHPMailer();//建立郵件發送類
$mail->IsSMTP();//使用SMTP發送發送
$mail->Host="smtp.qq.com";//您的企業郵局域名
$mail->SMTPAuth=true;//啟用SMTP驗證功能
$mail->Username="632849504@qq.com";//郵局用戶名
$mail->Password="changyisheng";//郵局密碼
$mail->Port=25;
$mail->From="632849504@qq.com";//郵件發送者email地址
$mail->FromName="icys";
$conn=@mysql_connect("localhost","root","changyisheng");
if(!$conn){
die("連接數據庫失敗:".mysql_error());
}
mysql_select_db("Vote",$conn);
mysql_query("set?character?set?'utf8'");
$sql="SELECT?*?FROM?think_classmates";
$result=mysql_query($sql);//進行查詢
while($row=mysql_fetch_array($result)){
//??echo?"學號:".$row['snum']."
";
//??echo?"真實姓名:".$row['username']."
";
//??echo?"密碼:".$row['password']."
";
//??echo?"email".$row['email']."
";
$address=$row['email'];//接收方郵箱地址
$username=$row['username'];//收件人姓名
$mail->AddAddress("$address","username");//收件人地址,收件人姓名
$mail->IsHTML(true);//以HTML方式進行發送
$mail->Subject="投票結果";
//$mail->Body="Hello";
/*************************/
//--郵件內容
/*************************/
$array=DataToArray();
//var_dump($array);
$array=ArrayToData($array);
//var_dump($array);
$list=NumberToName($array);
$mail->Body=$list;
if(!$mail->Send()){
echo"郵件發送失敗.
";
echo"錯誤原因:".$mail->ErrorInfo;
exit;
}
//echo?"郵件發送成功";
}
}
?>
最后要實現定時發送郵件的功能(我是每天的11點16分給我的郵箱發送郵件)要更改一下crontab文件 。linux下是在命令行下 crontab -e 回車
在最底下(因為原來沒有設過)加入下面一行*/1 * * * /usr/bin/php?? /var/www/htdocs/Vote/Mail.php
至于其中每一項代表什么,大家可以查一下crontab網上有很多講解。
數據庫設計如下:
think_classmates表:
think_final表:
總結
以上是生活随笔為你收集整理的php简易在线投票系统,ThinkPHP 框架 简易投票系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东电信IPTV机顶盒HG680-J私人
- 下一篇: IPTV收官之战-----机顶盒浏览器内