欢迎光临
我们一直在努力

一个投票系统的源程序(coveryourasp.com)_asp实例

建站超值云服务器,限时71元/月

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 dont 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 its 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 dont 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";

         // Im not setting the expires on the cookie, so itll 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 dont 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 youll 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 ( )
{
   // dont open it again if already opened!
   if ( oConnection != undefined )
      return;
       
   // you can open Recordset objects without a Connection object, but
   // its far less efficient if you are opening multiple Recordsets.
   //
   // if you dont 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 ( )
{
   // dont release the connection if not connected!
   if ( oConnection == undefined )
      return;

   // close and delete the Recordset object
   DBReleaseRecords ( );

   oRecordSet = undefined;

   // Dont 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.

   // Dont call Close if the Recordset failed to Open properly, i.e. its
   // State is still adStateClosed
   if ( oRecordSet != undefined && oRecordSet.State != adStateClosed )
      oRecordSet.Close();
}
%>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个投票系统的源程序(coveryourasp.com)_asp实例
分享到: 更多 (0)