Avatar billede neonman Nybegynder
10. august 2005 - 10:33 Der 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

hvad gør jeg forkert....

her er rasten af stump coden som skal udføre det.

## Unike tjeck
if ($row_ip['id'] == false)
{
    $StatsUnike = $row['Unike'] + 1;
    $SQL_Update_Str .= "unike = '". $StatsUnike ."', ";
    mysql_query("INSERT INTO ip_tjeck SET ip = '". $ip ."', siteid = '". $_GET['ID'] ."', lasttime = '". time() ."'");
}
Avatar billede nielle Nybegynder
10. august 2005 - 14:30 #1
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).
Avatar billede neonman Nybegynder
11. august 2005 - 08:32 #2
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.... ?
Avatar billede nielle Nybegynder
11. august 2005 - 11:52 #3
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() ."'");
}
Avatar billede neonman Nybegynder
11. august 2005 - 13:49 #4
arrr :o) måske jeg hra fundet fejlen så.... :o) fordi id skal slet ikke være der :s prøver lige noget *GG* :D
Avatar billede neonman Nybegynder
11. august 2005 - 13:53 #5
smid svar :o) nu funger det fordi jeg var en klov og sæt `den skal matshe id med brugers id den sku ha bruges id til siteid i sted for :o)
Avatar billede nielle Nybegynder
11. august 2005 - 18:04 #6
Svar :^)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester