php投票系統(tǒng)之增加與刪除投票(管理員篇)
關(guān)于投票系統(tǒng)怎么樣怎么樣的引言就不多說,這不是畢業(yè)設(shè)計(jì),主要說一下使用php實(shí)現(xiàn)投票系統(tǒng),與其他普通系統(tǒng)一樣,分為兩部分,一個(gè)是管理員部分,一個(gè)是普通用戶部分。
關(guān)于投票系統(tǒng)的管理部分,非常之簡單,提供兩部分的功能,增加投票與刪除投票
關(guān)鍵在于設(shè)計(jì)好數(shù)據(jù)庫的表,擬定于這樣存一個(gè)投票,voteparent表存這個(gè)投票的標(biāo)題、描述是否被刪除,votechildren表存這個(gè)投票的子選項(xiàng)與投票數(shù)
一、基本目標(biāo)
首先投票系統(tǒng)是這樣的:
三個(gè)鏈接,點(diǎn)進(jìn)去能夠直接進(jìn)行相關(guān)功能的操作,本文主寫管理員部分,普通用戶部分使用到j(luò)pgraph另開一章說明
中間按理說應(yīng)該有登錄系統(tǒng)的,這里不是重點(diǎn),可以參考我之前的《【php】登錄系統(tǒng)與輸出瀏覽者信息》(點(diǎn)擊打開鏈接)
點(diǎn)開添加投票選項(xiàng),會是如下界面,能夠增加與刪除投票選項(xiàng),最多10個(gè)投票選擇,至少2個(gè)頭像選項(xiàng),超過與不足會提示:
預(yù)覽圖是使用IE6的,所以添加與刪除選項(xiàng)反應(yīng)得比較慢,管理員填完投票信息之后,就能成功地添加投票了。
提交前會向管理員詢問是否添加,防止誤操作,這里的系統(tǒng)其實(shí)還應(yīng)該使用xajax來調(diào)查這個(gè)投票數(shù)據(jù)里面是否有,而且有任意一項(xiàng)選項(xiàng)為空應(yīng)該不讓添加,詳情可以參考《【php】注冊系統(tǒng)和使用Xajax即時(shí)驗(yàn)證用戶名是否被占用》一文(點(diǎn)擊打開鏈接),這里沒做,因?yàn)楸疚闹饕v投票系統(tǒng)核心實(shí)現(xiàn),這里就不扣這些小細(xì)節(jié)。
再點(diǎn)開投票系統(tǒng)的刪除投票部分:
在每一個(gè)投票的末尾都有刪除按鈕,點(diǎn)擊每一個(gè)投票標(biāo)題能夠查看本投票:
點(diǎn)擊刪除按鈕同樣會有詢問,然后,點(diǎn)擊取消什么都不會發(fā)生,點(diǎn)擊確認(rèn)則能夠成功刪除投票:
上圖中能夠明顯發(fā)現(xiàn)刪除前有4個(gè)投票,然后刪除之后僅有一條投票。
二、基本思想
投票系統(tǒng)的管理員部分沒有什么新的技術(shù)還是數(shù)據(jù)庫的操作,首先voteparent表的結(jié)構(gòu)如下:
id是自增列,title是這個(gè)投票的大標(biāo)題,比如上面的“我?guī)洸粠洝敝?,之后的text用來存放對這個(gè)投票的描述,未了不使自增列斷開,與刪除的投票可查,采用為刪除的方式,設(shè)置刪除位isdel,呈現(xiàn)出來的,這是刪除位為0的投票。
votechildren表如下,id是自增列,text用來存放每一個(gè)子選項(xiàng)的描述,count用來存放這個(gè)自選項(xiàng)的票數(shù),parentid用來存放這個(gè)子選項(xiàng)是屬于哪個(gè)投票的。這里雖然很明顯與voteparent表存在著參考性約束,但沒有必要設(shè)置外鍵,免得操作時(shí)麻煩
值得注意的是,兩張表建立之后,記得翻到table options標(biāo)簽卡,把這兩張表的編碼都設(shè)置為utf-8,避免亂碼
站點(diǎn)的目錄結(jié)構(gòu)則如下所示:
本文只說明createvote.html,createvote.php,delvote.php,delvotehandle.php,index.html五頁的內(nèi)容
三、制作過程
1、index.html
首先是最基本的,僅有三個(gè)鏈接的index.html,這里就不說了,僅有三個(gè)a標(biāo)簽,剛學(xué)html的人都會了,代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>投票系統(tǒng)</title> </head> <body> <a href="createvote.html">添加投票(管理員部分)</a><br /> <a href="delvote.php">刪除投票(管理員部分)</a><br /> <a href="voteindex.php">投票(普通用戶部分)</a> </body> </html>
2、createvote.html
添加投票頁,整個(gè)添加投票頁處理兩個(gè)自有js函數(shù)的按鈕外,是一個(gè)大表單,其中還有一個(gè)隱藏域用來記錄現(xiàn)在有多少個(gè)選項(xiàng),
為下一步添加投票操作頁createvote.php提供操作基礎(chǔ)。
下面就這樣進(jìn)行基本說明,javascript對web節(jié)點(diǎn)的操作,可以參考我之前的《JavaScript針對網(wǎng)頁節(jié)點(diǎn)的增刪改查用法實(shí)例》一文(點(diǎn)擊打開鏈接)
注意到添加的子選項(xiàng)節(jié)點(diǎn)會很有規(guī)律的以opt1,opt2,opt3……那樣排列,這是為了方便下面的操作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>創(chuàng)建投票</title> </head> <body> <h1>增加投票</h1> <button onclick="createbtn()">增加選項(xiàng)</button> <button onclick="delbtn()">刪除選項(xiàng)</button> <!--onsubmit屬性是為了下面腳本能夠順利彈出確認(rèn)框,用戶確認(rèn)之后才提交這個(gè)表單--> <form action="createvote.php" method="post" onsubmit="return check()"> <!--這里定義div的id是為了下面的javascript的操作,而且div不像p那樣會參加很大的行距--> <div id="createform"> <div> 投票主題:<input type="text" name="title" style = "width:70%"/> </div> <div> 投票描述:<input type="text" name="text" style = "width:70%"/> </div> <div> 選項(xiàng)1:<input type="text" name="opt1" style = "width:70%"/> </div> <div> 選項(xiàng)2:<input type="text" name="opt2" style = "width:70%"/> </div> </div> <!--這里是用來記錄有多少個(gè)選項(xiàng)的--> <input type="hidden" id="nodetotal" name="nodetotal" /> <input type="submit" value="提交" /> </form> <a href="index.html">返回</a> </body> </html> <script> //腳本部分,是現(xiàn)實(shí)的關(guān)鍵 //開始先記錄當(dāng)前的選項(xiàng)數(shù)是2,并存入hidden域,到時(shí)候隨表單一起提交 var nodenum=2; document.getElementById("nodetotal").value=nodenum; //下面是“增加選項(xiàng)”“刪除選項(xiàng)”的按鈕操作 function createbtn(){ //如果選項(xiàng)少于10個(gè)才操作 if(nodenum<10){ nodenum++; var node=document.createElement("div"); //操作節(jié)點(diǎn)如果涉及html文本,寫成單引號就不用寫\"這么難看的雙引號的轉(zhuǎn)義字符 node.innerHTML="選項(xiàng)"+nodenum+":<input type='text' name='opt"+nodenum+"' style='width:70%' />"; document.getElementById("createform").appendChild(node); //記得增加完每個(gè)節(jié)點(diǎn),要更新以下hidden域里面的節(jié)點(diǎn)數(shù)哦! document.getElementById("nodetotal").value=nodenum; } else{ alert("最多10個(gè)選項(xiàng)"); } } //邏輯跟上面一樣 function delbtn(){ if(nodenum>2){ nodenum--; d=document.getElementById("createform"); d.removeChild(d.lastChild); document.getElementById("nodetotal").value=nodenum; } else{ alert("至少2個(gè)選項(xiàng)"); } } //表單確認(rèn)框的腳本,表單onsubmit為true才能夠提交嘛,confirm點(diǎn)確定則返回true反之為false function check(){ return confirm("確定提交?"); } </script>
3、createvote.php
添加投票處理頁,這里插入數(shù)據(jù)庫要注意,先插入voteparent,再找出剛插入voteparent的那條記錄的id,插入votechildren表的parentid,這里找parentid需要注意,不要通過尋找最后一條插入記錄的方法,找到parentid,因?yàn)檫@樣如果多個(gè)管理員在操作數(shù)據(jù)庫的并發(fā)時(shí),會產(chǎn)生混亂由于這里有中文,操作數(shù)據(jù)庫之前,記得加上mysql_query("set names utf8");這句話,詳情請看代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>添加投票處理中……</title> </head> <body> <?php //首先取出剛才要添加投票的title與text,隱藏域中的選項(xiàng)數(shù) $ptitle=$_REQUEST["title"]; $ptext=$_REQUEST["text"]; $nodetotal=$_REQUEST["nodetotal"]; $con=mysql_connect("localhost","root","root"); //連接數(shù)據(jù)庫 if(!$con){ die("連接失??!"); } mysql_select_db("test",$con); mysql_query("set names utf8"); //把title與text插入到voteparent表,設(shè)定刪除位是0之后,系統(tǒng)會自動生成id mysql_query("insert into voteparent(title,text,isdel) values ('".$ptitle."','".$ptext."',0);"); //再通過title找到剛才系統(tǒng)生成的id $pid; $result=mysql_query("select id as pid from voteparent where title='".$ptitle."';"); while($row=mysql_fetch_array($result)){ $pid=$row["pid"]; } //建立一個(gè)php數(shù)組,里面存放每一個(gè)子選項(xiàng) $optarr=array(); //選項(xiàng)的多少決定了我們的循環(huán)次數(shù) for($i=1;$i<$nodetotal+1;$i++){ $optarr[$i]=$_REQUEST["opt${i}"]; mysql_query("insert into votechildren(text,count,parentid) values ('".$optarr[$i]."',0,'".$pid."');"); }; mysql_close($con); ?> </body> </html> <script> alert("添加成功"); window.location.href="index.html"; </script>
以上,管理員添加投票功能做完,下面是管理員刪除投票功能
4、delvote.php
先把voteparent中所有的刪除位不為1的投票查詢出來,然后降序排列,因?yàn)槿藗兿M瓤吹阶钚绿砑拥耐镀保晒?jié)點(diǎn)的時(shí)候設(shè)置好每一個(gè)投票的刪除按鈕id,這個(gè)id就是在數(shù)據(jù)庫中的voteparent的id,方便后續(xù)操作,刪除按鈕的腳本不用寫什么,就是把這個(gè)id傳到delvotehandle.php,刪除處理頁中就可以了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>刪除投票</title> </head> <body> <h1>刪除投票</h1> <?php $con=mysql_connect("localhost","root","root"); if(!$con){ die("連接失?。?); } mysql_select_db("test",$con); mysql_query("set names utf8"); $result=mysql_query("SELECT * FROM voteparent where isdel=0 order by id desc;"); $i=1; while($row=mysql_fetch_array($result)){ echo "<div style='margin-right:10px;float:left'>投票${i}:<a href='vote.php?id=${row["id"]}'>${row["title"]}</a></div><div style='float:left'><button id='${row["id"]}' onclick='deljs(this.id)'>刪除</button></div><div style='clear:both'></div>"; $i++; } mysql_close($con); ?> <p> <a href="index.html">返回</a> </p> </body> </html> <script> function deljs(id){ if(confirm("確認(rèn)刪除?")){ window.location.href="delvotehandle.php?id="+id; } }
</script>基本思想就是這樣,其中這個(gè)頁面采用了div布局,而不是table,詳情可以參考我之前的《【CSS】關(guān)于div的對齊與網(wǎng)頁布局》(點(diǎn)擊打開鏈接)
5、delvotehandle.php
取到剛才傳過來的id,根據(jù)這個(gè)id把相應(yīng)的isdel刪除位設(shè)定為1即可
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>刪除投票處理中……</title> </head> <body> <?php $pid=$_REQUEST["id"]; $con=mysql_connect("localhost","root","root"); if(!$con){ die("連接失敗!"); } mysql_select_db("test",$con); mysql_query("set names utf8"); mysql_query("update voteparent set isdel=1 where id=".$pid.";"); mysql_close($con); ?> </body> </html> <script> alert("刪除成功"); window.location.href="index.html"; </script>
以上就是投票系統(tǒng)管理員部分,增加投票與刪除投票的過程,按理說相關(guān)的處理頁面,還需要進(jìn)行session的保護(hù),
避免直接輸入網(wǎng)址就能夠訪問,這里沒寫,可以參考我之前的《php+MySql實(shí)現(xiàn)登錄系統(tǒng)與輸出瀏覽者信息功能》(點(diǎn)擊打開鏈接)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用GROUP BY的時(shí)候如何統(tǒng)計(jì)記錄條數(shù) COUNT(*) DISTINCT
在有g(shù)roup by的時(shí)候,如何統(tǒng)計(jì)結(jié)果記錄的數(shù)量?需要的朋友可以參考下。2011-04-04php和html的區(qū)別點(diǎn)詳細(xì)總結(jié)
在本篇文章里小編給大家整理了關(guān)于php和html的區(qū)別點(diǎn),有需要的朋友們可以參考下。2019-09-09詳解phpmyadmin相關(guān)配置與錯(cuò)誤解決
這篇文章主要介紹了詳解phpmyadmin相關(guān)配置與錯(cuò)誤解決的相關(guān)資料,希望通過本文能幫助到大家,讓大家遇到這種問題可以解決,需要的朋友可以參考下2017-10-10php定時(shí)計(jì)劃任務(wù)與fsockopen持續(xù)進(jìn)程實(shí)例
本文介紹了php中定時(shí)計(jì)劃任務(wù)的實(shí)現(xiàn)代碼,以及php持續(xù)進(jìn)程fsockopen的用法,需要的朋友可以參考下2014-05-05