Ir para conteúdo
Fórum Script Brasil
  • 0

Enquete (IP)


Vagner Nunes

Pergunta

Prezados,

Baixei um script de Enquete e fiz uma modificação nele.Esse sistema funciona direitinho, ele cadastra um log com o IP do cara e data, etc.

Porém, quando existe uma Rede de Computadores, por exemplo, se eu votar, ou meu colega, não pode mais votar, porque, eu já votei. Tem como adaptar esse código para saber diferenciar IP e IP de Rede? Uma forma que dois ou mais coputadores, consiga votar normalmente?

Segue código:

<%

Function String_GetFullPath( strVirtualPath )
    String_GetFullPath = Server.MapPath( strVirtualPath )
    String_GetFullPath = Replace(String_GetFullPath,"/","\")
End Function

Function PollMentor_GetDatabaseConn()
    Dim oRet
    Dim strDSN
    strDSN = "Driver={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("dados/enquete.mdb")
    Set oRet = Server.CreateObject ("ADODB.Connection")
    oRet.Open strDSN    
    Set PollMentor_GetDatabaseConn = oRet
End Function

Function PollMentor_GetTitle()
    PollMentor_GetTitle = "Enquete"    
End Function

Function PollMentor_TryToVote( sID, nNumber )
    Dim sRet, strSQL
    Dim oConn
    
    Set oConn = PollMentor_GetDatabaseConn()
    'Get real id...
    Dim oRS
    If sID = -1 Then
        Set oRS = oConn.Execute("select id from poll where active=true")
        sID = oRS("id").Value
        oRS.Close
        Set oRS= Nothing
    End If
    
    If PollMentor_CanUserVote( oConn, sID ) = False Then
        sRet = "Você já votou nesta enquete. Não é possível votar novamente."
    Else
        strSQL = "update poll set count" & nNumber & " = count" & nNumber & " +1 where "
        If nNumber =-1 Then
            strSQL = strSQL & " active=true"
        Else
            strSQL = strSQL & " id=" & sID
        End If
        oConn.Execute strSQL
        oConn.Execute "insert into votelog(poll_id, ip) values(" & sID & ",'" & Request.ServerVariables( "REMOTE_ADDR" ) & "')"
        sRet = "Obrigado por participar."
    End If
    oConn.Close
    Set oConn = Nothing
    PollMentor_TryToVote=sRet
End Function


Function PollMentor_CanUserVote( oConn, sID ) '
    'Check of user already has voted within 24 hours?
    'If so then no voting can be done...
    ' Here's your chance to display some other content
    '1. Check IP address
    Dim strSQL, sTime, oRS
    sTime = DateAdd( "d", -Request.Form("time"), now() )    
    strSQL = "select id from votelog where poll_id=" & sID & " AND datum < #"&sTime & "# AND ip='" & Request.ServerVariables( "REMOTE_ADDR" ) & "'"
    Set oRS = oConn.Execute(strSQL)    
    If oRS.EOF Then
        PollMentor_CanUserVote = True
    Else
        PollMentor_CanUserVote = False
    End If
    oRS.Close
    Set oRS = Nothing
End Function

Function PollMentor_GetPollInfo ( ByVal nID, ByRef sTitle, ByRef sQuestion, ByRef vAnswers, ByRef vCount )
    Dim sRet, strSQL
    Dim oConn, oRS, nCount
    
    Set oConn = PollMentor_GetDatabaseConn()
    
    strSQL = "select * from poll where " 
    If nID = -1 Then
        strSQL = strSQL & " active=true"
    Else
        strSQL = strSQL & " id=" & nID
    End If
    Set oRS = oConn.Execute(strSQL)
    If oRS.EOF Then
        PollMentor_GetPollInfo = False
    Else
        sTitle=PollMentor_GetTitle()
        sQuestion=oRS("question")
        For nCount=1 To 8
            vAnswers(nCount)=oRS("answer" & CStr(nCount))
            vCount(nCount)=oRS("count" & CStr(nCount))
        Next
        PollMentor_GetPollInfo  = True
    End If
    oRS.Close
    Set oRS = Nothing
    oConn.Close
    Set oConn = Nothing
End Function



%>

Abraços pessoal,

Valeu,

Sds,

Vagner Nunes

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Não possibilidade dele identificar um IP de Rede, e permitir a gravação.

se duas pessoas dentro de uma mesma rede acessarem o seu site, o ip q sera passado pra você ser o do servidor nos dois casos.

com ip de rede você quer dizer tipo 192.168....?? se for isso, não vai dar pra pegar não, esses ips são internos da rede deles. como eu disse é o ip do servidor deles na internet q sera passado pra você.

alem do mais, levando esse raciocinio em conta, você tb teria q levar em conta duas pessoas q acessassem internet do mesmo computador. se uma delas votasse, a outra não poderia mais votar.

acho q o sistema mais seguro pra isso seria o de login com usuario e senha. mas acho q só daria certo caso o seu site já tenha algum sistema de login pra acessar algum outro tipo de recurso, acho q ninguém vai querer se registrar no seu site só pra votar em uma enquete.

confirmacao por email tb é uma ideia (ai você não aceitaria emails repetidos), mas eu mesmo não ia passar o meu email só pra votar em uma enquete.

o melhor deve ser então você bloquear por um tempo. pelo q entendi o codigo q você tem ai bloqueia por 24 horas, acho q é o jeito.

ai você ve se acha melhor fazer por ip, por cookie ou pelos dois. enquetes abertas pra todos não vai ter jeito mesmo de proteger 100%.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...