Foros del Web » Programando para Internet » ASP Clásico »

añadir ip a base de datos

Estas en el tema de añadir ip a base de datos en el foro de ASP Clásico en Foros del Web. Hola, estoy desarrollando un script que busque en una tabla donde se guardan las ips de los usuarios que han votado un video, junto con ...
  #1 (permalink)  
Antiguo 23/04/2010, 06:42
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
añadir ip a base de datos

Hola, estoy desarrollando un script que busque en una tabla donde se guardan las ips de los usuarios que han votado un video, junto con el id de ese video, de tal manera que si esa ip ya ha votado ese video no pueda volver a hacerlo y si no es así, almacene su voto e ingrese esa ip en la tabla... sencillo.... pues bien, me da error al formatear la consulta para ingresar la ip, a ver si podeis echarme una mano...

Código:
'Primero comprobamos que el usuario no haya votado ya ese video

sql_ip ="SELECT * FROM Ip_videos WHERE Id_video ="& id_video&""

'abrimos la conexion y ejecutamos la consulta
Set con_ip = Server.CreateObject ("ADODB.connection")
con_ip.Open Application("sqlserver")
set rs_ip=con_ip.execute(sql_ip)



	Do while not rs_ip.eof 
		
		
		
		response.write("ip_guardada: "& rs_ip("Ip_voto")&"<br>")
		
		if rs_ip("Ip_voto") = ip_voto THEN
		
			'Si esa ip ya ha votado el video redirijimos nuevamente a la pagina sin sumar el voto
			ip_repetida = "si"
			exit Do
			
			else
				ip_repetida = "no"
		end if
	
	rs_ip.movenext
		
	loop
	
'Cerramos la conexion
rs_ip.Close 
set rs_ip = nothing 
con_ip.Close 
set con_ip = nothing
	
	if ip_repetida = "no" then
		
		' En caso de no haber votado establecemos los nuevos datos
					
		puntos_nuevo = ccur(puntos) + ccur(votacion)
		
		response.Write("puntos_nuevo: "& puntos_nuevo &"<br>")
		
		votos_nuevo = votos + 1
		
		'Actualizamos los datos de la votacion del video
		sql_video ="UPDATE Videos_Canalrh SET Puntos = "& puntos_nuevo &", Total_votos= "& votos_nuevo &"  WHERE Id ="& id_video &""
		
		'abrimos la conexion y ejecutamos la consulta
		Set con_videos = Server.CreateObject ("ADODB.connection")
		con_videos.Open Application("sqlserver")
		set rs_videos=con_videos.execute(sql_video)
		
		
		 
		
		'Insertamos el valor de la ip del usuario que ha votado el video
		sql_inserta_ip="INSERT INTO Ip_videos (Id_video, Ip_voto) VALUES (" + id_video + ", " + ip_voto + ")"
		
		response.write("cons: "& sql_inserta_ip& "<br>")
		'abrimos la conexion y ejecutamos la consulta
		Set con_inserta_ip = Server.CreateObject ("ADODB.connection")
		con_inserta_ip.Open Application("sqlserver")
		set rs_inserta_ip=con_inserta_ip.execute(sql_inserta_ip)
		
	
	end if
Estoy empezando con asp, por lo que puede haber errores en cuanto al tratamiento de cierre de conxiones y demas.... espero que podais solucionarme esta duda... os paso el error que me da junto con la salida de la consulta...

cons: INSERT INTO Ip_videos (Id_video, Ip_voto) VALUES (1, 80.24.93.167)

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near '.93'.

procesa_votos.asp, line 85
  #2 (permalink)  
Antiguo 23/04/2010, 10:17
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Respuesta: añadir ip a base de datos

Encierra entre apóstrofes la IP (el campo es string, ¿cierto?), al dejarla así la base de datos cree que es un número

sql_inserta_ip="INSERT INTO Ip_videos (Id_video, Ip_voto) VALUES (" + id_video + ", '" + ip_voto + "')"
  #3 (permalink)  
Antiguo 25/04/2010, 05:20
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: añadir ip a base de datos

Muchas gracias, era eso!!
  #4 (permalink)  
Antiguo 26/04/2010, 00:27
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: añadir ip a base de datos

Por cierto, ahora me veo en la tesitura de que cuando se vota desde distintos ordenadores conectados a la misma red, solo deja votar al 1º por tener la misma ip, como podría solucionar este problema?Alguna idea??
  #5 (permalink)  
Antiguo 26/04/2010, 08:17
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Respuesta: añadir ip a base de datos

Pues no se que tanto sea un problema, lo que quieres es que solo una IP pueda votar y eso es lo que estas consiguiendo, si quieres que solo un usuario pueda emitir un voto necesitarías un esquema Usaer/Password para este efecto, si estas trabajando en una página que corre sobre Internet.
Si es una intranet, pues hay códigos para obtener la mac address, que es lo que necesitarías hacer para distinguir a los diferentes clientes.

En mis pruebas tengo un código que bajé de algún sitio que alguna vez pensé utilizar en la red interna, aunque no me terminó de convencer la limitante del browser aunque fuera una intranet, pruebalo si gustas para ver la idea:
Código Javascript:
Ver original
  1. <!DOCTYPE  HTML  PUBLIC  "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3.       <head>
  4.             <title></title>
  5.             <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
  6.             <meta name="vs_targetSchema" content="http://schemas.
  7. microsoft.com/intellisense/ie5">
  8.             <script id="clientEventHandlersJS" language="javascript">
  9. <!--
  10.  
  11. function Button1_onclick() {
  12.       var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
  13.  
  14.       var service = locator.ConnectServer(".");
  15.       var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
  16.       var e = new Enumerator (properties);
  17.       document.write("<table border=1>");
  18.       dispHeading();
  19.       for (;!e.atEnd();e.moveNext ())
  20.       {
  21.             var p = e.item ();
  22.             document.write("<tr>");
  23.             document.write("<td>" + p.Caption + "</td>");
  24.             document.write("<td>" + p.IPFilterSecurityEnabled + "</td>");
  25.             document.write("<td>" + p.IPPortSecurityEnabled + "</td>");
  26.             document.write("<td>" + p.IPXAddress + "</td>");
  27.             document.write("<td>" + p.IPXEnabled + "</td>");
  28.             document.write("<td>" + p.IPXNetworkNumber + "</td>");
  29.             document.write("<td>" + p.MACAddress + "</td>");
  30.             document.write("<td>" + p.WINSPrimaryServer + "</td>");
  31.             document.write("<td>" + p.WINSSecondaryServer + "</td>");
  32.             document.write("</tr>");
  33.       }
  34.       document.write("</table>");
  35. }
  36.  
  37. function dispHeading()
  38. {
  39.       document.write("<thead>");
  40.       document.write("<td>Caption</td>");
  41.       document.write("<td>IPFilterSecurityEnabled</td>");
  42.         document.write("<td>IPPortSecurityEnabled</td>");
  43.         document.write("<td>IPXAddress</td>");
  44.       document.write("<td>IPXEnabled</td>");
  45.       document.write("<td>IPXNetworkNumber</td>");
  46.       document.write("<td>MACAddress</td>");
  47.       document.write("<td>WINSPrimaryServer</td>");
  48.       document.write("<td>WINSSecondaryServer</td>");
  49.       document.write("</thead>");
  50. }
  51.  
  52. //-->
  53.             </script>
  54.       </head>
  55.       <body>
  56.             <INPUT id="Button1" type="button" value="Button"
  57. name="Button1" language="javascript" onclick="return Button1_onclick()">
  58.       </body>
  59. </html>
  #6 (permalink)  
Antiguo 27/04/2010, 01:07
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: añadir ip a base de datos

Bueno, mirando otras aplicaciones web donde se votan videos o noticias... si puedo votar la misma desde distintos ordenadores conectados a la misma red, pero sólo una vez al día, entonces supongo que se hará mediante cookies o caché ... de todas maneras, esa solución de poder votarlo una vez al día aunque sea desde distintos ordenadores de la misma red tampoco me convence... creo que la que he implantado actualmente es mas realista a la hora de obtener unos resultados estadísticos correctos...
  #7 (permalink)  
Antiguo 27/04/2010, 07:18
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Respuesta: añadir ip a base de datos

Cita:
creo que la que he implantado actualmente es mas realista a la hora de obtener unos resultados estadísticos correctos
Yo solo se de estadística lo que me enseñaron en la universidad hace años , lo cual no es mucho, pero supongo que tendrás alguna fórmula para determinar qué quieres discriminar: si a los muchísimos usuarios diferentes que salen por una misma IP (empleados de una empresa, de una escuela, etc) o a aquellos, no se que tantos puedan ser, que por diversión pueden tomarse el tiempo de buscar diferentes ordenadores o browsers para emitir un voto.

No se que sea peor o mejor para obtener resultados estadísticos correctos.
  #8 (permalink)  
Antiguo 28/04/2010, 03:22
 
Fecha de Ingreso: junio-2007
Ubicación: Cádiz
Mensajes: 369
Antigüedad: 17 años, 5 meses
Puntos: 7
Respuesta: añadir ip a base de datos

Hombre, pues no se, pero si alguien vota un video y puede hacerlo todos los días, por mucho que no se esté discriminando el voto de todos los de su misma red, la muestra será menos fiel si tenemos el mismo voto repetido o al mismo votante repitiendo voto (que no votacion) que si restringimos el acceso por ip y solo puede votar una vez cada video... en una base de datos de 30.000 suscriptores más el tráfico que genera que no lo son, creo que habrá "suficientes ip´s" como para tomar una muestra lo suficientemente amplia para hacernos una idea de si el video gusta o no.... o no??
  #9 (permalink)  
Antiguo 29/04/2010, 05:15
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: añadir ip a base de datos

El problema de las estadísticas en las encuestas es el siguiente:
Si quieres estadísticas verídicas, la encuesta no será anónima, ya que siempre tendrás que controlar la IP del que vota o usar otros métodos de autenticación.
Si quieres encuestas anónimas olvídate de obtener estadísticas fiables, entonces te recomiendo que pongas en la balanza lo que más te conviene y tomes una decisión.

Saludos

Etiquetas: añadir, ip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:02.