PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : abstand in tagen?


Willy
16.02.2003, 18:15:50
hallo zusammen.
ich habe mal eine frage =)
Ich hab mir einen Counter geproggt, es funzt auch alles prima. doch nun möchte ich, dass die durchschnittliche Anzahl Besucher ermittelt und gerundet wird. Dafür möchte ich den abstand zwischen 2 daten (1. Datum: (datum an dem die seite online ging. 2. Datum wird ber getdate(); ermittelt) IN TAGEN ermitteln, und dann die anzahl der besucher durch diese tage teilen. schlussendlich wird das ergebniss dann noch mit round(); gerundet (auf eine Stelle). Nun ist mein problem:
1) Wie bestimme ich den abstand zweier daten in tagen ?
2) In welchem format müsste das 1. datum (datum an dem die seite online ging) gespeicher sein (string?)

danke schon jetzt für eure hilfe: willy

ach ja und noch ne frage: kann man irgendwie zählen wie viele zeilen eine txt hat?

c4
16.02.2003, 18:21:05
Anzahl Zeilen einer Datei:
echo count(file("dieDatei.ext"));

Das erste Datum solltest Du in Sekunden als Zeitstempel speichern (mit time()) - nur einmal nötig. Danach erechnest Du die Differenz des aktuellen Zeitstempels (auch time()) mit dem alten (neu minus alt). Das Ergebnis daraus dividierst Du durch 86400 (24*60*60) und rundest das Ganze dann wie gewünscht. Das Ergebnis sind dann die Tage, die seit dem ersten Tag vergangen sind.

Willy
16.02.2003, 20:45:31
danke erstmal
sorry wenn ich so böde bin =)
aber time(); errechnet doch den Abstand in sekunden seit beginn der unix epoche (1.1.1970oder so) wie kann ich denn bestimmen von wo an dass gezählt werden soll?
danke

c4
16.02.2003, 20:50:18
Stimmt, time() gibt Dir die Sekunden seit 1970 aus.
Darum speichert man den Startwert auch nur einmalig und rechnet dann immer mit dem aktuellen Zeitwert.
Du bestimmst also nicht von wo an gezählt werden soll, sondern Du errechnest nur die Differenz der beiden Werte.

Willy
16.02.2003, 21:02:44
Nochmal danke, und nochmal sorry dass ich so blöde bin...
also, ich errechne mit time(); die sekunden die vergangen sind seit beginn der UNIX epoche. Dann ist bei mir schon schluss, was muss ich denn genau machen? ich checks nicht, sorry.

c4
16.02.2003, 21:09:50
Also ich Versuch's mal:

save_start_date.php

$file=fopen("startdate.txt","w");
fwrite($file, time());
fclose($file);

Diese Datei nur einmal starten. Sie enthält das Datum, an dem die Seite eröffnet wurde.



days_since_start.php

$start=trim(file("startdate.txt"));
echo "Tage, die seit dem Start vergangen sind: ".(time()-$start)/86400;



Jetzt?

Willy
16.02.2003, 21:18:21
Sorry aber ich checks immer noch nicht....
muss ich jetzt 2 dateien erstellen oder wie ?
und was meinst du mit nur einmal starten?
Kannst du mir bitte genau sagen was ich machen muss?
danke, dass du soviel geduld hast und dir solche mühe gibst :)

c4
16.02.2003, 21:40:12
muss ich jetzt 2 dateien erstellen oder wie?
Ja. Welche: siehe oben.

und was meinst du mit nur einmal starten?
Schwierig zu erklären... Ich versuch's mal so: einmal starten. :)
Das gilt nur für die obere Datei!
Die untere muss include_d werden oder in den Code integriert werden.

Kannst du mir bitte genau sagen was ich machen muss?
Zusammenfassung: Du willst, dass auf Deiner HP irgendwo steht, wie viele Besucher durchschnittlich pro Tag auf der Seite waren. Dazu brauchst Du: Einen Besucherzähler und das Datum, an welchem Du begonnen hast die Besucher zu zählen. Dieses Datum muss an dem Tag gespeichert werden, an dem der Besucherzähler startet. Das ist die obere Datei. Dieser Zeitpunkt bleibt bestehen.
Um dann anzeigen lassen zu können (mistiges Deutsch), wie viele Besucher im Schnitt pro Tag auf der Seite waren musst Du das untere Skript nutzen.
Statt echo*"Tage, die seit dem Start vergangen sind: ".(time()-$start)/86400 nimmst Du dann aber echo*"Durchschnittliche Anzahl Besucher pro Tag: ".$gesamtanzahl_besucher/(time()-$start)/86400 $gesamtanzahl_besucher musst Du dem Skript entnehmen, das die Besucher zählt.

danke, dass du soviel geduld hast und dir solche mühe gibst :)
Irgendwie muss man die Zeit ja rumkriegen...

Na, wie sieht's aus?

Willy
16.02.2003, 21:57:37
also ich hab das nun folgendermassen gemacht: ich hab eine php datei namens save_start_date.php erstellt und die hat folgenden inhalt:

<?php
$file=fopen("startdate.txt","w");
fwrite($file, time());
fclose($file);
?>

dann hab ich in meine hauptseite folgenden code eingefügt:

<?php
$start=trim(file("startdate.txt"));
echo "Tage, die seit dem Start vergangen sind: ".(time()-$start)/86400;
?>

Nun kommt aber immer folgende fehlermeldung zurück:

Notice: Array to string conversion in c:homephpkursnews.php on line 89

Was mach ich falsch ?

c4
16.02.2003, 22:00:09
file() liefert immer ein Array zurück. Ich dachte, da die Datei nur eine Zeile beinhaltet, dass das kein Problem werden sollte, aber nun ja...
Schreib einfach join("", statt trim(

Sollte klappen.

Willy
16.02.2003, 22:09:37
jetzt kommt folgende fehlermeldung:

Wrong parameter count for join() in c:homephpkursnews.php on line 89

ich hab mal hier den php code, für den ganzen block (sind auch noch andere php sachen drin):

<?php
$zeiger=fopen("zaehler.txt","r+");
$zaehler=fgets($zeiger,7);
echo $zaehler;
$zaehler++;
rewind($zeiger);
fputs($zeiger,$zaehler);
fclose($zeiger);
?>

<?php

$start=join(file("startdate.txt"));
echo "Tage, die seit dem Start vergangen sind: ".(time()-$start)/86400;




?>
newsletter &quot;bez&uuml;ger&quot;:
<?php
echo count(file("zaehler.txt"));
?>
<br>
Ihre IP: <?php
echo $_SERVER['REMOTE_ADDR'];
?>

c4
16.02.2003, 22:13:38
Schreib einfach join("", statt trim(

Man beachte die 2 Hochkomma nach der Klammer...

--> $start=join("", file("startdate.txt"));

http://www.php.net/manual/en/function.join.php könnte an der Stelle recht empfehlenswert sein.

Willy
16.02.2003, 22:21:14
danke vielmals für die ausdauer und hilfe, dank dir hat es nun funktioniert.... juhu.
kann ich mich irgendwie revanchieren?

c4
16.02.2003, 22:23:26
Keine Ursache. :)

Willy
16.02.2003, 22:28:42
nun hab ich noch ne frage:
bei mir zeigts mommentan folgenden wert (der hat die variable $tag) an:
2.56973225446E-007
nun will ich runden...
$tag = round ($tag,2);
doch dann ist $tag=0...
was mach ich falslch?
danke

c4
16.02.2003, 22:31:47
Du machst mal wieder nichts falsch.
2.56973225446E-007 heißt so viel wie 2.56... mal 0.0000001 Ergebnis: 0.000000254...
Wenn Du das jetzt rundest kommt logischerweise Null raus.

Stell einfach das Datum eine Woche vor und es sollte klappen. Naja, den Besucherzähler sollte man vielleicht auch noch ein wenig manipulieren... ;)



PS: E-007 heißt 10 hoch -7, darum 0.0000001

Willy
16.02.2003, 22:59:15
ich hab nun das datum ca. 7 monate vorgestellt =), die txt auf 5 stellen "hochgetunt", doch es steht immer noch

5.24997948549E-009

was mach ich denn nun schon wieder falsch? =)

c4
17.02.2003, 09:15:36
Also ich hab mal meine Rechnungen durchprobiert: Daran liegt es nicht.
Nochmal zusammengefasst:

// Die durchschnittliche Anzahl Besucher seit Beginn ergibt sich aus:

Anzahl Besucher
-------------------------------------------------
aktueller Zeitstempel - alter Zeitstempel / 86400



// umgestellt sieht das dann so aus:

Anzahl Besucher * 86400
-----------------------------------------
aktueller Zeitstempel - alter Zeitstempel



// Wie mir scheint hast Du bisher wie folgt gerechnet:

Anzahl Besucher
-----------------------------------------
aktueller Zeitstempel - alter Zeitstempel
---------------------------------------------
86400

Entspricht: Besucher / (neu-alt) / 86400
So oder so: Das ist ein Doppelbruch! Der war nicht gelpant.

So geht es nun wirklich: Besucher / ((neu-alt) / 86400)


Klappt's?

Willy
17.02.2003, 16:24:21
ok danke klappt. doch was muss ich machen, wenn ich das datum zum ausrechnen wieder zurücksetzen möchte, wennn also die besucherzahl und die durchschnittliche besucherzahl widere zurückgesetzt werden soll? wenn alles nochmal von vorne beginnen sollte? danke schon jetzt: willy

c4
17.02.2003, 17:30:55
Nun ja, einfach den Zähler für die Besucher auf Null setzen, save_start_date.php staten, damit ein neues Startdatum gespeichert wird und das war's dann.
Nicht oder?

Willy
17.02.2003, 17:56:07
ne das wars noch nicht, denn wenn ich den counter auf 0 stelle und die datei save_start_date.php aufrufebleibt die besucherzahl/tag gleich
was mach ich falsch?

willy

ps. nochmal danke dass du so geduld hast =)

c4
17.02.2003, 18:09:45
Ähm... also... naja... uff... na... ähm... also jetzt komme ich ins Stottern.
Wie geht das denn? Lädt er die Seiten vielleicht aus dem Cache (Shift+Klick auf reload hilft da)
Also ansonsten fällt mir da nix wahres ein. Die Werte (Besucher & Startdatum) wurden auch ganz dolle wirklich und 101%ig sicher auf einen neuen (sprich Null und irgendeine große Zahl) Wert gesetzt?
Versteh ich nicht.

Willy
17.02.2003, 19:28:53
sorry, dass ich erst jetzt antworte, dachte, hätte schon geposted =)

so, ich weiss dass es nicht gerade die feine englische art ist, aber ich hab php nun einfach eine neue txt kreieren lassen. =)
nun hab ich noch 2 fragen: ich möchte mir ein news system kreieren, bei dem man die daten online eingeben kann. nun hab ich folgendes problem:
wie kann ich php dazu bringen, immer nur den neusten eingegebenene beitrag zu zeigen? wenn ja, wie, und wenn nein, kann ich irgendwie die gesamte txt überschreiben? wäre froh um eure (deine=) hilfe.

willy

c4
17.02.2003, 20:28:38
wäre froh um eure (deine=) hilfe.
Also meine Hilfe ist Dir hier gewiss. Aber ob sich andere um das kümmern, was hier ewig weit unten steht ist fraglich. Es empfiehlt sich daher einen neuen Thread zu beginnen. Ist schließlich ein ganz anderes Thema.

Aber zum Thema selber.
Du hast vermutlich vor die News in Textdateien zu speichern? Hast Du vor das in einer oder mehreren zu speichern?
Gehen wir mal davon aus, dass Du eine Textdatei für alle News verwendest. Dann liest Du Dir mal den Thread Nummero 3369 durch (http://www.selfphp.com/forum/forum/showthread.php?&threadid=3369) Du weißt, wie man Daten in Dateien speichert, ausliest und damit auch, wie man den neuesten Eintrag am Anfang hat. Gut, wa? :)

Eine kleine - vielleicht nötige - vorgreifende Ergänzung: Die News wirst Du bestimmt in einem textarea-Feld eingeben lassen. Damit sind Zeilenumbrüche nötig. Da Du in der Textdatei aber nur eine Zeile pro Nachricht zur Verfügung stehen hast, sollte man eben jene vorher auf genau diese Maß zusammenstauchen. So ziemlich genau so: $eintrag=str_replace("rn","<br>",$eintrag); Das r muss u.U. weggelassen werden.

So, hoffe mal wieder geholfen zu haben.

Willy
17.02.2003, 20:53:21
ja, aber ich möchte ja nur den neusten beitrag anzeigen, d.h, die ganze txt müsste während der übertragung gelöscht werden und dann die daten angezeigt werden (Das newsfeld ist nur ein kleineres feld=) wie man einen string am anfang der datei plaziert weiss ich =)

aber wie kann ich nur den neusten eintrag anzeigen lassen?

c4
17.02.2003, 21:03:32
Also ich gehe mal noch immer davon aus, dass Du die News alle in einer Datei speicherst und der neueste Eintrag ganz oben steht.
Dann mach es z.B. so:
$entries=file("news.txt");
echo $entries[0];

That's it.

Willy
17.02.2003, 21:47:04
dank dir =)
kann ich mich nun irgendwie revanchieren?
(hab schon nen neuen thread aufgemacht:)

c4
17.02.2003, 22:08:01
hehe. Nix da mit Revanche. :)

Willy
17.02.2003, 22:09:35
hei aber wenn ich dir mal irgendwie als "dummie" dienen kann, sags, bin dir noch was schuldig. ich schick dir denn die seite per mail, wenn sie fertig ist.

Willy
17.02.2003, 22:10:33
danke vielmals =) bin happy :)

c4
17.02.2003, 22:11:50
Falscher Thread, oder? ;)

Willy
18.02.2003, 00:06:48
ja =)