Problema contorizre ip-uri unice cu IPv6
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
ionatan
- Mesaje:94
Problema contorizre ip-uri unice cu IPv6
Salut, si La multi ani!
Am facut un script in care vreau sa contorizez vizitatorii unici pe care ii introduc in baza de date cu:
merge totul ok pana am observat ca cineva acceseaza siteul de pe telefon mobil iar ip-ul inregistrat este de ex: "2a02:2f02:b001:1" sau "2a02:2f07:301f:f"
Ce ip este acesta?
Nu m-ar deranja, dar treaba e ca de cate ori acceseaza se tot adauga in baza de date ca ip unic dar in fond este acelasi ip si nu ar trebui sa il mai repete.
Am cautat pe net ai am gasit ceva de genul ca sunt IPv6.
Cum as putea rezolva?
MarPlo
Mesaje:4343
Salut
Nu stiu cum e cu unicitatea la IPv6; o fi acelasi telefon, dar probabil are conexiune cu ip variabil care se schimba la fiecare conectare. Asa poate fi si la ip standard tip IPv4, acelasi calculator cu ip schimbator la fiecare conectare.
O idee ar fi sa folosesti si cookie impreuna cu ip-ul:
Cod: Selectaţi tot
$ip = isset($_COOKIE['yourip']) ? $_COOKIE['yourip'] : $_SERVER['REMOTE_ADDR'];
setcookie('yourip', $ip, time()+(3600 *24 *30)); //register the ip in cookie for 30 days
echo $ip;
// restul codului
Asa, chiar daca se schimba ip-ul, daca e acelasi calculator si browser foloseste ip-ul din cookie.
- Daca iti e de folos sa verifici ca ip-ul e standardul IPv4, poti folosi acest cod:
Cod: Selectaţi tot
$ip = $_SERVER['REMOTE_ADDR'];
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo 'Valid IPv4';
}
else {
echo 'Invalid IPv4';
}
ionatan
Mesaje:94
Ideea era ca la fiecare accesare a site-ului era acelasi ip 2a02:2f02:b001:1 a accesat 20 pagini si a adaugat in baza de date 20 randuri cu acelai ip ca si cum ar fi 20 unici...... nu e corect deci eu am pus conditia daca mai exista acel ip in bd sa nu mai introduca si totusi se face insert
Multumesc de raspuns, inca caut sa rezolv....... si nu ma las pana nu ii dau de capat
ar fi o idee geniala si cu cookie . se poate seta cookie.ul ca si timp sa fieziua curenta sau durata lui de viata sa fie pana la sfarsitul zilei.....?
MarPlo
Mesaje:4343
Atunci, daca face insert cu aceeasi valoare, problema nu e la ip, ci la codul de verificare si insert in baza de date, poate si tipul coloanei de tabel mysql.
Daca setezi tipul coloanei ca UNIQUE nu va mai adauga de 2 ori aceeasi valoare.
- Cookie valabil pana la sfarsitul zilei:
Cod: Selectaţi tot
setcookie('yourip', $ip, strtotime('tomorrow'));
ionatan
Mesaje:94
asa fac verificare si insert
Cod: Selectaţi tot
$ip = $_SERVER['REMOTE_ADDR'];
date_default_timezone_set('Europe/Bucharest');
$data = date('Y-m-d H:i:s');
// Conectare si creare obiect PDO
$conn = new PDO("mysql:host= ; dbname=", " ", "");
$sql="select * from vizite_unice
where ip='$ip' AND
DAY( data ) = EXTRACT(DAY FROM NOW()+ INTERVAL 1 HOUR ) AND
MONTH( data ) = EXTRACT(MONTH FROM NOW() ) AND
YEAR( data ) = EXTRACT(YEAR FROM NOW() ) ";
$rows = $conn->query($sql);
$nr_rows = $rows->rowCount();
if($nr_rows == 0) {
$sql = "INSERT INTO `vizite_unice` (`ip`, `data`, `utilizator` ) VALUES ('". $ip. "', '".$data."' , '". $utilizator. "' )";
$rows = $conn->query($sql);
}
daca voi seta tipul coloanei UNIQUE inseamna ca indiferent de data calendaristica, nu va repeta acel ip dar eu vreau acel ip o data pe zi
MarPlo
Mesaje:4343
Coloana "ip" sa aibe numar de caractere care sa poata cuprinde si IPv6, de exemplu VARCHAR(40).
Incearca sa stergi " + INTERVAL 1 HOUR", adica:
Cod: Selectaţi tot
$sql = "... DAY( data ) = EXTRACT(DAY FROM NOW()) ...";
Sau Select-ul si Insert asa:
Cod: Selectaţi tot
$sql="SELECT COUNT(*) FROM vizite_unice
where ip='$ip' AND
DAY( data ) = EXTRACT(DAY FROM NOW() ) AND
MONTH( data ) = EXTRACT(MONTH FROM NOW() ) AND
YEAR( data ) = EXTRACT(YEAR FROM NOW() )";
$rows = $conn->query($sql);
if($rows->fetchColumn() <= 0) {
$sql = "INSERT INTO `vizite_unice` (`ip`, `data`, `utilizator` ) VALUES ('". $ip. "', '".$data."' , '". $utilizator. "' )";
$rows = $conn->query($sql);
}
ionatan
Mesaje:94
cred ca sa rezolvat.....
coloana ip am avut-o VARCHAR , dar numarul de caractere foarte mic si normal ca nu se facea insertul ip-ului intreg, doar o parte din ip si logic ca facea selectul, cauta daca mai exista acel ip si nu il gasea ....si facea din nou un insert.....
am cautat pe net IPv6 si am gasit si din 38 caractere eu aveam VARCHAR(16)
am schimbat codul de select-insert cu ce mi-ai dat si am schimbat cu VARCHAR(100)
astept sa se conecteze acel utilizator sa verific
multumesc pentru tot .
Subiecte similare
- O mica problema de animatie CSS
HTML - XHTML - CSS
Primul mesaj
Noroc, MarPlo!
1. Am vizitat pe twitter un site de animatie, in care website-ul actual se numeste CSS-Challenges,com. In respectivul website, sunt...
Ultimul mesaj
1. Multumesc pentru raspuns.
2. Am inteles raspunsul tau: este un mic examen oferit voluntarilor online, pentru a le afla capacitatile de rezolvare...
- Problema curs de Engleza
Sesizari Erori si Greseli
Primul mesaj
Buna.
Am descarcat cursul curs_eurocor-engleza_incepatori_1-16.rar si cand vreau sa-l dezarhivez imi da eroarea asta:
An error occures whilw...
Ultimul mesaj
Buna,
Poti sa descarci cursul de engleza, nivel intermediar, de la urmatoarele linkuri:
- Lectiile 1-16...