Ergebnis 1 bis 5 von 5

Thema: [PHP] Zählen oder pro ausgeführtem Script +1

  1. #1

    [PHP] Zählen oder pro ausgeführtem Script +1

    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:
    Code:
    <?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]

  2. #2
    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:

    Code:
    // $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):
    Code:
    $current_page = (null !== $_GET['page']) ? $_GET['page'] : 0; // Tu' diese Deklaration an den Anfang des Skripts

  3. #3
    Zitat Zitat von J666
    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:
    PHP-Code:
    $datei fopen ("hits.txt""rb");
    $hits fgets ($datei);
    fclose ($datei);
    $hits = (int) intval ($hits);
    $hits $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.

  4. #4
    Einfacher gehts so:
    PHP-Code:
    <?php
    $hits 
    file_get_contents('counter.txt');
    file_put_contents('counter.txt', ++$hits);
    ?>

  5. #5
    Zitat Zitat von Manni
    Einfacher gehts so:
    PHP-Code:
    <?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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •