Gå til innhold

Sliter med teller.. :(


Anbefalte innlegg

Okay, for å sette meg inni PHP og filbehandling ++, bestemte jeg meg for å lage en teller som kunne gjøre følgende:

 

1: Opprette en fil, tall.php, hvor den lagret to verdier, på hver linje. Den første verdien var et tall som skulle øke med en for hver gang siden ble lastet, den andre skulle øke med en, KUN hvis brukeren ikke hadde besøkt siden før, eller brukeren ikke hadde postet en annen beskjed der den dagen.

2: Øke verdiene.

3: Skrive ut verdiene

 

Det virket ganske greit, men etter å ha slitt litt med både det ene og den andre må jeg gi opp. Koden kan virke litt dustete, men det er for å få det mest mulig oversiktlig, og lettvint. Jeg hadde før noen "branches", if inni if, men det ble for uoversiktlig og jeg mistet styr på hele greiene, på grunn av at det ikke fungerte. Så her følger koden:

 


<html>

<head>

<title>Teller</title>

</head>

<body>

<?php

$a = 0;  er dette nødvendig forresten, eller blir alle variabler nullstilt (false) når scriptet kjøres igjen?

$b = 0;

$nummer = file("tall.php");

$antall_sidevisninger = $nummer[0];

$antall_unike_sidevisninger_24h = $nummer[1];



$antall_sidevisninger = $antall_sidevisninger+1;



$ip_dato= date("yz");

$ip = "$REMOTE_ADDR";



$fil = "ip.php";

$iper = file($fil);

$linjer = count($iper);

$pos = strpos($iper[$i], $ip);



for ($i=0; $i<$linjer; $i++) {  Her kommer det av koden som ikke går så bra

if ($pos == true) { $a = 1234567890; }  Lagde disse $a osv for å unngå branching...

if (($a == 1234567890) AND ($ip_dato > $iper[$i+1])) { $antall_unike_sidevisninger_24h = $antall_unike_sidevisninger_24 + 1; $b = 0987654321; }

if ($pos == false) { $b = 0987654321; }

if ($b == 0987654321) {

 $fp = fopen($fil, "w");

 for($j; $j<$linjer; $j++) {

 	fwrite($fp, "$iper[$j].'n'");

 }

 $fp = fopen($fil, "a");

 fwrite($fp, "$ipn");

 fwrite($fp, "$ip_datonn");

}

}



$fil = "tall.php";

$fp = fopen($fil, "w");



fwrite($fp, "$antall_sidevisningerrn$antall_unike_sidevisninger_24h");



fclose($fp);



print ("Antall sidevisninger totalt: $antall_sidevisninger <br>Antall unike brukere (24 timers timeout): $antall_unike_sidevisninger_24h");



for ($i=0; $i<$linjer; $i++) {  Bare lagt til for meg selv, så jeg kan se at iallefall noe funker, og lettere finne ut hvor feilen ligger.

print ("<p>$iper[$i]</p>");

}



print ("<p><b>$linjer</b></p>");

print ("$a <br> $b");

?>

</body>

</html>

Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

Orker ikke å se på koden din, sorry. men Har selv laget en counter akkurat (nesten, bortsett fra at den lar brukeren (ipen) increase counteren hvis det er mer enn 24 timer siden sist han var der) som du beskriver før. Du kan jo kikke på den, så skønner du kanskje hvordan du kan få det til ;)

 

sub/func.php:

<?php

//counter file

define('COUNTERFILE','sub/counter/count.txt');

//functions for counter

function counter_insert($ip, $timestamp){

$return = false;

//open file and put it into an array

$fd = fopen(COUNTERFILE, 'r') or die("could not open counter file for reading");

$fil = fread($fd, filesize(COUNTERFILE));

$file = explode("n",$fil);

$ret = false;

foreach($file as $check){

 $arr = explode('@', $check);

 if($arr[0] == $ip){

 	if((time() - $arr[1]) < 86400){

   $ret = true;

 	}

 }

}

if(!$ret){

 //user has not been here within the last 24 hrs

 //insert record

 $fd = fopen(COUNTERFILE, 'a') or die("could not open counter file for writing");

 $fwrite = fwrite($fd, $ip.'@'.$timestamp."n") or die("could not write to counter file");

 $return = true;

}

return($return);

}



function counter_display(){

$fd = fopen(COUNTERFILE, 'r') or die("could not open counter file for reading");

$fil = fread($fd, filesize(COUNTERFILE));

$file = explode("n",$fil);

$count = 0;

foreach($file as $file2){

 $count++;

}

return($count-1);

}

?>

 

putt dette i en fil (sub/func.php i dette eksempelet) og inkluder det i siden du vil sette inn eller vise telleren. som dette:

 

index.php:

<?php

require("sub/func.php");

//insert counter things

if(counter_insert($_SERVER['REMOTE_ADDR'], time())){

header('location: '.$_SERVER['PHP_SELF']);

}

?>

<html>

<head>

<title>Counter</title>

</head>

<body>

You are visitor No. <?php print(counter_display()); ?>

</body>

</html>

 

Lykke til!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...