Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Espanhol

problemas em adaptar uma enquete

Recommended Posts

Pessoal to com um script de enquete bem legal, mas é todo em bd access. Como meu bd é mysql estou precisando de uma mão. Seguem os codes:

 

arquivo: conectar.asp

<%Set Conexao = CreateObject("ADODB.CONNECTION")ConStr = "Driver={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=bd_site; UID=meulogin; PWD=meupassword;" Conexao.CursorLocation = 3ConexaoAberta = FALSESub AbreConexao()	if not ConexaoAberta then	Conexao.Open ConStr	ConexaoAberta = True	end ifend subSub FechaConexao()	if ConexaoAberta then	Conexao.close	ConexaoAberta = False	end ifend sub %>
arquivo: principal.asp

<!--#include file="conectar.asp"--><%'Abre o Recordset para chamada 1Set RS = Server.CreateObject( "ADODB.Recordset" )RS.ActiveConnection = dbRS.open "SELECT * FROM enquete"%><% 'Criando variáveisDim meubd, rsQuestoes, rsComentarios'Setando conexaoset meubd=server.createobject("adodb.connection")set rsQuestoes=server.createobject("adodb.RecordSet")set rsComentarios=server.createobject("adodb.RecordSet")'Abrindo conexaomeubd.Open localbd'Faremos aqui a seleção da questão'Lembrando que será feito um Relacionamento de tabelas'Para podermos mostrar questão e opções para votorsQuestoes.Open "SELECT LIMIT 1 * from questoes, votos where questoes.cod_questao=votos.cod_questao and votos.cod_questao=questoes.cod_questao", meubd'Aqui será feita uma SELECT para mostrar a quantidade de comentáriosrsComentarios.Open "SELECT count(cod_comentario) as TotalCom from comentarios where cod_questao="&rsQuestoes.fields("cod_questao")&" ", meubd%><html><title>Sistema de Enquete</title><%'Aqui será feito o Javascript que abrirá os resultados em Pop-up%><script language="JavaScript" type="text/JavaScript"><!--function abrirjanela(theURL,winName,features) { //v2.0  window.open(theURL,winName,features);}//--></script><%'Verificar se o voto foi feito'Se foi, gravará uma session com a opção marcadaif request.form("voto")<>"" then	session("voto")=request.form("voto")	response.write "<script>javascript:abrirjanela('votar.asp','Resultado','width=200,height=280')</script>"end if%><body><table width="200" border="0" cellspacing="2" cellpadding="1">  <tr>	<td bgcolor="#FF9900"><font size="2" face="Arial, Helvetica, sans-serif"><b>	  <% 	  'Aqui estamos mostrando a questão da enquete	  response.write rsQuestoes.fields("questao")%>	</b></font></td>  </tr>  <tr>	<form name="form1" method="post" action"principal.asp"><td bgcolor="f4f4f4">	  <table width="200" border="0" cellspacing="1" cellpadding="0">		<tr>		  <td><table width="200" border="0" cellpadding="0" cellspacing="0">						  <% 			  'Criaremos uma variavel que fará com que a primeira opção fique marcada ao iniciar			  dim check			  check="checked"			  			  'Iremos aqui utilizar o WHILE para repedir as Opções para voto			  while NOT rsQuestoes.EOF 			  %>			  <tr>			  <td width="23">			  <input name="voto" type="radio" value="			  <% 			  'Aqui setaremos o valor que utilizaremos para somar o voto			  'de uma determinada opção			  response.write rsQuestoes.fields("Cod_voto") 			  %>			  " <%=check%>>			  </td>			  <td width="177"><font size="2" face="Arial, Helvetica, sans-serif">				<% 				'Mostrar o Campo da tabela que mostrará as Opções				response.write rsQuestoes.fields("Opcao") 				%>			  </font></td>							</tr>			<%			check=""			rsQuestoes.movenext			wend			%>		  </table></td>		</tr>		<tr>		  <td>			<div align="center">			  <br>			  <input type="submit" name="Submit" value="votar">			  <br>			  <br>			</div></td>		</tr>		<tr>		  <td><div align="right"><font size="2" face="Arial, Helvetica, sans-serif"><a href="#" onClick="abrirjanela('resultado.asp','Resultado','width=200,height=280')">Ver 				resultados</a><br>				</font></div></td>		</tr>	  </table></td>	</form>  </tr>  <tr>  </tr></table></body></html>
arquivo: votar.asp

<% Option Explicit'Iremos verificar um Cookie para saber se o usuário já votou'Se ele já tiver votado, irá para a página de resultados com o QueryString = Inválidoif request.cookies("enquete")("voto")<>"" then	response.redirect "resultado.asp?status=Invalido" end if'Criando variáveisDim localbd, meubd, votos, opcaoEscolhida, quant'Gravando a opção escolhida em uma variávelopcaoEscolhida = session("voto")'Indicando local do Banco de dadoslocalbd="driver={microsoft access driver (*.mdb)};dbq=" & server.mappath("bd/bd.mdb")'Setando conexaoset meubd=server.createobject("adodb.connection")set votos=server.createobject("adodb.RecordSet")'Abrindo conexaomeubd.Open localbd'Selecionando o registro da Opção escolhidavotos.Open "SELECT * from Votos where cod_voto="&opcaoEscolhida&"", meubd'Guardar quantidade de votos em uma variável antes deste votoquant = votos.fields("votos")'Iremos executar agora o SQL que abrirá que atualizará os votosmeubd.EXECUTE "UPDATE votos SET votos = " & quant & "+1 where cod_voto="&opcaoEscolhida&""'Para evitar que o usuário vote novamente, iremos criar um cookieresponse.Cookies("Enquete")("Voto") = date'Setando valor à sessionsession("voto")=""'O voto já foi computado, agora irá para a página que exibirá o resultadoresponse.redirect "resultado.asp?questao= "& votos.fields("cod_questao") &""%>
arquivo: resultado.asp

<% Option Explicit'Criando variáveisDim meubd, votosTotal, votos'Setando conexaoset meubd=server.createobject("adodb.connection")'Faremos dois recordset, uma para mostrar a quantidade de todos os votos'e outro para mostrar os votos de cada opçãoset votosTotal=server.createobject("adodb.RecordSet")set votos=server.createobject("adodb.RecordSet")meubd.Open localbd'Agora a SELECT dos votos individuaisvotos.open "SELECT LIMIT 1 * from Votos, questoes where votos.cod_questao = questoes.cod_questao and questoes.cod_questao=votos.cod_questao ", meubd'Fazendo a SELECT do total de votosvotosTotal.open "SELECT sum(votos) as totalvotos from votos where cod_questao ="&votos.fields("cod_questao")&"", meubd%><html><title>Sistema de Enquete</title><body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"><table width="200" height="250" border="0" cellpadding="1" cellspacing="2">  <tr>	<td height="25"><strong><font size="2" face="Arial, Helvetica, sans-serif">	<%	'Mostrar aqui a questão 	response.write votos.fields("questao")	%>	</font></strong></td>  </tr>  <tr>	<td valign="top"><div align="center">	  <font color="#FF9900" size="2"><strong><font face="Arial, Helvetica, sans-serif">Resultado	  - <%=votostotal.fields("totalvotos")%> votos</font></strong></font><font face="Arial, Helvetica, sans-serif">	  <font size="2">	  <%	  dim porcentagem	  'Fazer a repetição das opções com seus votos em porcentagem	  While NOT votos.EOF	  %>	  </font></font><font size="2">	  </font>	  <table width="100%" border="0" cellspacing="1" cellpadding="0">		<tr>		  <td><font size="2" face="Arial, Helvetica, sans-serif">		  <%		  'Mostrar opção		  response.write votos.fields("opcao")		  %>		  </font></td>		</tr>		<%		'Aqui será feita a conta dos votos em porcentagem		porcentagem = cdbl(votos.fields("votos"))*100		porcentagem = porcentagem / cdbl(votosTotal.fields("totalvotos"))		%>		<tr>		  <td height="18" valign="middle"><font size="2" face="Arial, Helvetica, sans-serif"><img src="img.gif" width="<%=porcentagem%>%" height="10"> 			  <font color="#666666">			  <%		  'Mostrar valor em porcentagem com apenas uma casa decimal		  response.write formatnumber(porcentagem,1)		  %>		  %																																																																																																																																																																																																																																																									   </font></font></td>		</tr>	  </table>		<font face="Arial, Helvetica, sans-serif"> 		<%	  votos.movenext	  wend	  %>		</font><font size="2" face="Arial, Helvetica, sans-serif">		<%	  'Se o voto do usuario já havia sido feito mostrar uma mensagem	  if request.querystring("status")="Invalido" then		  response.write "Você já votou hoje."	  end if	  %>		</font><font size="2"> </font> </div></td>  </tr></table></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual erro que retornou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olhando rapidamente achei uma coisa erradade

rsQuestoes.Open "SELECT LIMIT 1 * from questoes, votos where questoes.cod_questao=votos.cod_questao and votos.cod_questao=questoes.cod_questao", meubd

para
rsQuestoes.Open "SELECT * from questoes, votos where questoes.cod_questao=votos.cod_questao and votos.cod_questao=questoes.cod_questao  LIMIT 1", meubd
o LIMIT é no finalcoloque o erro pra sabermos o que é, se tem data na tabela é uma coisa que pode dar problema também

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal eu fiz uma modificação no code, limpei algumas coisas desnecessárias e quando fui fazer o teste no arquivo principal.asp no lado do servidor deu o erro:

 

ADODB.Recordset error '800a0e7d'

 

The connection cannot be used to perform this operation. It is either closed or invalid in this context.

 

/enquete/principal.asp, line 5

-------------------------------------

 

Seguem os CODES novos:

 

 

 

conectar.asp

<%Set Conexao = CreateObject("ADODB.CONNECTION")ConStr = "Driver={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=meubanco; UID=meuid; PWD=minhasenha;" Conexao.CursorLocation = 3ConexaoAberta = FALSESub AbreConexao()	if not ConexaoAberta then	Conexao.Open ConStr	ConexaoAberta = True	end ifend subSub FechaConexao()	if ConexaoAberta then	Conexao.close	ConexaoAberta = False	end ifend sub %>
principal.asp

<!--#include file="conectar.asp"--><%'Abre o RecordsetSet RS = Server.CreateObject( "ADODB.Recordset" )RS.open "SELECT * FROM questoes, votos WHERE questoes.cod_questao=votos.cod_questao and votos.cod_questao=questoes.cod_questao  LIMIT 1"%><% 'Criando variáveisDim rsQuestoesset rsQuestoes=Server.CreateObject("adodb.RecordSet")%><html><title>Sistema de Enquete</title><%'Aqui será feito o Javascript que abrirá os resultados em Pop-up%><script language="JavaScript" type="text/JavaScript"><!--function abrirjanela(theURL,winName,features) { //v2.0  window.open(theURL,winName,features);}//--></script><%'Verificar se o voto foi feito'Se foi, gravará uma session com a opção marcadaif request.form("voto")<>"" then	session("voto")=request.form("voto")	response.write "<script>javascript:abrirjanela('votar.asp','Resultado','width=200,height=280')</script>"end if%><body><table width="200" border="0" cellspacing="2" cellpadding="1">  <tr>	<td bgcolor="#FF9900"><font size="2" face="Arial, Helvetica, sans-serif"><b>	  <%=rs("questao")%>	</b></font></td>  </tr>  <tr>	<form name="form1" method="post" action"principal.asp"><td bgcolor="f4f4f4">	  <table width="200" border="0" cellspacing="1" cellpadding="0">		<tr>		  <td><table width="200" border="0" cellpadding="0" cellspacing="0">						  <% 			  'Criaremos uma variavel que fará com que a primeira opção fique marcada ao iniciar			  dim check			  check="checked"			  			  'Iremos aqui utilizar o WHILE para repedir as Opções para voto			  while NOT rsQuestoes.EOF 			  %>			  <tr>			  <td width="23">			  <input name="voto" type="radio" value="			  <% 			  'Aqui setaremos o valor que utilizaremos para somar o voto			  'de uma determinada opção			  response.write rsQuestoes.fields("Cod_voto") 			  %>			  " <%=check%>>			  </td>			  <td width="177"><font size="2" face="Arial, Helvetica, sans-serif">				<% 				'Mostrar o Campo da tabela que mostrará as Opções				response.write rsQuestoes.fields("Opcao") 				%>			  </font></td>							</tr>			<%			check=""			rsQuestoes.movenext			wend			%>		  </table></td>		</tr>		<tr>		  <td>			<div align="center">			  <br>			  <input type="submit" name="Submit" value="votar">			  <br>			  <br>			</div></td>		</tr>		<tr>		  <td><div align="right"><font size="2" face="Arial, Helvetica, sans-serif"><a href="#" onClick="abrirjanela('resultado.asp','Resultado','width=200,height=280')">Ver 				resultados</a><br>				</font></div></td>		</tr>	  </table></td>	</form>  </tr>  <tr>  </tr></table></body></html><% rs.close %>

votas.asp

<!--#include file="conectar.asp"--><% AbreConexaoOption Explicit'Iremos verificar um Cookie para saber se o usuário já votou'Se ele já tiver votado, irá para a página de resultados com o QueryString = Inválidoif request.cookies("enquete")("voto")<>"" then	response.redirect "resultado.asp?status=Invalido" end if'Criando variáveisDim votos, opcaoEscolhida, quant'Gravando a opção escolhida em uma variávelopcaoEscolhida = session("voto")set votos=server.createobject("adodb.RecordSet")votos.Open "SELECT * FROM Votos WHERE cod_voto="&opcaoEscolhida&""'Guardar quantidade de votos em uma variável antes deste votoquant = votos.fields("votos")'Iremos executar agora o SQL que atualizará os votosalterar = "UPDATE votos SET votos = " & quant & "+1 WHERE cod_voto = "&opcaoEscolhida&""Conexao.Execute(alterar)FechaConexao'meubd.EXECUTE "UPDATE votos SET votos = " & quant & "+1 where cod_voto="&opcaoEscolhida&""'Para evitar que o usuário vote novamente, iremos criar um cookieresponse.Cookies("Enquete")("Voto") = date'Setando valor à sessionsession("voto")=""'O voto já foi computado, agora irá para a página que exibirá o resultadoresponse.redirect "resultado.asp?questao= "& votos.fields("cod_questao") &""FechaConexao%>
resultado.asp

<!--#include file="conectar.asp"--><% AbreConexaoOption Explicit'Criando variáveisDim votosTotal, votosset votosTotal=server.createobject("adodb.RecordSet")set votos=server.createobject("adodb.RecordSet")'Agora a SELECT dos votos individuaisvotos.open "SELECT * FROM Votos, questoes WHERE votos.cod_questao = questoes.cod_questao AND questoes.cod_questao=votos.cod_questao LIMIT 1"'Fazendo a SELECT do total de votosvotosTotal.open "SELECT sum(votos) AS totalvotos FROM votos WHERE cod_questao ="&votos.fields("cod_questao")&""%><html><title>Sistema de Enquete</title><body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"><table width="200" height="250" border="0" cellpadding="1" cellspacing="2">  <tr>	<td height="25"><strong><font size="2" face="Arial, Helvetica, sans-serif">	  <%=votos("questao")%>	   </font></strong></td>  </tr>  <tr>	<td valign="top"><div align="center">	  <font color="#FF9900" size="2"><strong><font face="Arial, Helvetica, sans-serif">Resultado	  - <%=votostotal.fields("totalvotos")%> votos</font></strong></font><font face="Arial, Helvetica, sans-serif">	  <font size="2">	  <%	  dim porcentagem	  'Fazer a repetição das opções com seus votos em porcentagem	  While NOT votos.EOF	  %>	  </font></font><font size="2">	  </font>	  <table width="100%" border="0" cellspacing="1" cellpadding="0">		<tr>		  <td><font size="2" face="Arial, Helvetica, sans-serif">		  <%		  'Mostrar opção		  response.write votos.fields("opcao")		  %>		  </font></td>		</tr>		<%		'Aqui será feita a conta dos votos em porcentagem		porcentagem = cdbl(votos.fields("votos"))*100		porcentagem = porcentagem / cdbl(votosTotal.fields("totalvotos"))		%>		<tr>		  <td height="18" valign="middle"><font size="2" face="Arial, Helvetica, sans-serif"><img src="img.gif" width="<%=porcentagem%>%" height="10"> 			  <font color="#666666">			  <%		  'Mostrar valor em porcentagem com apenas uma casa decimal		  response.write formatnumber(porcentagem,1)		  %>		  %																																																																																																																																																																																																																																																									   </font></font></td>		</tr>	  </table>		<font face="Arial, Helvetica, sans-serif"> 		<%	  votos.movenext	  wend	  %>		</font><font size="2" face="Arial, Helvetica, sans-serif">		<%	  'Se o voto do usuario já havia sido feito mostrar uma mensagem	  if request.querystring("status")="Invalido" then		  response.write "Você já votou hoje."	  end if	  %>		</font><font size="2"> </font> </div></td>  </tr></table></body></html><% FechaConexaovotos.closevotosTotal.close %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tentou abrir o recordset sem definir a conexão

de:

RS.open "SELECT * FROM questoes, votos WHERE questoes.cod_questao=votos.cod_questao and votos.cod_questao=questoes.cod_questao  LIMIT 1"
Para:

RS.open "SELECT * FROM questoes, votos WHERE questoes.cod_questao=votos.cod_questao and votos.cod_questao=questoes.cod_questao  LIMIT 1",conexao%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

J. fiz a alteração e rolou isso quando dei um f5:A página não pode ser exibida Há um problema com a página que você está tentando acessar e ela não pode ser exibida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

normalmente essa mensagem dá quando a página(arquivo.asp) está sem premissões de leitura do IIS

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.