|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
SurveyDescr.asp <!--#include file = "include/Startup.asp"--> <!--#include file = "utils/Survey.asp"--> <% // output relevant meta tags Init( "Survey your readers" ); // output common top of page Header( \\\'Survey your readers\\\' ); // output page content Content ( ); // output common bottom of page Footer( ); // ============================================ // the content of this page - every page has a function \\\'Content\\\' that // is called above. // ============================================ function Content ( ) { Out ( \\\'<td colspan=2 width="80%" valign="top">\\\' ); // if the survey hasnt been submitted yet... if ( !Request.Form.Count ) { //...display some blah, blah Out ( \\\'Finally, surveys come to CoverYourASP! I\\\'ve been wanting to ask you guys and gals questions for a long time, and now I can. It\\\'s up to you if you want to answer of course!\\\' ); Out ( \\\'<p>Of course, the real benefit to you is that if you tell me what you like I\\\'ll probably provide it. If you send in your <a href="Donate.asp">donations</a> the probability increases rather dramatically!\\\' ); Out ( \\\'<p>Take the example survey below if you have the time and inclination. I plan to post more in a special survey category, and start offering incentives to take them.\\\' ); Out ( \\\'<p>Afterwards, look at the code. I think you\\\'ll be surprised how simple it is to create surveys with this code. This page has one function call in it, with just one parameter - the name of the survey! All questions, answers and results are stored in the database.\\\' ); } // show the survey, or process it\\\'s input ProcessSurvey ( \\\'Who are you and what do you think?\\\' ); if ( !Request.Form.Count ) Out ( \\\'<p><a href="ShowSource.asp?page=SurveyDescr"><img src="images/source.gif" align="right" border=0></a>Please submit the survey first before looking at the source code - this link is on the result page too!\\\' ); else Out ( \\\'<p><center><a href="ShowSource.asp?page=SurveyDescr"><img src="images/source.gif" border=0></a></center>\\\' ); Out ( \\\'</td>\\\' ); Out ( \\\'<td width="20%" valign="top">\\\' ); // show rotating banners ShowBanners ( 4 ); Out ( \\\'</td>\\\' ); } %> utils/Survey.asp <% // ============================================ // NOTE: all source code downloaded from CoverYourASP was written by // James Shaw (unless stated otherwise), and is copyright (c) 2000 by // James Shaw. You may use this source code on your web sites, but // please don\\\'t publish or distribute in any way. // // I would appreciate an HTML comment in any code you use, i.e. // <!-- portions (c) james@CoverYourASP.com--> // (see Footer(), documented in SSI.asp for details on how to do this) // // <shameless plug> // Please contact me to discuss any ASP contract work you may have. // </shameless plug> // ============================================ // ============================================ // display or process the named survey // ============================================ function ProcessSurvey ( sName ) { // has the survey form been submitted? if ( Request.Form.Count ) { // connect to the database DBInitConnection ( ); var sSurvey = "" + Request.Form ( "Survey" ); // only update the survey when no cookie if ( "" == Request.Cookies ( sSurvey ) ) { // get the data from the form and update the database // use an enumerator to get name and value var e = new Enumerator ( Request.Form ); while ( !e.atEnd ( ) ) { var oItem = e.item(); // increment the current number of times this answer has been chosen oConnection.Execute ( \\\'UPDATE SurveyAnswers SET Hits=Hits+1 WHERE Question="\\\' + oItem + \\\'" AND Answer="\\\' + Request.Form ( oItem ) + \\\'";\\\' ); e.moveNext ( ); } // note that setting cookie here assumes we are buffering // the Reponse.Writes - cookies must be set before any // HTML is sent to the client Response.Cookies ( sSurvey ) = "1"; // I\\\'m not setting the \\\'expires\\\' on the cookie, so it\\\'ll go // away when the browser is closed. I just wanted to stop // the survey incrementing if the page refreshed. } // now display all the answers to the survey Out ( \\\'<p>Thanks for taking part in our "\\\' + sSurvey + \\\'" survey! The answers that everyone has given so far are shown below:\\\' ); // the last question we displayed var sLast = ""; // get all the selected answers, sorted by question and hits DBGetRecords ( \\\'SELECT SurveyAnswers.Question,Answer,Hits FROM SurveyAnswers INNER JOIN SurveyQuestions ON SurveyQuestions.Question=SurveyAnswers.Question WHERE Survey="\\\' + sSurvey + \\\'" AND Hits>0 ORDER BY SurveyAnswers.Question,Hits DESC;\\\' ); var fScale; while ( !oRecordSet.EOF ) { // display question when it changes var sIntQuestion = "" + oRecordSet ( 0 ); // slice off chars used for sorting var sQuestion = sIntQuestion.slice ( 2 ); // get answer var sIntAnswer = "" + oRecordSet ( 1 ); // slice off chars used for sorting var sAnswer = ExpandMacros ( sIntAnswer.slice ( 2 ) ); var nReaders = oRecordSet ( 2 ) - 0; if ( sQuestion != sLast ) { Out ( \\\'<h5>\\\' + sQuestion + \\\'</h5>\\\' ); sLast = sQuestion; Out ( \\\'<font color="red">"\\\' + sAnswer + \\\'" was the top answer (\\\' + nReaders + \\\' readers) </font><br>\\\' ); fScale = 300.0 / nReaders; } else { Out ( \\\'"\\\' + sAnswer + \\\'" was chosen by \\\' + nReaders + \\\' readers<br>\\\' ); } Out ( \\\'<img src="images/Dot.gif" height="8" width="\\\' + (nReaders * fScale) + \\\'"><br>\\\' ); oRecordSet.MoveNext ( ); } // release the connection ASAP DBReleaseConnection ( ); } else { // some initial instructions Out ( \\\'<p>There aren\\\'t any important instructions when answering these questions - except you don\\\'t have to answer any. All are optional - if you don\\\'t like a question, or none of the answers are relevant, just move onto the next one!\\\' ); // connect to the database DBInitConnection ( ); // get the questions from the database DBGetRecords ( \\\'SELECT Question FROM SurveyQuestions WHERE Survey="\\\' + sName + \\\'" ORDER BY Question;\\\' ); if ( oRecordSet.EOF ) { Out ( \\\'No questions were found for survey "\\\' + sName + \\\'"<p>\\\' ); return; } // store the questions in an array var sIntQuestions = new Array; var nQuestions = 0; while ( !oRecordSet.EOF ) { sIntQuestions [ nQuestions++ ] = "" + oRecordSet ( 0 ); oRecordSet.MoveNext ( ); } Out ( \\\'<form action="\\\' + Request.ServerVariables ( \\\'SCRIPT_NAME\\\' ) + \\\'" method="post">\\\' ); // some hidden fields to pass data through to results page Out ( \\\'<input type="hidden" name="Survey" value="\\\' + sName + \\\'">\\\' ); // now loop through the questions for ( var nQuestion=0; nQuestion<nQuestions; nQuestion++ ) { var sIntQuestion = sIntQuestions [ nQuestion ]; // slice off chars used for sorting var sQuestion = sIntQuestion.slice ( 2 ); // get the answers from the database DBGetRecords ( \\\'SELECT Answer,AnswerType FROM SurveyAnswers WHERE Question="\\\' + sIntQuestion + \\\'" ORDER BY Answer;\\\' ); Out ( \\\'<h5>\\\' + sQuestion + \\\'</h5>\\\' ); while ( !oRecordSet.EOF ) { // get the answer var sIntAnswer = "" + oRecordSet ( 0 ); // slice off chars used for sorting var sAnswer = ExpandMacros ( sIntAnswer.slice ( 2 ) ); var sAnswerType= "" + oRecordSet ( 1 ); switch ( sAnswerType ) { case \\\'radio\\\': Out ( \\\'<input type="radio" name="\\\' + sIntQuestion + \\\'" value="\\\' + sIntAnswer + \\\'"> \\\' + sAnswer ); break; default: break; } Out ( \\\'<br>\\\' ); // get next answer oRecordSet.MoveNext ( ); } } Out ( \\\'<p><input type="submit" value="Submit answers">\\\' ); Out ( \\\'</form>\\\' ); // release the connection ASAP DBReleaseConnection ( ); } } // ============================================ // add links to text where *? macros are found, e.g. *d expands to // <a href="Donate.asp">Send a donation!</a> // NOTE: currently assumes expansions are always at end of line // ============================================ function ExpandMacros ( sText ) { var sMacros = new Array ( \\\'**\\\', \\\'*d\\\' ); var sExpansions = new Array ( \\\'<a href="Contact.asp" target="CYAEXternal">You need to send me feedback!</a>\\\', \\\'<a href="Donate.asp" target="CYAEXternal">send a donation!</a>\\\' ); for ( var i=0; i<sMacros.length; i++ ) { var nPos = sText.indexOf ( sMacros [ i ] ); if ( -1 != nPos ) { sText = sText.slice ( 0, nPos ) + sExpansions [ i ]; break; } } return sText; } %> utils/Database.asp <% // ============================================ // NOTE: all source code downloaded from CoverYourASP was written by // James Shaw (unless stated otherwise), and is copyright (c) 2000 by // James Shaw. You may use this source code on your web sites, but // please don\\\'t publish or distribute in any way. // // I would appreciate an HTML comment in any code you use, i.e. // <!-- portions (c) james@CoverYourASP.com--> // (see Footer(), documented in SSI.asp for details on how to do this) // // <shameless plug> // Please contact me to discuss any ASP contract work you may have. // </shameless plug> // ============================================ // globals var oConnection; var oRecordSet; // enums // Connection.State and Recordset.State property var adStateClosed = 0; // the object is closed. var adStateOpen = 1; // the object is open. var adStateConnecting = 2; // the object is connecting. var adStateExecuting = 4; // the object is executing a command. var adStateFetching = 8; // the rows of the object are being fetched. // Recordset.Cursor property var adOpenUnspecified = -1; // does not specify the type of cursor. var adOpenForwardOnly = 0; // (default) a forward-only cursor, i.e. you get only one pass thru the data! var adOpenKeyset = 1; // can go in any direction, and as a bonus you\\\'ll see changes other users make. EXPENSIVE! var adOpenDynamic = 2; // as Keyset, but also you can see additions/deletions other users make. EXPENSIVE! var adOpenStatic = 3; // can go in any direction, but read-only. // Recordset.LockType property var adLockUnspecified = -1; // does not specify a type of lock. var adLockReadOnly = 1; // (default) guess! var adLockPessimistic = 2; // guaranteed to work var adLockOptimistic = 3; // records locked only when you call Update. fingers crossed var adLockBatchOptimistic = 4;// required for batch update mode // ============================================ // example usage: // DBInitConnection ( ); // // DBGetRecords ( "SELECT * FROM Somewhere" ); // // ...use oRecordSet // // DBReleaseRecords ( ); // optional step // // DBGetRecords ( "SELECT * FROM SomewhereElse" ); // // ...use oRecordSet // // DBReleaseRecords ( ); // optional step // // DBReleaseConnection ( ); // ============================================ // ============================================ // initializes database variables for first use on page - leave it to the // last possible second before calling this function // ============================================ function DBInitConnection ( ) { // don\\\'t open it again if already opened! if ( oConnection != undefined ) return; // you can open Recordset objects without a Connection object, but // it\\\'s far less efficient if you are opening multiple Recordsets. // // if you don\\\'t create a Connection object ADO creates a new one for // each new Recordset.Open, even if you use the same connection string. oConnection = Server.CreateObject( \\\'ADODB.Connection\\\' ); // open the database - use MapPath to make relative path into physical path // NOTE: keep your database path a secret - nasty people are everywhere! // 2. change the 4.0 to 3.51 when using Access 97 oConnection.Open( \\\'Provider=Microsoft.Jet.\\\' + sDBDriver + \\\'; Data Source=\\\' + Server.MapPath ( sDBPath ) ); // create a Recordset oRecordSet = Server.CreateObject( \\\'ADODB.Recordset\\\' ); } // ============================================ // tidies up after DBInitConnection // ============================================ function DBReleaseConnection ( ) { // don\\\'t release the connection if not connected! if ( oConnection == undefined ) return; // close and delete the Recordset object DBReleaseRecords ( ); oRecordSet = undefined; // Don\\\'t call Close if the Recordset failed to Open properly, i.e. its // State is still adStateClosed (0) if ( oConnection.State != adStateClosed ) oConnection.Close(); oConnection = undefined; } // ============================================ // executes the passed in SQL statement and returns a read-only // forward-only oRecordSet object // ============================================ function DBGetRecords ( sSQL ) { // if the Recordset is already open, close it DBReleaseRecords ( ); // we could use oRecordSet = oConnection.Execute( sSQL ) here // but then we will always get back a read-only, forward-only cursor. // (admittedly this is the most used type, but still) // use oRecordSet.Open and we have far more control. For details // read the definitions of the enums at the top of this file. // remember that this can fail if passed garbage, and hence the // Recordset will remain closed, State == adStateClosed oRecordSet.Open ( sSQL, oConnection, adOpenForwardOnly, adLockReadOnly ); } // ============================================ // tidies up after DBGetRecords // ============================================ function DBReleaseRecords ( ) { // when you have finished with an open Recordset object, call the // Close method to release its resources. You can call Open again. // Don\\\'t call Close if the Recordset failed to Open properly, i.e. its // State is still adStateClosed if ( oRecordSet != undefined && oRecordSet.State != adStateClosed ) oRecordSet.Close(); } %> 返回类别: 教程 上一教程: 用ASP获取别的网页的内容 下一教程: ASP中也能解压缩RAR文件 您可以阅读与"一个投票系统的源程序"相关的教程: · 创建一个WEB投票系统 · 一个免费的邮件列表源程序(二) · 一个免费的邮件列表源程序(一) · 一个免费的邮件列表源程序(三) · 有关站内模糊查询的源程序! |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |