Avatar billede tcp Nybegynder
31. oktober 2009 - 21:30 Der er 5 kommentarer og
1 løsning

hjælp til script counter ip date output

Hej eksperten jeg er ved at rettet lidt til i et gammelt script og har lidt problemer... jeg vil meget gerne kunne hive nogen vadier ud af databasen

Database
  SiteID  CategoryID  SubcategoryID  ip                  sTime 
      2          66            180  192.168.15.1    1256994513


sådan ser alle de poster ud med indgående hits

Det jeg gerne vil er at hiver alle hits ud for SiteID 2 på forskællige måder skal bruge vadier til at danne en statestik

så hvordan hiver jeg ud ud så jeg får antal besøgende indefor 30 dage hvor ipadressen kun vises en gang pr dag

som mit setup køre nu kan jeg nemelig kun se unikke besøgende for de sidste 5 dage

gammelt script

<?
require_once("conn.php");
require_once("includes.php");

//get the site title
$q1 = "select SiteTitle from counter_info where SiteID = '$_GET[id]' ";
$r1 = mysql_query($q1) or die(mysql_error());
$a1 = mysql_fetch_array($r1);
$SiteTitle = $a1[0];

//today
$t1_1 = mktime(0,0,0,date(m),date(d),date(Y));
$t1_2 = mktime(23,59,59,date(m),date(d),date(Y));
$date1 = date('m/d/Y', $t1_1);

$t2_1 = mktime(0,0,0,date(m),date(d) - 1,date(Y));
$t2_2 = mktime(23,59,59,date(m),date(d) - 1,date(Y));
$date2 = date('m/d/Y', $t2_1);

$t3_1 = mktime(0,0,0,date(m),date(d) - 2,date(Y));
$t3_2 = mktime(23,59,59,date(m),date(d) - 2,date(Y));
$date3 = date('m/d/Y', $t3_1);

$t4_1 = mktime(0,0,0,date(m),date(d) - 3,date(Y));
$t4_2 = mktime(23,59,59,date(m),date(d) - 3,date(Y));
$date4 = date('m/d/Y', $t4_1);

//before 5 days
$t5_1 = mktime(0,0,0,date(m),date(d) - 4,date(Y));
$t5_2 = mktime(23,59,59,date(m),date(d) - 4,date(Y));
$date5 = date('m/d/Y', $t5_1);

$q1 = "select distinct ip from counter_stats where SiteID = '$_GET[id]' and sTime between '$t1_1' and '$t1_2' ";
$r1 = mysql_query($q1) or die(mysql_error());
$rows1 = mysql_num_rows($r1);

$hits[] = $rows1;

$q2 = "select distinct ip from counter_stats where SiteID = '$_GET[id]' and sTime between '$t2_1' and '$t2_2' ";
$r2 = mysql_query($q2) or die(mysql_error());
$rows2 = mysql_num_rows($r2);

$hits[] = $rows2;

$q3 = "select distinct ip from counter_stats where SiteID = '$_GET[id]' and sTime between '$t3_1' and '$t3_2' ";
$r3 = mysql_query($q3) or die(mysql_error());
$rows3 = mysql_num_rows($r3);

$hits[] = $rows3;

$q4 = "select distinct ip from counter_stats where SiteID = '$_GET[id]' and sTime between '$t4_1' and '$t4_2' ";
$r4 = mysql_query($q4) or die(mysql_error());
$rows4 = mysql_num_rows($r4);

$hits[] = $rows4;

$q5 = "select distinct ip from counter_stats where SiteID = '$_GET[id]' and sTime between '$t5_1' and '$t5_2' ";
$r5 = mysql_query($q5) or die(mysql_error());
$rows5 = mysql_num_rows($r5);

$hits[] = $rows5;

$MaxHits = max($hits);

$MaxWidth = 300;

$px_per_hit = 300/$MaxHits;

$Day1 = $hits[0];
$width1 = round($Day1*$px_per_hit);

$Day2 = $hits[1];
$width2 = round($Day2*$px_per_hit);

$Day3 = $hits[2];
$width3 = round($Day3*$px_per_hit);

$Day4 = $hits[3];
$width4 = round($Day4*$px_per_hit);

$Day5 = $hits[4];
$width5 = round($Day5*$px_per_hit);


require_once("template/DetailedStatsTemplate.php");

?>

håber der er en der vil hjælpe Martin
Avatar billede showsource Seniormester
01. november 2009 - 07:18 #1
Præcis hvad er det du gerne vil ?
Din sTime går jeg ud fra er sekunder siden 1970.
Den kan du formatere direkte i query,

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

( FROM_UNIXTIME() )

og så bruge GROUP BY til at hente rækker for f.eks. en bestemt måned. Så vil YEARWEEK() nok være brugbar
01. november 2009 - 10:51 #2
tcp, den der lavede det gamle script enten kendte ikke til arrays eller var betalt per linie kode.

Jeg giver showsource ret i at det er ikke helt klart hvad for data du er efter.  Jeg gaar ud fra at du for hver dag de sidste 30 dage (inklusiv idag) vil have antal forskellige ips der har hit paa siden og have disse representeret som en "width," sandsynligvis for at kunne vise det i en graph.

Jeg foreslaar, i nedenstaaende kode, foerst at lave en array $dates[] med unix date for 30 dage.  Det skal vaere dagens begyndelse, klokken 0.00.00, i morgen, idag, i gaar, i forgaars, o.s.v.  Ved at traekke 1 fra unix date faar du unix daten for den forige dags slutning.  Saaledes behoever du ikke at beregne unix dates for 23.59.59

Saa foreslaar jeg at lave en array $hits[] for antal forskellige ips for hver dag og fylde den ved at kalde databasen en gang for hver dag.  (Jeg genbruger din query, men der er ogsaa andre maader at faa oplysningerne paa ved at bruge COUNT(*) og GROUP BY.)

Og til sidst en array $width[] med en bredte i px der svarer til antal hits per dag.

For at teste det lavede jeg en database tabel, kommer nederst.  Paa grund af dovenskab har jeg i den tabel kun lavet hits for 4 dage. I koden mellem **** har jeg in id som du skal erstatte med $_GET[id] og min database forbindelse som du skal erstatte med din.

Du kan see resultatet paa mit system i http://christianjorgensen.be/tcp.php 

Proev om det svarer paa dit spoergsmaal.  Hvis ikke saa fortael mig.  Og ha' en god soendag.

Her er koden:

<html>
<head>
  <title></title>
</head>

<body>
<?

for($i = 0; $i<=30; $i++)
{
  //Her laves en array $dates[] med unix-time klokken 0.00.00 i morgen, i dag, i gaar, i forgaars, osv.
  //$dates[0] - 1 er saa unix-time idag klokken 23.59.59
  $dates[] = mktime(0,0,0,date(m), date(d) - ($i - 1), date(Y));
}

//$id = $_GET[id];
//******my insert for at kunne teste i min database fordi jeg ikke har en $_GET[id]
$id = 1;
//****my insert****

//******my connection****
$link = mysql_connect ('christianjorgensen.be.mysql', 'christianjoygen', 'dnyBKKbe') or die(mysql_erorr());
    echo 'Connected successfully<br/>';
    mysql_select_db('christianjoygen') or die('Could not select database');
//******my connection****


for($i = 0; $i<=29; $i++)

  $daybegin = $dates[$i+1] - 1;//om aftenen 23.59.59 day $i
  $dayend = $dates[$i];
  $q = "SELECT DISTINCT ip FROM counter_stats WHERE SiteID = '$id' AND sTime BETWEEN '$daybegin' AND '$dayend'";
  $r = mysql_query($q) or die(mysql_error());
  $rows = mysql_num_rows($r);
  //Her laves en array med antal hits per dag.
  $hits[] = $rows;
}

$MaxHits = max($hits);
echo "MaxHits = " . $MaxHits;

$MaxWidth = 300;

$px_per_hit = 300/$MaxHits;

//Her laves en array med width per dag
for($i = 0; $i<=29; $i++)

  $width[$i] = round($hits[$i] * $px_per_hit);
  //********echo for demonstration
  echo $width[$i];
  echo "<br/>";
}

mysql_close($link);

?>

og her er database tabellen:

SiteID  CategoryID  SubcategoryID  ip  sTime 
      1 20 100 192.168.15.1 1257030123
      1 20 100 192.168.15.1 1257030123
      1 20 100 192.168.15.1 1257030124
      1 20 100 192.168.15.1 1257030125
      1 20 100 193.168.15.1 1257030123
      1 20 100 193.168.15.1 1257030124
      1 20 100 193.168.15.1 1257030126
      1 20 100 193.168.15.1 1257030127
      1 20 100 194.168.15.1 1257030123
      1 20 100 192.168.15.1 1256943623
      1 20 100 192.168.15.1 1256857223
      1 20 100 192.168.15.1 1256857224
      1 20 100 192.168.15.1 1256857225
      1 20 100 192.168.15.1 1256857226
      1 20 100 192.168.15.1 1256857227
      1 20 100 192.168.15.1 1256857228
      1 20 100 193.168.15.1 1256857223
      1 20 100 194.168.15.1 1256857223
      1 20 100 194.168.15.1 1256857223
      1 20 100 195.168.15.1 1256857223
      1 20 100 195.168.15.1 1256857223
      1 20 100 195.168.15.1 1256857223
      1 20 100 192.168.15.1 1256770823
      1 20 100 192.168.15.1 1256770824
      1 20 100 193.168.15.1 1256770823
      1 20 100 193.168.15.1 1256770824
      1 20 100 193.168.15.1 1256770825
      1 20 100 193.168.15.1 1256770826
      1 20 100 193.168.15.1 1256770827
      1 20 100 192.168.15.1 1256684423
Avatar billede tcp Nybegynder
01. november 2009 - 11:13 #3
Ja skal ikke bruge det grafiske til noget det bliver astattet, skal bruge de enkelte hits for hvær side de sidste 30 daqge og så kun unikke hits


Prøver lige at se på det du har lavet Christian
Avatar billede tcp Nybegynder
01. november 2009 - 11:28 #4
Det virker :-) super mange tak for hjælpen

for($i = 0; $i<=30; $i++)
{
  //Her laves en array $dates[] med unix-time klokken 0.00.00 i morgen, i dag, i gaar, i forgaars, osv.
  //$dates[0] - 1 er saa unix-time idag klokken 23.59.59
  $dates[] = mktime(0,0,0,date(m), date(d) - ($i - 1), date(Y));
}


$id = 1;



for($i = 0; $i<=29; $i++)

  $daybegin = $dates[$i+1] - 1;//om aftenen 23.59.59 day $i
  $dayend = $dates[$i];
  $q = "SELECT DISTINCT ip FROM counter_stats WHERE SiteID = '$id' AND sTime BETWEEN '$daybegin' AND '$dayend'";
  $r = mysql_query($q) or die(mysql_error());
  $rows = mysql_num_rows($r);
  //Her laves en array med antal hits per dag.
  $hits[] = $rows;
}

$MaxHits = max($hits);
//echo "MaxHits = " . $MaxHits;

$MaxWidth = 300;

$px_per_hit = 300/$MaxHits;

//Her laves en array med width per dag
for($i = 0; $i<=29; $i++)

  $width[$i] = round($hits[$i] * $px_per_hit);
  //********echo for demonstration
  //echo $width[$i];
 
  echo $hits[$i];
  echo "<br/>";
}
Avatar billede tcp Nybegynder
01. november 2009 - 11:51 #5
Christian kan jeg få dig til at hjælpe mig med at trække nogen andre udtræk

ekx besøg pr dag gennem 30 dage ?
01. november 2009 - 13:42 #6
Lav for god ordens skyld et nyt spoergsmaal.  Saa kan andre brugere paa Eksperten ogsaa bidrage, maaske har de ogsaa ideer.
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