這個(gè)圖是那位朋友的,從題目上來(lái)看,嘻嘻應(yīng)該是運(yùn)營(yíng)商滴干活。關(guān)于答題系統(tǒng)之前有朋友提過(guò),我一直沒(méi)時(shí)間搞,其實(shí)做這個(gè)是非常簡(jiǎn)單的,趁這次機(jī)會(huì)干脆做下把源碼提供給大家。 源碼請(qǐng)?jiān)诠娞?hào)里輸入“微信代碼”查看下載連接,然后將下載鏈接自己想辦法搞到PC上然后再下載……建議先下載安裝了再看文章,以下是注意事項(xiàng): 1、與微信接口文件為wx_interface.php,大家可以將里面源代碼復(fù)制粘貼到自己的接口文件里覆蓋掉。 2、其他的文件全部上傳到SAE的代碼編輯里,有同名文件可以先刪除原來(lái)文件再上傳。 3、文件說(shuō)明: base-class.php 自定義函數(shù),無(wú)需改動(dòng) wx_tpl.php 回復(fù)消息的模板,無(wú)需改動(dòng) question_manager.php 題庫(kù)管理,無(wú)需改動(dòng) question_add.php 添加題目,無(wú)需改動(dòng) wx_interface.php 微信接口文件,根據(jù)自己實(shí)際修改名稱(chēng) 數(shù)據(jù)庫(kù)創(chuàng)建方法請(qǐng)查看《微信公眾平臺(tái)入門(mén)到精通》Vol.15,創(chuàng)建代碼在數(shù)據(jù)庫(kù).txt里。數(shù)據(jù)庫(kù)分兩張表,一張是問(wèn)題表,一張是答題情況表,問(wèn)題庫(kù)的結(jié)構(gòu)我就參照上圖來(lái)了,答題情況表結(jié)構(gòu)為序號(hào)、答題時(shí)間、回答的題目序號(hào)、答題消耗時(shí)間、答題錯(cuò)誤次數(shù)。 一、題庫(kù)建立 做問(wèn)答系統(tǒng)首先是創(chuàng)建一個(gè)題庫(kù),一般的題目會(huì)有單選題、多選題和問(wèn)答題,鑒于手機(jī)用戶(hù)使用方便考慮,建議使用單選題。 添加題目的文件為question_add.php,大致的代碼結(jié)構(gòu)跟上次的通訊錄后臺(tái)一樣,唯一多的是一個(gè)題目選項(xiàng),題目選項(xiàng)我是用textarea這個(gè)控件,這是一個(gè)支持多行輸入的輸入框,并且可以直接存放到數(shù)據(jù)庫(kù),并且方便的按原來(lái)樣子輸出顯示。 后臺(tái)的效果如下圖所示: 二、從題庫(kù)隨機(jī)提取不重復(fù)的N個(gè)問(wèn)題 所有做問(wèn)答系統(tǒng)的朋友都會(huì)問(wèn)這個(gè)問(wèn)題,如何從題庫(kù)中隨機(jī)的提取N個(gè)不重復(fù)的,今天在教程里就有這段代碼。 其實(shí)Mysql本身是有自己的獲取隨機(jī)記錄的函數(shù),但是那個(gè)效率太低,如果數(shù)據(jù)庫(kù)里記錄超過(guò)幾萬(wàn),就會(huì)非常慢。 三、用戶(hù)答題流程 用戶(hù)答題整個(gè)程序都在wx_interface.php里,我在這里簡(jiǎn)單的介紹一下。 為了方便隨時(shí)修改每次讓用戶(hù)回答的題目數(shù),在第17行設(shè)了一個(gè)抽取題目數(shù),修改這個(gè)數(shù)字就可以控制用戶(hù)回答題目的數(shù)量。 一個(gè)友好的關(guān)注歡迎引導(dǎo)詞是必不可少的,如何設(shè)置歡迎詞請(qǐng)查閱第9期教程。用戶(hù)輸入“GO”后就進(jìn)入了答題環(huán)節(jié)。 首先是從題庫(kù)中提取N個(gè)不重復(fù)的隨機(jī)題目,獲取的題目是數(shù)組形式,我們將這些題目用serialize序列化后保存到緩存里(命名為:微信用戶(hù)OPENID_question_data),接下來(lái)用戶(hù)答題就是從這個(gè)緩存里獲取。 設(shè)定答題的當(dāng)前序號(hào)為setp_1并保存到緩存,用戶(hù)互動(dòng)時(shí)就通過(guò)判斷這個(gè)緩存是否有值決定是否是答題狀態(tài)。 設(shè)定開(kāi)始的時(shí)間和初始化錯(cuò)誤次數(shù)并保存到緩存,用來(lái)記錄用戶(hù)的一些答題數(shù)據(jù)。 由于答題是一個(gè)循環(huán)的過(guò)程,因此我們?cè)谟脩?hù)輸入go的時(shí)候只是把相關(guān)數(shù)據(jù)初始化放入緩存并不輸出問(wèn)題,而是單獨(dú)寫(xiě)一個(gè)每次答題都會(huì)用到的循環(huán)過(guò)程來(lái)做答題,這個(gè)循環(huán)過(guò)程包括: 1、從緩存中取出數(shù)據(jù) 2、判斷當(dāng)前是否在答題狀態(tài),即question_order這個(gè)緩存是否有值,同時(shí)提取當(dāng)前是第幾題賦值給$now_order。 3、如果當(dāng)前不是第一題,則表示這個(gè)時(shí)候用戶(hù)發(fā)送的回復(fù)消息應(yīng)該是答案,那么檢查答案是否正確,如果不正確提示錯(cuò)誤并退出程序讓用戶(hù)繼續(xù)回答當(dāng)前題目。 4、判斷當(dāng)前是否是最后一題,如果是則保存用戶(hù)答題數(shù)據(jù),清空所有緩存,提示用戶(hù)答題完成信息。 5、當(dāng)前問(wèn)題回答正確且沒(méi)有到最后一題的,系統(tǒng)提取下一個(gè)題目輸出,同時(shí)增加答題序號(hào)的步長(zhǎng)。 6、一些附加功能,比如輸入best查詢(xún)自己的最好成績(jī),輸入history查詢(xún)自己最近10次答題記錄。 如果想做互動(dòng)的話(huà)還可以讓做個(gè)查看比你快的用戶(hù)有多少等等,自由發(fā)揮吧。 |
|
來(lái)自: 騎火一川 > 《微信公眾平臺(tái)從入門(mén)到精通》