|
| fred1254 | Posté le 22/04/2008 @ 11:26 |
Petit astucien
16 Messages
| Bonjour,
je suis à la recherche d'un script (si possible pas de php) pour effectuer un système d'engagement, j'ai effecuté de longues recherches sur le net et je n'ai trouvé que des systèmes avec choix multiples mais réponse unique, alors que je cherche choix multiples et réponses multiples, je m'explique.
Les visiteurs voient sur la page concernée une liste de 10 engagements, concernant l'environnement, avec en face de chaque engagement une case à cocher (ils peuvent voter sur tous si ils le souhaitent) et valider afin d'attérir sur la page des résultats avec le sur chaque engagement le nombre de personnes et tout en bas le total de votants.
j'espère avoir été assez clair pour vous :-) je continue mes recherches de mon côté.
Merci à tous
|
| |
| |
| Publicité |
|
|
| tirikou | Posté le 22/04/2008 à 12:25 |
Astucien
1028 Messages
| Il n'y a vraiment pas de problèmes pour avoir choix mutliples et réponses multiples. Tout tuto sur les formulaires avec case à cocher ou bouton radio te montre comment faire. Si tu fais bien cela avec un formulaire ... Ensuite, ce formulaire il faut bien le traiter et là je ne vois pas trop comment le traiter sans php ? |
| |
|
| fred1254 | Posté le 22/04/2008 à 13:03 |
Petit astucien
16 Messages
| il ny a aucun souci pour mettre des cases à cocher mais c'est plutot le traitement des cases à cocher dont je parle et pour le langage ont peu utiliser de l'asp mais encore faut'il savoir comment :( |
| |
|
| tirikou | Posté le 22/04/2008 à 13:19 |
Astucien
1028 Messages
| L'asp est un langage pour serveur sous windows. Php sous Unix. Donc php ou asp sera choisit en fonction de ton serveur. Ce qui ne change rien il faudra bien utiliser l'un ou l'autre pour traiter ton formulaire. Chaque champ de ton formulaire envoie une variable post ou get suivant ton choix et contenant une valeur que tu récupères, puis que tu traites. Ne sachant ni ce que tu envois, récupères et traites et encore moins pourquoi et comment je ne vois pas comment nous pouvons t'aider. Alors quelle est ta question ???? |
| |
|
| fred1254 | Posté le 22/04/2008 à 13:31 |
Petit astucien
16 Messages
| cool mon ami, voici mon code pour un systèmle de vote à reponse unique, je voudrai l'adapter pour pouvoir cocher plusieurs réponses et que ces réponses soient bien comptabilisées dans mes résultats voila ;-). <html> <head> <title>Votez pour votre affiche préférée</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="JavaScript"> <!-- window.onblur = function() { self.focus() } function VisioAffiche (fichier,w,h) { ff=window.open(fichier,"new","toolbar=no,scrollbars=yes,left=340,top=100,resizable=no,fullscreen=yes"); if(ff) { ff.focus();ff.resizeTo(1024,800) } } function VoteAffiche (fichier,w,h) { ff=window.open(fichier,"new","toolbar=no,scrollbars=no,left=340,top=100,resizable=no"); if(ff) { ff.focus();ff.resizeTo(340,900) } } function Retour (fichier,w,h) { ff=window.open(fichier,"new","toolbar=no,scrollbars=yes,left=340,top=100,resizable=no"); if(ff) { ff.focus();ff.resizeTo(690,590) } } function Affiches (fichier,w,h) { ff=window.open(fichier,"new","toolbar=no,scrollbars=yes,left=340,top=100,resizable=no"); if(ff) { ff.focus();ff.resizeTo(800,830) } } //--> </script> </head> <body bgcolor="#b3dc10" text="#000000"> <table width="300" border="0" cellspacing="0" cellpadding="0" height="52"> <tr> <td width="300" height="32"> <div align="center"><img src="Concours.gif" width="162" height="32"></div> </td> </tr> <tr> <td width="300" height="20"> <div align="center"><img src="Votez.gif" width="247" height="20"></div> </td> </tr> </table> <p> <%@LANGUAGE="VBSCRIPT"%> </p> <table width="300" border="0" cellspacing="0" cellpadding="0" height="328"> <tr> <td width="300" valign="top"> <!--#include file="../../../../db/Connections/VoteBDD.asp" --> <% SQL = "SELECT TOP 1 * FROM Questions " & _ "ORDER BY VoteDate DESC" RSQuestions.open SQL, Conn, 3, 3 ' on ne selectionne que le dernier sondage entré (top 1)
VoteID = RSQuestions("VoteID") ' on récupère l'ID du sondage, que l'on placera dans un cookie
VoteQuestion = RSQuestions("VoteQuestion") ' on récupère la question du sondage en cours
' --------------- Validation du formulaire --------------- ' si le formulaire est validé, on prepare la mise à jour de la table... If Request.QueryString("valide") = "true" then
SQL = "UPDATE Reponses " & _ "SET Compteur = Compteur + 1 " & _ "WHERE VoteOptionID= " & _ Request.QueryString("choix") & ";"
If Int(Request.Cookies("VoteCookie")("VoteID")) <> VoteID then ' si le visiteur n'avait pas encore donné son avis pour ce vote... et on execute...
Conn.Execute SQL Response.Cookies("VoteCookie").Expires = Now() ' on autorise 1 vote tout les now() + x jours, à définir selon vos besoins Response.Cookies("VoteCookie")("VoteID") = VoteID Response.write " Le vote est validé. Merci!" End if End if ' ------------ Fin de validation du formulaire -----------
SQL = "SELECT * FROM Reponses " & _ "WHERE VoteID = " & VoteID set RSReponses = Server.CreateObject("ADODB.Recordset") RSReponses.Open SQL, Conn, 3, 3 ' on extrait les réponses possibles pour ce sondage
Total = 0
While Not RSReponses.EOF ' on récupère le nombre de réponses totales données pour ce sondage Total = Total + RSReponses("Compteur") RSReponses.MoveNext Wend
RSReponses.MoveFirst ' on se replace sur le 1er enregistrement
If Request.QueryString("voir") = "true" OR Request.QueryString("valide") = "true" _ OR cInt(Request.Cookies("VoteCookie")("VoteID")) = VoteID then ' --------------- Affichage des resultats --------------- ' si on a voté, déjà voté, ou demandé les résultats ' protection "Dépassement de capacité" d'un entier ' si l'on affiche les résultats et que personne n'a encore voté If Total = 0 then Response.write "Aucun vote !" Else
' création de la table HTML %> <br> <table width="302"> <tr> <td colspan="3"> <%=VoteQuestion%> <br> </td> </tr> <% while not RSReponses.EOF pVotes = (RSReponses("Compteur") / Total) * 100 ' pourcentage = (réponses pour la question / total réponses données) * 100 %> <tr> <td width="44"><a href='JavaScript:Affiches("../concours/<%=RSReponses("VoteOption")%>.asp")'><%=RSReponses("VoteOption")%></a></td> <td width='14'><img src='/Marches/voteASP/vote.gif' height='5' width='<%=Round(pVotes,0)%>'></td> <td width="228"><%=Round(pVotes,1)%> %</td> </tr> <% RSReponses.movenext : wend 'on boucle sur les réponses en sortant leur désignation ' le pourcentage de vote arrondi et une barre graphique %> </table> <br> <% Response.write Total & " votes ont été effectués" : End If %> <br> <font face="Comic Sans MS, Verdana, Arial" size="2"><a href='javascript:VoteAffiche("vote.asp")'>Retourner aux votes</a></font> <br> <% Else ' --------------- Affichage du formulaire --------------- ' si le visiteur n'a pas encore voté %> <table width="302" align="center"> <form name="poll" action="vote.asp?voir=true" method="get"> <tr> <td colspan="3"> <%=VoteQuestion%></td> </tr> <% while not RSReponses.EOF ' on boucle sur les réponses, cette fois-ci dans un formulaire ' sous forme de bouton radio %> <tr> <td width="176"><a href='JavaScript:Affiches("../concours/<%=RSReponses("VoteOption")%>.asp")'><%=RSReponses("VoteOption")%></a></td> <td width="114"> <input type="radio" name="choix" value="<%=RSReponses("VoteOptionID")%>"> </td> </tr> <% RSReponses.movenext : wend %> <tr> <td colspan="2"> <p align="center"><br> <input type="submit" value="Voter!" name="submit"> <input type="hidden" name="valide" value="true"> <br> <a href="vote.asp?voir=true"><font size="2" face="Comic Sans MS, Verdana, Arial">Voir les résultats</font></a> </p> </td> </tr> </form> </table> <div align="center"> <% End if %> <br> <a href='JavaScript:VisioAffiche("affiches.asp")'><font size="2" face="Comic Sans MS, Verdana, Arial">Visualiser les affiches</font></a> <a href='JavaScript:Retour("concours.html")'><font face="Comic Sans MS, Verdana, Arial" size="2"><br> Retourner sur le site des 10 ans !</font></a></div> </td> </tr> <tr> <td width="300"> </td> </tr> </table> </body> </html> |
| |
|
| tirikou | Posté le 22/04/2008 à 14:59 |
Astucien
1028 Messages
| Ouuufffffffffffffff !!! Désolé mais javascript c'est ni mon rayon ni ma tasse de thé. Suis incapable de t'aider sur ce coup.  Mais un formulaire à choix multiples et réponses multiples est parfaitement faisable et traitable. Donc il doit y avoir une soluce en javascript. Perso je l'aurai fait en php car connait pas assez javascript. Bon courage. Modifié par tirikou le 22/04/2008 16:27 |
| |
|
| fred1254 | Posté le 25/04/2008 à 11:29 |
Petit astucien
16 Messages
| Bon j'essaie de chercher une réponse mais en vain :(. je vous envoi le lien de la page concernée : http://www.sydetom66.com/minisite/dixans/concours/voteok.asp alors pour info quand on clique sur un seul vote tout marche nikel par contre dès qu'on sélectionne deux ou plusieurs affiches ça fonctionne plus :(. Je suis sur que c'est pas bien compliqué mais je galère depuis 3 jours à chercher et à retourner le code dans tous les sens. je pense que ça passe par une boucle qui répéterait une partie du code, mais quelle boucle utilisée et à quelle endroit la faire débuter et à quel endroit la faire terminer. Je vous remets la source de la page. Je continue à cherche aussi. Merci <title>Votez pour votre affiche pr éf ér ée </title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <!-- function Retour (fichier,w,h) { ff=window.open(fichier,"new","toolbar=no,scrollbars=no,left=340,top=100,resizable=no"); if(ff) { ff.focus();ff.resizeTo(650,570) } } //--> </script> </head> <body bgcolor="#b3dc10" text="#000000"> <table width="300" border="0" cellspacing="0" cellpadding="0" height="52"> <td width="300" height="32"> <div align="center"><img src="Concours.gif" width="162" height="32"></div> </td> </tr> <td width="300" height="20"> <div align="center"><img src="Votez.gif" width="247" height="20"></div> </td> </tr> </table> <%@LANGUAGE="VBSCRIPT"%> </p> <table width="300" border="0" cellspacing="0" cellpadding="0" height="328"> <td width="300" valign="top"> <!--#include file="../../../../db/Connections/VoteBDDMulti.asp" --> <% SQL = "SELECT TOP 1 * FROM Questions " & _ "ORDER BY VoteDate DESC" RSQuestions.open SQL, Conn, 3, 3 ' on ne selectionne que le dernier sondage entré (top 1) VoteID = RSQuestions("VoteID") ' on récupère l'ID du sondage, que l'on placera dans un cookie VoteQuestion = RSQuestions("VoteQuestion") ' on récupère la question du sondage en cours ' --------------- Validation du formulaire --------------- ' si le formulaire est validé, on prepare la mise à jour de la table... If Request.QueryString("valide") = "true" then SQL = "UPDATE Reponses " & _ "SET Compteur = Compteur + 1 " & _ "WHERE VoteOptionID= " & _ Request.QueryString("choix") & ";" If Int(Request.Cookies("VoteCookie")("VoteID")) <> VoteID then ' si le visiteur n'avait pas encore donné son avis pour ce vote... et on execute... Conn.Execute SQL Response.Cookies("VoteCookie").Expires = Now() ' on autorise 1 vote tout les now() + x jours, à définir selon vos besoins Response.Cookies("VoteCookie")("VoteID") = VoteID Response.write " Le vote est validé. Merci!" End if End if ' ------------ Fin de validation du formulaire ----------- SQL = "SELECT * FROM Reponses " & _ "WHERE VoteID = " & VoteID set RSReponses = Server.CreateObject("ADODB.Recordset") RSReponses.Open SQL, Conn, 3, 3 ' on extrait les réponses possibles pour ce sondage Total = 0 While Not RSReponses.EOF ' on récupère le nombre de réponses totales données pour ce sondage Total = Total + RSReponses("Compteur") RSReponses.MoveNext Wend RSReponses.MoveFirst ' on se replace sur le 1er enregistrement If Request.QueryString("voir") = "true" OR Request.QueryString("valide") = "true" _ OR cInt(Request.Cookies("VoteCookie")("VoteID")) = VoteID then ' --------------- Affichage des resultats --------------- ' si on a voté, déjà voté, ou demandé les résultats ' protection "Dépassement de capacité" d'un entier ' si l'on affiche les résultats et que personne n'a encore voté If Total = 0 then Response.write "Aucun vote !" Else ' création de la table HTML %> <br> <table width="302"> <tr> <td colspan="3"> <%=VoteQuestion%> <br> </td> </tr> <% while not RSReponses.EOF pVotes = (RSReponses("Compteur") / Total) * 100 ' pourcentage = (réponses pour la question / total réponses données) * 100 %> <tr> <td width="44"><%=RSReponses("VoteOption")%></td> <td width='14'><img src='/Marches/voteASP/vote.gif' height='5' width='<%=Round(pVotes,0)%>'></td> <td width="228"><%=Round(pVotes,1)%> %</td> </tr> <% RSReponses.movenext : wend 'on boucle sur les réponses en sortant leur désignation ' le pourcentage de vote arrondi et une barre graphique %> </table> <br> <% Response.write Total & " votes ont été effectués" : End If %> <% Else ' --------------- Affichage du formulaire --------------- ' si le visiteur n'a pas encore voté %> <table width="302" align="center"> <form name="poll" action="voteok.asp?voir=true" method="get"> <tr> <td colspan="3"> <%=VoteQuestion%> </td> </tr> <% while not RSReponses.EOF ' on boucle sur les réponses, cette fois-ci dans un formulaire ' sous forme de cases à cocher %> <tr> <td width="176"><%=RSReponses("VoteOption")%></td> <td width="114"> <input type="checkbox" name="choix" value="<%=RSReponses("VoteOptionID")%>"> </td> </tr> <% RSReponses.movenext : wend %> <tr> <td colspan="2"> <p align="center"><br> <input type="submit" value="Voter!" name="submit"> <input type="hidden" name="valide" value="true"> <br> <a href="voteok.asp?voir=true">Voir les résultats</a> </p> </td> </tr> </form> </table> <div align="center"> <% End if %> <br> <a href='JavaScript:Retour("concours.html")'><font face="Comic Sans MS, Verdana, Arial" size="2">Retourner sur le site des 10 ans !</font></a></div> </td> </tr> <tr> <td width="300"> </td> </tr> </table> </body> </html>
|
| |
|
| fennec. | Posté le 25/04/2008 à 13:33 |
Petit astucien
246 Messages
| Bonjour, tirikou pour ton information "L'asp est un langage pour serveur sous windows. Php sous Unix. Donc php ou asp sera choisit en fonction de ton serveur." tu peus héberger du php sous windows aussi le choix du langage n'a aucune conséquence sur le choix du serveur apache (php) : s'installe sous windows et linux iis (asp) : sous windows : (sous linux je pense qu'il y a un module a ajouter a apche pour qu'il puisse gérer l'asp) jboss, tomcat, websphere (jsp - java) : sous windows et linux sur le net tu netrouvera que des serveur php sous linux (tous simplement car c'est moins cher un serveur linux que windows), tu ne trouvera que des serveur windows pour iis (parce que personne ne se risque a utilisé les adaptation coté linux pour faire tourné de l'asp) fred1254 pour ton problèm, vas voir du côté de developpez.com (c'est spécialisé pour le développement il y a beaucoup plus de personne qui pourrons t'aider) si non tu peut toujours poster ici l'erreur que te retourne ton site bonne continuation. |
| |
|
| tirikou | Posté le 25/04/2008 à 13:48 |
Astucien
1028 Messages
| Je dois être bouché mais je ne comprends toujours pas quel est ton problème. Tu soumets un formulaires, on vote, tu enregistres les résultats du vote (quel est le problème ?). On va page resultat et tu récupères les résulats et les affiche (quel est le problème ?). |
| |
|
| fred1254 | Posté le 28/04/2008 à 08:19 |
Petit astucien
16 Messages
| mon problème c'est que si je fais un seul choix ça fonctionne mais si je selectionne plusieurs reponses et que j'envoi le formulaire ça fonctionne pas du tout :( |
| |
|
| tirikou | Posté le 28/04/2008 à 12:08 |
Astucien
1028 Messages
| Voici l'erreur que j'ai sur ta page en tapant plusieurs choix : Microsoft OLE DB Provider for ODBC Drivers erreur '80040e14' [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (virgule) dans l'expression 'VoteOptionID= 21, 24, 28'. /minisite/dixans/concours/voteok.asp, ligne 61 |
| |
|
| fred1254 | Posté le 28/04/2008 à 13:18 |
Petit astucien
16 Messages
| voila c'est bien le soucis que j'ai c'est que je sais pas comment mettre à jour la base de données avec plusieurs valeurs |
| |
|
| tirikou | Posté le 28/04/2008 à 13:48 |
Astucien
1028 Messages
| $_POST est un array donc tu peux à la récupération tester avec une boucle les valeurs de $_post. Par contre il te faut un name de tes input qui puisse se parcourir par exemple de a1 à a50. Lorsque tu envois le formulaire de vote tu testes $_post avec FOR en parcourant de a1 à a50 et pour chaque valeur rencontrée non nulle par exemple une requete update. Edit : tu peux parcourir le tableau sans avoir à renommer tes input ... Modifié par tirikou le 28/04/2008 13:54 |
| |
|
| tirikou | Posté le 28/04/2008 à 14:02 |
Astucien
1028 Messages
| Oups, il me semble que ton formulaire ne peux pas fonctionner en le regardant de plus près. En effet tous tes input se nomme pareil "choix" donc tu vas pouvoi récupérer une seule $_post choix. Et si tu coche plusieurs case tu créé plusieurs variables $_post choix donc cela bug ! Pour t'en convaincre affiche le contenu de $ post lorsque tu envoies plusieurs choix avec print_r($_POST); Cela car $ post est un array donc ne peut pas contenir plusieurs "champs" portant le même nom. Il vaudrait mieux à mon sens avoir un name = choix1 ... à choix 50 par exemple et une value qui egale soit 0 soit 1. C'est en tout cas comme cela que je ferais. Modifié par tirikou le 28/04/2008 14:03 |
| |
|
| fred1254 | Posté le 28/04/2008 à 14:05 |
Petit astucien
16 Messages
| ben ecoute j'avais mis ça comme code IF Request.QueryString("valide") = "true" then FOR each choix IN request.querystring SQL = "UPDATE Reponses " & _ "SET Compteur = Compteur + 1 " & _ "WHERE VoteOptionID= " & _ Request.QueryString("choix") & ";" next
mais ça ne foinctionne pas j'ai pourtant bien mis une boucle qui caque fois qu'elle trouve une valeur choix doit mettre à jour la table reponses... donc je dois me planet quelque part mais où ...? ?? |
| |
|
| tirikou | Posté le 28/04/2008 à 15:24 |
Astucien
1028 Messages
| Oui je comprends mieux. Le principe me semble bon en tout cas identique à celui que je ferais en php mais là je connais pas. Désolé. |
| |
|
| fred1254 | Posté le 28/04/2008 à 16:53 |
Petit astucien
16 Messages
| je suis mal c'est pour le boulot et je sais pas comment faire :(, je pensais aussi que sur le principe c'était bon mais ça marche pas, par contr eje me suis aperçu que le for...Each n'était pas bon, regarde mon nouveau code et fais le test sur la page http://www.sydetom66.com/minisite/dixans/concours/voteok.asp quand tu selectionnes un seul choix c'est ok avec plusieurs ça fonctionne pas pour le mettre dans la base de données e nfait à cause de la virgule qui se met en paramètre je crois mais comment la supprimer....telle est la question.
If Request.QueryString("valide") = "true" then Response.write(request.querystring("choix").count & " choix : <BR>") SQL = "UPDATE Reponses " & _ "SET Compteur = Compteur + 1 " & _ "WHERE VoteOptionID= " & _ Request.QueryString("choix") & "; " 'If Int(Request.Cookies("VoteCookie")("VoteID")) <> VoteID then ' si le visiteur n'avait pas encore donné son avis pour ce vote... et on execute... for i = 1 to request.querystring("choix").count Response.write("Choix numéro : "& request.querystring("choix")(i) & "<BR>") next Conn.Execute SQL 'Response.Cookies("VoteCookie").Expires = Now() 'on autorise 1 vote tout les now() + x jours, à définir selon vos besoins 'Response.Cookies("VoteCookie")("VoteID") = VoteID 'Response.write " Le vote est validé. Merci!" End if
|
| |
|
|
| Haut de la page |