30. august 2004 - 21:31Der er
60 kommentarer og 1 løsning
Hvilket land er browseren åbnet i??
Hej
Jeg skal have udvidet mit CMS sådan at jeg kan have reklamer som passer til de forskellige lande. Derfor vil jeg gerne finde et script som kan se hvilket land som browseren er åbnet op i, sådan at jeg kan trække de rigtige bannere ud af min database.
I databasen ligger fx. bannerkode, ID og Land_kode (landkoden til Danmark hedder fx. dk)
Så jeg skal have lavet noget, så når browser "landet" = dk så udskrives kun bannere fra databasen med dk!
Ja hvis du vil se hvor brugeren sidder i verden skal du bruge REMOTE_ADDR. Hvis du vil se hvilke sprog en bruge fortrækker at få vist er det HTTP_ACCEPT_LANGUAGE. De bruges på samme måde.
ip = Request.ServerVariables("REMOTE_ADDR")
Hvis du har downloaded database arne_v har linket til er her noget kode du kan bruge:
' Commenti: http://ip-to-country.webhosting.info/node/view/55 '------------------------------------------------------------------ Dim arrAsgIp, strDottedIp Function DottedIp(userIP) If Trim("[]" & userIP) <> "[]" Then arrAsgIp = Split(userIP,".") strDottedIp = arrAsgIp(0)*16777216 + arrAsgIp(1)*65536 + arrAsgIp(2)*256 + arrAsgIp(3) Else strDottedIp = "noIp" End If DottedIp = strDottedIp End Function
Dim strCountry, strCountry2
Function GetCountry(ip) 'Convert IP strDottedIp = DottedIp(ip) Dim strIP2Conn Dim Conn Dim Rs Dim strIP2SQL 'If there is a valid IP address If strDottedIp <> "noIp" Then strIP2SQL = "SELECT * FROM Country WHERE IP_From <= " & strDottedIp & " and IP_To >= " & strDottedIp & "" ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath("ip-to-contry.mdb") Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.Recordset") Conn.Open ConnStr Rs.Open strIP2SQL, Conn If Rs.EOF Then strCountry = "(unknown)" strCountry2 = "xx" Else strCountry = Rs("Country") strCountry2 = Rs("Country2") End If Rs.Close Set Rs = Nothing Conn.Close Set Conn = Nothing Else strCountry = "(unknown)" strCountry2 = "xx" End If End Function
ok, bemærk lige at der er en stave fejl i ip-to-contry.mdb i connection strengen :) Men det får du nok rette når du afligevel skal rette stien til så den passer.
Hej, jeg har downloadet databasen, men den ligger i et CSV fil format og jeg er ik helt klar over hvordan jeg ekspotere den til min MySql db?
Skal hele scriptet køres hver gang en side loades, da reklamerne skrifter hver gang en side er loadet, eller skal det bare ligges ind i en cokkies, sådan at landet bare findes frem når websiden åbnes?
I PhpMyadmin gør følgende 1) vælg den tabel i den database, du vil importere til 2) vælg SQL-fanebladet 3) forneden, klik på "Importer tekstfil til tabellen" 4) sæt værdierne fornuftig ;-) 5) tryk send Prøv dig frem med hvilke værdier du skal vælge. De afhænger af dit styresystem.
Men jeg får bare en fejl når jeg følger dette eksempel? øvv
Jeg kan nu heller ikke lige så den til at tage filen på den måde. Jeg lavet et lille scritp som laver en linje i filen om til en insert into linje, så kan jeg få det til at virke via SQL sidens "Or Location of the textfile"
Ja har kørt det min lokale web-server. Det åbner filen og skriver en ny fil:
<% set fso=Server.CreateObject("Scripting.Filesystemobject") set fin = fso.OpenTextFile("D:\test\ip-to-country.csv") set fud = fso.OpenTextFile("D:\test\test2.csv",2,true) do while not fin.AtEndOfStream str = fin.readline str = "insert into iptocountry (ip_from, ip_to, country_code2, country_code3, country_name) values (" & replace(str,"""","'") & ");" fud.writeline str loop fin.Close fud.Close %>
insert into `ip-to-country` (ip_from, ip_to, country_code2, country_code3, country_name) values ('1343222272 ','1343222287 ','CI ','CIV ','COTE D 'IVOIRE' )
MySQL returnerede:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'IVOIRE'); insert into `ip-to-country` (ip_from, ip_to, countr
Jeg har ikke prøvet hele filen før nu og den fejler efter et stykke tid. Så har jeg prøvet at lave en anden fil og den fejler ikke dog siger den efter noget tid "No SQL query". Men tager jeg et udpluk så viker det fint.... Der måske en grænse for max størrelsen på filen prøver lidt at halvere den. Den fil som ikke giver en fejl kode er uploaded.
Ok Jeg har fundet ud af der en fejl i en sidste fil, fil nr.7. Du skal åbne den med notepad og scrolle hent ned til sidste linje. Ret det sidste komma i linjen til et semikolon. Eller bliver de den ikke sat ind i tabelen.
Så dette: ('3758096384','4294967295','US','USA','UNITED STATES'),
Bliver til: ('3758096384','4294967295','US','USA','UNITED STATES');
Da der kun lå 4000 emner i databasen virkede det fint, og den udskrev et land under response.write, men nu skriver den følgende fejl og jeg har ikke rettet i scriptet!
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
Her er scriptet som jeg bruger:
Dim arrAsgIp, strDottedIp Function DottedIp(userIP) If Trim("[]" & userIP) <> "[]" Then arrAsgIp = Split(userIP,".") strDottedIp = arrAsgIp(0)*16777216 + arrAsgIp(1)*65536 + arrAsgIp(2)*256 + arrAsgIp(3) Else strDottedIp = "noIp" End If DottedIp = strDottedIp End Function
Dim strCountry, strCountry2
Function GetCountry(ip) 'Convert IP strDottedIp = DottedIp(ip) Dim strIP2Conn Dim Conn Dim Rs Dim strIP2SQL 'If there is a valid IP address If strDottedIp <> "noIp" Then
strIP2SQL = "SELECT * FROM COUNTRY WHERE IP_From <= " & strDottedIp & " and IP_To >= " & strDottedIp & "" Set rs = Server.CreateObject("ADODB.Recordset") Rs.Open strIP2SQL, strDNS If Rs.EOF Then strCountry = "(unknown)" strCountry2 = "xx" Else strCountry = Rs("Country") strCountry2 = Rs("Country2") End If Rs.Close Set Rs = Nothing Else strCountry = "(unknown)" strCountry2 = "xx" End If End Function
Så skal jeg lige høre! Skal jeg så bare ligge outputtet ind i en session("land"), sådan at jeg kan lave en anden tabel hvor mine bannere ligger i, så hvor jeg kan lave noget ligneden:
udskriv banner WHERE banner_land = session("land")
Det skal iøvrigt understregs at det er udgangen til internettet der identificeres.
Hvis du dialer ind til din TDC Internet account fra et hotel i udlandet så er IP adressen TDC og dermed Danmark.
Hvis du arbejder for et amerikansk firma og firmaets eneste internet tilslutning er i USA, så er IP adressen amerikansk.
Men i det første tilfælde er Danmark jo nok i virkeligheden det svar man helst vil have.
(i det andet tilfælde er der ikke noget at gøre - det eneste man kender er IP adressen på ydersiden af firmaets firewall - der er ingen måde at udlede noget firmaets interne net)
ok, tak for det - hvis du bare vidste hvilket bøvl det bare at været at få dataen ind i min MySql - så opdatering bliver vist ikke hver uge ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.