Dans le cadre de ses partenariats, ASP-PHP.net organise parfois des concours sous forme de Quizz permettant de faire gagner des lots divers à ses visiteurs... Une page ASP a donc été écrite pour permettre la gestion complète de ce jeu. Si elle peut vous servir...
J'utilise ici une base MSAccess quizz.mdb générée par AxS et comportant une table joueurs ayant les champs suivants :
ID NumAuto (entier long auto-incrémenté)
Nom Texte (100)
Prenom Texte (100)
Adresse Texte (100)
CP Texte (20)
Ville Texte (100)
Email Texte (100)
Date Date/Heure
Score Octal
NbQuest Octal
IP Texte (20)
3. Remarques
Ce quizz n'autorise qu'un jeu par connexion (stockage de l'IP dans la BD)... pour permettre plusieurs jeux successifs adaptez ou supprimez les lignes concernées :
<% ' === PAGE 1 : Questions ===
if request.form.count = 0 and request.queryString.count = 0 then
' 1 seule participation par IP Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & database SQL = "SELECT * FROM joueurs where IP='" & IP & "'" RS.open SQL,conn,3,3 test = RS.eof RS.close Conn.close
if not test then%> <script>location.replace("quizz.asp?redir")</script> <%end if %>
4. Tirage aléatoire
A l'issue du jeu, un tirage aléatoire doit être fait parmi les joueurs ayant répondu correctement aux questions... cette petite procédure (à appeler dans une page "admin") devrait vous aider à l'automatiser :
_tirage.asp
<% ' TIRAGE ALEATOIRE DANS LA BD
sub tirage(tours,base,requete) dim alea,Conn,RS,cpt,mem ' Connexion Set Conn = Server.CreateObject("ADODB.Connection") Set RS = server.createobject("ADODB.Recordset") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & base ' Sélection de tous les enregistrements RS.Open requete,Conn,3,3 cpt = 0 : mem = "|" ' En-têtes du tableau response.write "<table border cellspacing=0 cellpadding=2><tr>" for each champ in RS.Fields response.write "<td><b>" & champ.name & "</b></td>" next response.write "</tr>" ' Tirage parmi les enregistrements randomize while cpt < tours alea = Int(RS.recordCount * Rnd) ' Déjà sorti ? if instr(mem, "|" & cStr(alea) & "|") < 1 then cpt = cpt + 1 mem = mem & cStr(alea) & "|" RS.moveFirst : RS.move(alea) ' Affiche l'enregistrement response.write "<tr>" for each champ in RS.Fields response.write "<td>" & RS(champ.name) & "</td>" next response.write "</tr>" end if wend response.write "</table>" ' Déconnexion RS.close Conn.close end sub
' Exemple d'appel : ' database = Server.MapPath("../../") & "\database\asphp2\quizz.mdb" ' SQL = "SELECT * FROM joueurs WHERE Score = NbQuest" ' tirage 2,database,SQL %>