Counter Hilfe

Eine Tabelle reicht. Die nennst du `track`. Die Tabelle hat die Felder id, ip und date. Der Eintrag verläuft einfach so:
PHP:
$sql = "INSERT INTO `track` (`ip`,`date`) VALUES ('$ip'," . time() . ")";
mysql_query ( $sql );
Und dann kannst du auch die Abfrage machen:
PHP:
<?php
$month = date ( "j" ) < 2 ? date ( "m" ) - 1 : date ( "m" );
$count = date ( "t" , mktime ( 0 , 0 , 0 , $month - 1 , 1 , date ( "Y" ) ) );
$day = date ( "j" ) < 2 ? $count : date ( "j" );

$start = mktime ( 0 , 0 , 0 , $month , $day - 1 , date ( "Y" ) );
$end = mktime ( 23 , 59 , 59 , $month , $day - 1 , date ( "Y" ) );

$sql = "SELECT * FROM `track` WHERE `date` BETWEEN $start AND $end";
$result = mysql_query ( $sql );
$gestern = mysql_num_rows ( $result );
?>

Naja eigentlich wollt ich das aus der Tabelle heute ab 0Uhr die anzahl in gestern geht und dann soll heute die anzahl wieder auf 0 gesetzt werden!

Da ich wie gesagt bisher nur mit Heute, Gesamt und Jetzt gearbeitet habe weiss ich nicht wie ich das mit dem time machen soll das wenn 0uhr ist das heute 0 wird und gestern eben die anzahl aus heute übernommen wird!

Zumal ich diesen Counter so mache das man die Statistik reseten kann über ACP!

Ich dachte da so ungefähr:

PHP:
if(date("H", time()) == 23 && date("i", time()) == 59) {
$db->query("UPDATE gestern SET online='".$heute."'");
$db->query("TRUNCATE TABLE heute");
}

So in der Art eben
 
So habe es endlich hinbekommen ;)

habe es so gemacht:

PHP:
if(date("H", time()) == 23 && date("i", time()) == 59 && date("s", time()) == 59) {
// Ausführung meines Updatequerys für Gestern
// Ausführung meines Updatequerys für Heute um es auf 0 zu setzen
} else {
// Ansonsten bleibt der Zähler so wie er ist wenn die Zeit noch nicht: 23:59:59 ist
}
 
Hey nichts für ungut, aber du machst dir es ziemlich schwer.
Versuch doch nachzuvollziehen, was die anderen dir sagen wollten.
 
Das habe ich natürlich berücksichtigt

Aber wie sagt man immer selber ist der Mann

Und da ich noch lernen will dacht ich versuch nebenher meine Versuche und es ist mir auch gelungen daher bedank ich mich bei allen dir mir geholfen haben
 
Kann ich nochvollziehen =)....
aber du wirst später wenn du am programmieren dran bleibst merken, das man es sich zu anfang immer etwas kompliziert gemacht hat.
Lg.
Garlof
 
@Lenox

Für dein Vorhaben reicht auch eine Tabelle mit:
SQL:
CREATE TABLE `ds_counter` (
  `id` smallint(1) unsigned NOT NULL default '0',
  `gestern` int(4) NOT NULL default '0',
  `heute` int(4) NOT NULL default '0',
  `gesamt` int(14) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)
PHP:
// counter.php
// neuer user ?
  if ($_SESSION['count'] != 1)
  {
    $sql = "UPDATE `ds_counter` SET `heute` = `heute` + 1,`gesamt` = `gesamt` + 1
            WHERE `id` = '1' LIMIT 1;";
    if (mysql_query($sql))
    {
      $_SESSION['count'] = 1;
    }
    else Fehler();
  }
  
 // auslesen
 $sql = "SELECT gestern,heute,gesamt FROM ds_counter LIMIT 1;";
 if ($erg = mysql_query($sql))
 {
   $row = mysql_fetch_object($erg);
   $c_heute = $row->heute;
   $c_gestern = $row->gestern;
   $c_gesamt = $row->gesamt;
 }
 else Fehler();

Dann ein Cronjob der diese Datei um 24uhr ausführt:
PHP:
$stunde = intval(date("H",time()));
 $minute = intval(date("i",time()));
 if ($stunde < 1 and $minute < 5)
 {
   include "../inc/config.php";
   $sql = "UPDATE `ds_counter` SET `gestern`=`heute`,`heute`=0 WHERE `id`='1' LIMIT 1;";
   mysql_query($sql);
 }
 else echo 'Nix is !';

Crontab-Befehl: lynx --dump http://www.adresse.de/script.php > /dev/null 2>&1

mfg
 
So habe es endlich hinbekommen ;)

habe es so gemacht:

PHP:
if(date("H", time()) == 23 && date("i", time()) == 59 && date("s", time()) == 59) {
// Ausführung meines Updatequerys für Gestern
// Ausführung meines Updatequerys für Heute um es auf 0 zu setzen
} else {
// Ansonsten bleibt der Zähler so wie er ist wenn die Zeit noch nicht: 23:59:59 ist
}
Nur als Tipp: Den zweiten Parameter bei date brauchst du nicht hinschreiben, wenn es die aktuelle Zeit sein soll.
php.net hat gesagt.:
string date ( string Format [, int Timestamp] )

Gibt einen formatierten String anhand eines vorzugebenden Musters zurück. Dabei wird entweder der angegebene Timestamp oder die gegenwärtige lokale Zeit berücksichtigt, wenn kein Timestamp angegegeben wird. Mit anderen Worten ausgedrückt: der Parameter Timestamp ist optional und falls dieser nicht angegeben wird, wird der Wert der Funktion time() angenommen.
 
Zurück