文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
asp中有关字符编码转换的几个函数
绝妙的asp生成静态页面html函数
Asp计算页面执行时间
一个简单的用存储过程分页
将asp页面转换成htm页面
ASP网站漏洞解析及黑客入侵防范方法
URL编码与SQL注入
几种常用排序算法(asp)
ASP调用带参数存储过程的几种方式
实用的ASP连接数据库的函数
ASP如何获取真实IP地址
ASP中怎么实现SQL数据库备份、恢复
判断Cookies是否处于开启状态
怎样才能将服务器端文件夹下的文件,..
几行Asp代码实现防止表单重复提交
用ASP设计网站在线人数统计程序
asp论坛在线人数统计研究
如何用ASP远程在数据库中创建Table
用ASP调用SQL Server的视图和存储过程
Asp与XML的关系
ASP读取EXCEL
在ASP中使用Oracle数据库技巧
一个通过web.Mail发送邮件的类
几种打开记录集方式的比较
购物车范例(购物车页面 )
如何使用FSO搜索硬盘文件
GB码和BIG5码的互换技术
用ASP开发WEB日期选择器
一个投票系统的源程序(coveryourasp.c..
列出服务器上的打印机


技术教程 -> ASP教程 ->  
一个投票系统的源程序(coveryourasp.com)
来源:转载   人气:1898   录入时间:2007-11-8
    SurveyDescr.asp
   <!--#include file = "include/Startup.asp"-->
   <!--#include file = "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>
   // ============================================
   
   // 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();
   }
   %>
   
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987