投票系统投票界面
投票界面
投票界面包括用戶的登陸,所有投票題目的呈現(xiàn),每個(gè)投票信息的具體呈現(xiàn)
用戶登錄界面的具體代碼如下
這里涉及到一個(gè)賬號(hào)登陸問(wèn)題,這里包括一個(gè)普通用戶的登陸進(jìn)入投票列表界面,還有一個(gè)是管理員進(jìn)入后臺(tái)管理系統(tǒng)(進(jìn)入后臺(tái)管理系統(tǒng)的代碼見之后的文章)。賬號(hào)密碼的登陸,首先賬號(hào)密碼要匹配才能登陸,其次是防止通過(guò)url直接跳過(guò)賬號(hào)密碼的檢測(cè)進(jìn)入后臺(tái)管理系統(tǒng),解決方法是先對(duì)$_SESSION['user']'和$_SESSION['name']初始化為null,再對(duì)賬號(hào)密碼進(jìn)行檢測(cè),然后再對(duì)管理員身份進(jìn)行檢測(cè)。具體代碼如下:
<?php include("../sqlsafe.php");include("../conn.php");$_SESSION['user'] = $_SESSION['admin'] = NULL;$username = $_POST['username'];$passwd = $_POST['passwd'];$sql = "select * from users where username='$username' and passwd='$passwd';";$result = $db->query($sql);if($result->num_rows > 0){$rank = $db->query("select * from users where username='$username' and admin='1'");@session_start();if($rank->num_rows > 0){$_SESSION['admin']=true;$_SESSION['user']=false;$_SESSION['name']=$username;echo "<meta http-equiv=\"Refresh\" content=\"0;url=../index.php\">";}else{$_SESSION['user']=true;$_SESSION['admin']=false;$_SESSION['name']=$username;echo "<meta http-equiv=\"Refresh\" content=\"0;url=../list.php\">";}}else{echo "<script>alert('賬戶或密碼錯(cuò)誤')</script>";echo "<meta http-equiv=\"Refresh\" content=\"0;url=login.html\">";}?>而防止通過(guò)url跳過(guò)檢測(cè)的方法是通過(guò)session檢測(cè)是否已經(jīng)登陸過(guò),若沒有,則會(huì)跳轉(zhuǎn)到登陸界面
<?php@session_start();if( !isset($_SESSION['admin']) || !isset($_SESSION['user']) || ( $_SESSION['user']!== true && $_SESSION['admin']!== true ) ){echo "<meta http-equiv=\"Refresh\" content=\"0;url=login.html\">";exit();}其中conn.php的作用是鏈接數(shù)據(jù)庫(kù),具體代碼為
<?php$db = new mysqli('127.0.0.1','root','lrwje520','simplevote1');$db->query("SET NAMES utf8");if(mysqli_connect_errno()){echo "據(jù)庫(kù)連接失敗";exit();} ?>投票頁(yè)面的呈現(xiàn),這其中的難點(diǎn)就是多個(gè)投票標(biāo)題的呈現(xiàn),解決方法就是對(duì)數(shù)據(jù)庫(kù)的提取,即$result_name = $db->query ( "select * from votename" );這是對(duì)整個(gè)表的提取,接下來(lái)是對(duì)表中每一行數(shù)據(jù)的提取這里用$row_name = mysqli_fetch_assoc ( $result_name ),當(dāng)然 mysqli_fetch_assoc可以改成mysqli_fetch_array,作用是將以一個(gè)普通的關(guān)聯(lián)數(shù)組的形式返回一條結(jié)果記錄,用while語(yǔ)句對(duì)其進(jìn)行判斷,每次讀取一行,直到讀取完全部投票題目,就能實(shí)現(xiàn)把所有投票題目呈現(xiàn)出來(lái),具體代碼如下:
<?php include("conn.php");@session_start();header("Cache-control:private");if( $_GET['do'] ){if($_GET['do']=="logout"){unset($_SESSION['user']);unset($_SESSION['name']);@session_destroy();}}$result = $db->query("select * from sysconfig");$row = mysqli_fetch_assoc($result);$username = $_SESSION['name'];$result1 = $db->query("select * from users where username = '$username'");$row1 = mysqli_fetch_assoc($result1); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=2.0,width=device-width" /> <title></title><script type="text/javascript" src="admin/js/jquery.min.js"></script> <link rel="stylesheet" href="main1.css" type="text/css" media="screen" /></head> <body> <div class="main"><div id="header" ><div ><?php if( !isset($_SESSION['user']) || $_SESSION['user']!==true ){ ?><a href="admin/login.html">登錄投票</a><?php }else{ ?><span>你好,<?php echo $row1['name']; ?></span><a href="admin/index.php"> 查看投票數(shù)據(jù)</a><a href="admin/alter_password.html"> 修改密碼</a><a href="index.php?do=logout"> 登出</a><?php } ?></div></div><form action="index.php" method="get"><div class="content"><div><h1><?php echo $row['vote_name']; ?></h1><div class="description"><?php echo $row['description']; ?></div> </div><?php$num = 0;$result_name = $db->query ( "select * from votename" );while ( $row_name = mysqli_fetch_assoc ( $result_name ) ) {$num += 1;$a = $row_name['question_name'];?><div class="mcontent"><a class="list-link" href="index.php?question_name=<?php echo $a ?>"><span name='question_name' id="question_name"><h2><?php echo $num.".".$row_name['question_name']; ?></h2></span></a></div><?php } ?><div style="clear:both;"></div></div><?php if($result_name->num_rows > 0){?><?php }else{ ?><h1>當(dāng)前沒有投票</h1><?php } ?><br></div></form></div> </body> </html>這當(dāng)中if( !isset($_SESSION['user']) || $_SESSION['user']!==true ){ ?>
<a href="admin/login.html">登錄投票</a>的作用也是防止通過(guò)url跳過(guò)檢測(cè),當(dāng)然也是使用了session來(lái)判斷是否已經(jīng)登陸,若還未登錄則跳轉(zhuǎn)到登陸界面。
當(dāng)實(shí)現(xiàn)了對(duì)所有投票題目的呈現(xiàn)后,就要考慮每一個(gè)投票的具體呈現(xiàn),這里涉及到每個(gè)投票內(nèi)容與該投票題目的匹配問(wèn)題,所以在上述的代碼中,我將每一個(gè)投票題目設(shè)置了<a>標(biāo)簽,并且讓其跳轉(zhuǎn)頁(yè)面的url設(shè)置href="index.php?question_name=<?php echo $a ?>"當(dāng)中的$a就是該投票題目,這樣一來(lái)在每個(gè)投票題目具體的呈現(xiàn)頁(yè)面中我就可以通過(guò)解析該url來(lái)獲取它的投票題目,進(jìn)而獲取該投票題目的全部?jī)?nèi)容,具體代碼如下:
上述代碼中獲取url的方法為
$url = $_SERVER["QUERY_STRING"];//獲取完成url
$test = parse_url("$url");//將url轉(zhuǎn)變成數(shù)組
$name = $test[path];//提取url中path項(xiàng),即question_name=$a
$start = strrpos($name, '=');
$unquestion_name = substr($name , $start+1);//獲取亂碼的question_name
$question_name=urldecode($unquestion_name);//解析亂碼的question_name
在選項(xiàng)的呈現(xiàn)中包括一個(gè)是單選或者是多選的問(wèn)題,在數(shù)據(jù)庫(kù)中對(duì)單選或多選的題目設(shè)置了標(biāo)簽,votetype是0則為單選,1為多選所以有個(gè)判斷語(yǔ)句判斷但單選還是多選,而選項(xiàng)的呈現(xiàn)則和所有投票題目呈現(xiàn)的原理一樣。
這里還包括對(duì)應(yīng)照片的呈現(xiàn),我的方式是將照片的信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,而照片則存儲(chǔ)在指定文件夾,通過(guò)尋找數(shù)據(jù)庫(kù)中對(duì)應(yīng)照片的名字到指定文件夾尋找該照片并呈現(xiàn)出來(lái),輸出照片的代碼echo "<img src=\"admin/upload/lk/".$row[filename]."\"><br>"。
總結(jié)
- 上一篇: 昭阳k20-80拆机过程
- 下一篇: 济南服务器管理系统方案,物品管理系统和物