Avatar billede michaeltryl Seniormester
17. august 2006 - 19:56 Der er 12 kommentarer og
1 løsning

evt. tjekke ip, men hvordan

jeg har denne kode

<?
$hitsnu = mysql_query("SELECT hits FROM tekster WHERE tekstID = '".$id."' LIMIT 1");
$hits = mysql_result($hitsnu,0);
$nyhits = $hits+1;
mysql_query("UPDATE tekster SET hits = $nyhits WHERE tekstID = '".$id."'") or die(mysql_error());
?>

den updatere feltet hits i min database og tæller det 1 op hver gang siden loades, men hvis brugeren trykker opdater (F5) tæller den også en op.
hvordan kan jeg undgå dette.
min ide er at lave et felt som hedder ip, hvor brugerens ip sættes ind i og er ip adressen den samme som den som allerede er i feltet skal der ikke tælles op.
er der en som kan hjælpe med dette eller er ideen helt ved siden af?
Avatar billede hmm10 Nybegynder
17. august 2006 - 20:00 #1
Smid en session efter du har gemt den første fremkomst af en IP, derefter tjekker du blot om, den er brugt før. Det burge en simpel if/else kunne hjælpe dig med.
Avatar billede michaeltryl Seniormester
17. august 2006 - 20:02 #2
jeg har hørt om sessions, men har aldrig brugt det, hvordan gør man det?
Avatar billede hmm10 Nybegynder
17. august 2006 - 20:05 #3
Kort fortalt er det en variabel, som man kan sætte, og som eksisterer så længe browseren er åben eller i en given tid som serveren er sat til.

Du kan læse mere her: http://dk2.php.net/session
Avatar billede mikze Nybegynder
17. august 2006 - 20:28 #4
indsæt fx dette på din forside eller i hvert fald på en side som bliver loadet som en af de første.

Husk at placerer koden over alt andet kode:

<?
session_start();
$_SESSION[nocount] = "ja";
?>


på de andre sider du har indsætter du så dette HUSK også i toppen af dokumentet:

<?
session_start();
if($_SESSION["nocount"] == "ja") {
$hitsnu = mysql_query("SELECT hits FROM tekster WHERE tekstID = '".$id."' LIMIT 1");
$hits = mysql_result($hitsnu,0);
$nyhits = $hits+1;
mysql_query("UPDATE tekster SET hits = $nyhits WHERE tekstID = '".$id."'") or die(mysql_error());
$_SESSION[nocount] = "nej";
}
?>


altså på den første side opretter du en session med navnet nocount med indholdet ja .. hver gang der bliver loadet en side opdaterer den hits 1 gang .. men når den har opdateret hits 1 gang opdaterer den ikke mere når en ny side bliver loadet fx.
Avatar billede mikze Nybegynder
17. august 2006 - 20:29 #5
du kan også nøjes med at indsætte

<?
session_start();
$_SESSION[nocount] = "ja";
if($_SESSION["nocount"] == "ja") {
$hitsnu = mysql_query("SELECT hits FROM tekster WHERE tekstID = '".$id."' LIMIT 1");
$hits = mysql_result($hitsnu,0);
$nyhits = $hits+1;
mysql_query("UPDATE tekster SET hits = $nyhits WHERE tekstID = '".$id."'") or die(mysql_error());
$_SESSION[nocount] = "nej";
}
?>



på din forside .. øverst selvfølgelig :)
Avatar billede hmm10 Nybegynder
17. august 2006 - 20:36 #6
mikze -> du kan da ikke sætte $_SESSION[nocount] = "ja"; øverst og så validere bagefter. Så vil den jo altid returne "ja".
Avatar billede michaeltryl Seniormester
17. august 2006 - 20:37 #7
hej mikze
jeg prøvede med din anden løsning, men der kommer denne fejl

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 2 in /home/www/sjov.magiske-michael.dk/prove/sjove-tekster.php on line 10

linie 10 er denne
$nyhits = $hits+1;
Avatar billede hmm10 Nybegynder
17. august 2006 - 20:41 #8
Og for ikke at først skulle hente data ud og derfter gemme igen, kan du ligeså godt benytte et enkelt kald.

mysql_query("UPDATE `tekster` SET `hits` = `hits` + 1 WHERE `tekstID` = '".$id."'")
Avatar billede zynzz Praktikant
19. august 2006 - 22:23 #9
<?
session_start();
if(!isset($_SESSION["nocount"])){
$hitsnu = mysql_query("SELECT hits FROM tekster WHERE tekstID = '".$id."' LIMIT 1");
$hits = mysql_result($hitsnu,0);
$nyhits = $hits+1;
mysql_query("UPDATE tekster SET hits = $nyhits WHERE tekstID = '".$id."'") or die(mysql_error());
$_SESSION[nocount] = "ja";
}
?>

ville mene dette virker ?
Avatar billede michaeltryl Seniormester
20. august 2006 - 11:03 #10
det kunne jeg heller ikke lige få til at virke, men har lavet et script nu som tjekker for om ip adresse har været på siden inden for x antal minutter eller timer
Avatar billede michaeltryl Seniormester
20. august 2006 - 11:04 #11
jeg lukker
Avatar billede hmm10 Nybegynder
20. august 2006 - 11:12 #12
Nu er jeg i tvivl om, hvor du får "$id" fra. Hvis den kommer fra adresselinjen skal den sættes som "$_GET['id']".

<?
session_start();
if(!$_SESSION['nocount'.$id]) {
  mysql_query("UPDATE `tekster` SET `hits` = `hits` + 1 WHERE `tekstID` = '".$id."'");
  $_SESSION['nocount'.$id] = true;
}
?>
Avatar billede zynzz Praktikant
20. august 2006 - 11:16 #13
Ja, den skal lige sættes... efter session_start
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