PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Zählen oder pro ausgeführtem Script +1



Armitage2k
16.08.2006, 08:07
Ok, kommen wir mal wieder zu so ner typischen N00b Frage.
Obwohl das Kapitel Zählen wohl irgendwie zu den Grundsachen in PHP gehört, hab ich da ein kleines Problem.

Das Script hier (btw, thx an drunken_monkey der das hier mal in abgeänderter Form gepostet hat), liest zuerst den Ordnerinhalt aus und gibt diesen dann in einer Tabelle wieder.
Nachdem ich aber gerne meinen Downloadcounter integrieren möchte, bräuchte ich eine Möglichkeit, dass das Script jedesmal wenn es eine Datei ausliest und wiedergibt, meine ccount Zahl in der Javascriptzeile mit +1 addiert, ausgehend von einem vorher definierten wert (zb $DL_Counter_zahl = 20) und die dann mit jedem mal ausführe mit +1 erweitert.

Also:


<?php

$ordner="../files/pps/1/";
$lesen = opendir ($ordner);
$i = 0;

if (isset ($_GET['page']))
{
$bereich = $_GET['page'];
}

else
{
$bereich = 1;
}

$bereich *= 999; // Statt 999 Anzahl der Bilder pro Seite einfügen
while($file = readdir($lesen))
{
if ($file != "." && $file != ".." && $file != "index.php")
{
if ($i >= $bereich) // Falls die entsprechenden Bilder
{ // eingefügt wurden wird
break; // die Schleife unterbrochen
}
if ($i >= ($bereich - 999)) // Nur im richtigen Bereich werden Bilder eingefügt
{
if ($i % 5 == 0) // Jedes fuenfte Mal
{
echo "
<tr valign=\"top\" width=\"20%\">
"; // wird ein <tr>-Tag ausgegeben
} // um eine neue Zeile anzufangen
echo "<td align=\"center\" width=\"20%\">
<IMG src=\"../pics/pps_logo.gif\"><br />
<p><strong>Name:</strong> $file</p>
<p>» <a href=\"../files/pps/1/$file\">Download</a> «</p>
<p><em>Bereits <strong><script language=\"Javascript\">ccount_display('2')</script></strong>x heruntergeladen.</em></p>
</td>
"; // Das Bild wird in einer Zelle ausgegeben
$i++;

if ($i % 5 == 0) // Jedes fuenfte Mal
{
echo "
</tr>
"; // wird das <tr>-Tag geschlossen,
} // damit nachher ein neues aufgemacht werden kann
}
}
}
if ($i % 5 != 0)
{
echo "</tr>"; //Am Ende muss evtl. noch das letzte <tr>-Tag geschlossen werden
}
closedir($lesen);

?>


nunja, ich hätte ja kein problem damit dass er bei jedem mal auslesen einfach +1 rechnet, aber das problem ist dann (aufgrund von mangelnden PHP-Kenntnissen) dass ich dann überall die selbe zahl hab, ergo er nur einmal generell +1 rechnet..

bin für alle ideen offen ;)

thx,
[JLA]

Jesus_666
16.08.2006, 11:24
Zuerst mal will ich eine Sache anmerken: Vermeide es, Literale (also feste Zahlenwerte) in deinen Code zu schreiben. Bei dir steht die Zahl 999 an mehreren Stellen, da würde es Sinn machen am Anfang eine Variable $items_pro_seite zu definieren und sich weiter unten auf die zu beziehen. Das hat den Vorteil, daß du, wenn due die Anzahl der Einträge pro Seite ändern willst, die Datei nur an einer Stelle verändern mußt.

Was dein eigentliches Problem angeht: Da weiß ich nicht so wirklich, was du willst. Willst du, daß der Zähler jedes Mal erhöht wird, wenn das Skript aufgerufen wird oder willst du, daß das Skript für jede Datei einen Zähler erhöht?
Im ersten Fall bruchst du einen externen Speicher wie eine Datei oder eine Datenbank.
Im zweiten Fall mußt du lediglich folgenden Code in deine Schleife einbauen (wo der hinmuß wirst du schon rausfinden) und dich im HTML-Teil auf $lfdNr beziehen:


// $current_page ist ein Wrapper für $_GET['page']; siehe unten.
$lfdNr = ($current_page * $items_pro_seite) + $i;

// Der Code oben geht davon aus, daß $_GET['page'] bei der ersten Seite 0 ist.
// Falls $_GET['page'] bei der ersten Seite 1 ist nimm' diese Zeile.
$lfdNr = (($current_page - 1) * $items_pro_seite) + $i;

Da wir nicht sicher sein können, daß $_GET['page'] gesetzt ist und es unsauber wäre, in $_GET herumzuschreiben verwenden wir eine zweite Variable, um $_GET['page'] darzustellen (auch dann, wenn es nicht existiert):

$current_page = (null !== $_GET['page']) ? $_GET['page'] : 0; // Tu' diese Deklaration an den Anfang des Skripts

drunken monkey
18.08.2006, 22:57
Im ersten Fall bruchst du einen externen Speicher wie eine Datei oder eine Datenbank.
Da ich denke, dass du (@ Armi) das meinst, hier mal ein Code dafür:

$datei = fopen ("hits.txt", "rb");
$hits = fgets ($datei);
fclose ($datei);
$hits = (int) intval ($hits);
$hits = 1 + $hits;
$datei = fopen ("hits.txt", "wb");
fwrite ($datei, "$hits");
fclose ($datei);
Davor solltest du halt eine Datei "hits.txt" mit Inhalt "0" erstellen, würde aber glaube ich auch so funktionieren.

Manni
19.08.2006, 21:20
Einfacher gehts so:

<?php
$hits = file_get_contents('counter.txt');
file_put_contents('counter.txt', ++$hits);
?>

Jesus_666
20.08.2006, 12:21
Einfacher gehts so:

<?php
$hits = file_get_contents('counter.txt');
file_put_contents('counter.txt', ++$hits);
?>
Da funkioniert aber nur, wenn man entweder PHP5 benutzt oder das entsprechende Kompatibilitäts-Include aus PEAR verwendet.