10. august 2005 - 10:33Der er
5 kommentarer og 1 løsning
hvad gør jeg galt i mit unike besøge
Sider og har denne her kilde kode
$ip = getenv("REMOTE_ADDR"); $time_now = time() - 10800; $res_ip = mysql_query("SELECT * FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."' ORDER BY id DESC"); $row_ip = mysql_fetch_array($res_ip);
Men problmert er så at den ikke udskriver rigtig... kan ikke få den til at tage ( lasttime ) fra databasen og sige den skall finde noget hvis det er talet er minder end $time_now
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Dit felt, ID, har en ret fremtrædende rolle i din kode - kunne du derfor ikke lige forklare, hvad der gemmer sig bag dette og hvordan det set ud nede i databasen?
Desuden undre jeg mig lidt over din SELECT:
"SELECT * FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."' ORDER BY id DESC"
Hvorfor har du en ORDER BY på id hvis du alligevel kun udtrækker de rækker som opylder at:
... WHERE id = '". $_GET['ID'] ."' ...
Endelig undre jeg mig over din if-sætning:
if ($row_ip['id'] == false)
- idet at $row_ip['id'] aldrig nogensinde burde kunne give false (med mindre det da er et boolean-felt, hvilket synes at være i modstrid med at det er et felt som skal indeholde et id).
if ($row_ip['id'] == false) = fordi den skal tjekke omkring der er noget der findes hvis ikke skal den smide plus 1 til et uniks besøgen... og oprette sådan den ikke kan blive flase :o) hvis det stemmer skal den bare springe over den stykke kode....
ang. "SELECT * FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."' ORDER BY id DESC"
fordi hvis der findes en af samme type så skal den bare oprette en ny med samme ip bare en anden time sådan man kan trække det nyest ud og tjecke på om den er overskradet eller ej ?
er jeg helt galt åp den eller ? hvordan ville du ha lavet det enligt.... ?
Det jeg mener er at der overhovedet ikke er nogen grund til at have "... ORDER BY id DESC" når der alligevel kun er et og samme id:
"SELECT * FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."' ORDER BY id DESC"
- kan derfor simplifiseres til:
"SELECT * FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."'"
Dernæst, så gør dit tjek:
if ($row_ip['id'] == false)
- ikke det du tror. Faktisk giver det vist slet ikke mening.
I stedet bør du spørge på hvor mange rækker der er blevet udtrukket - dette gøres med mysql_num_rows:
$ip = getenv("REMOTE_ADDR"); $time_now = time() - 10800; $res_ip = mysql_query("SELECT * FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."'"); $row_ip = mysql_fetch_array($res_ip);
...
if (mysql_num_rows($res_ip) == 0) { $StatsUnike = $row['Unike'] + 1; $SQL_Update_Str .= "unike = '". $StatsUnike ."', "; mysql_query("INSERT INTO ip_tjeck SET ip = '". $ip ."', siteid = '". $_GET['ID'] ."', lasttime = '". time() ."'"); }
Som et alternativ til mysql_num_rows, kan du jo også spørge databsen direkte om hvor mange rækker der er, med count()-funktionen:
"SELECT count(*) AS antal FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."'"
Denne variant ville så se sådan her ud:
$ip = getenv("REMOTE_ADDR"); $time_now = time() - 10800; $res_ip = mysql_query("SELECT count(*) AS antal FROM ip_tjeck WHERE id = '". $_GET['ID'] ."' AND ip = '". $ip ."' AND lasttime <= '". $time_now ."'"); $row_ip = mysql_fetch_array($res_ip);
...
if ($row_ip["antal"] == 0) { $StatsUnike = $row['Unike'] + 1; $SQL_Update_Str .= "unike = '". $StatsUnike ."', "; mysql_query("INSERT INTO ip_tjeck SET ip = '". $ip ."', siteid = '". $_GET['ID'] ."', lasttime = '". time() ."'"); }
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.