Foto top 10

Status
Niet open voor verdere reacties.

MrBeanstra

Gebruiker
Lid geworden
9 apr 2001
Berichten
332
Waarschijnlijk is dit helemaal niet zo moeilijk, maar ik kan het niet voor elkaar krijgen. Ik heb al gezocht op phpfreakz.nl maar kan het ook daar niet echt vinden. Misschien dat jullie mij wel kunnen helpen.

Ik heb een foto-site waar als met op thumbnails klikt je de vergrote versie ziet in een pop-up venster. Nu wil ik op deze site ook een soort foto-top-tien maken. Ik dacht het op de volgende manier te willen doen.
In het pop-up venster verwerk ik de php-code die er voor zorgt dat het corresponderende aantal kliks van die foto één wordt opgehoogd. Ik heb geen mysql dus wil het gewoon in een txt-file schrijven.

Daarnaast wil ik in een aparte pagina de tekstfile weer uitlezen, om daarmee een top 10 te maken van de meest geklikte foto's. Je kunt met een array heel gemakkelijk sorteren, maar het moet daarna natuurlijk nog wel duidelijk zijn bij welke foto welk aantal hoort.

Hopelijk is het zo duidelijk, en alvast bedankt voor eventuele tips.

ps. Als je de benodigde code geeft, zou je dan ook zo vriendelijk willen zijn om er bij te zetten wat elk stuk code doet. Dit is dan voor mij als nieuweling een stuk beter te begrijpen.
 
Ik weet niks van php maar heb wel een idee.
Kijk eens op www.php.pagina.nl misschien dat daar wat te vinden is.

suc6.
 
Geplaatst door puppie
Ik weet niks van php maar heb wel een idee.
Kijk eens op www.php.pagina.nl misschien dat daar wat te vinden is.
niet echt een grote hulp he ?

als voor het probleem, ik zou zo wat voor je kunnen scripten als je mysql (of een andere db die compatibel is met php) gebruikte, deze is namelijk veel beter benaderbaar dan losse tekstbestandjes, met name op het gebied van specifieke selectie & updatebaarheid...

hoe je dit systeem zou moeten maken: je moet voor elke foto die je gebruikt gegevens opslaan, namelijk hoe vaak hij aangeklikt is...stel je hebt dan 10 foto's waarvan ze elk 300 keer zijn aangeklikt...hoe zit het dan met het aantal klikken op de andere foto's ? waar sla je die op ? hiervoor zul je een vrij ingewikkeld sorteersysteem voor moeten gebruiken wat de benodigde tijd kan kosten...
ik raad dan ook aan om met een database te werken

succes
 
Ik dacht zelf aan een tekst bestandje waarin in regel 1 het aantal klikken voor foto 1 staat, regel 2 voor foto 2 etc. Bij elke klik op bijv. foto 20 hoog je het getal op regel 20 met 1 op.

Je kunt zo'n tekst bestandje zo inlezen in een array toch om daarna te sorteren o.i.d. ?
 
Je kan filebased werken, maar ik raad het werken met een MySQL database aan. Werken met een database is veel betrouwbaarder, sneller en kan meer dan filebased.
 
Probleem is dat er in het pakket van mijn hosting provider geen MySQL zit... :rolleyes:

Ik heb al wel ergens een gastenboek weggehaald die ook met txt files werkt en dat werkt ook prima.

Tevens zijn er ook polls te vinden die op zich op eenzelfde manier werken. Het wil dus wel! Alleen hoe? :confused:

p.s. de site waar het om gaat en waar ook het gastenboek op staat klik
 
een text-based gastenboek is ongelofelijk makkelijk...voor elk bericht zet je alle html-opmaak enzo in een bestand, en aan dit bestand voeg je steeds meer toe...da's geen moeite
een text-based poll bestaat uit meerdere bestanden, met vragen.php, stemmen.php en antwoorden.php (althans, hoe ik het zou doen)...hierin maak je dan variabelen aan met het nummer van de vraag, enz enz...
opzich ook niet zo moeilijk
wat jij wil, is lastiger doordat deze stemmen constant geupdate moeten worden...
maar, het is niet onmogelijk...het vereist alleen wat tijd :)
 
Ik ben zelf toch maar even verder gegaan en wat uitgeprobeerd en heb de volgende dingen al voor elkaar gekregen:
- Er wordt automatisch een txt-file met allemaal nullen aangemaakt als deze nog niet bestaat
- Elke keer als er op een foto wordt geklikt, wordt de corresponderende regel met 1 opgehoogd

Dan krijg je dus een file zoals hier: klik

De rest moet nu ook wel lukken (sorteren en op het schem schrijven). Ik heb een functie uit de php-manual gelezen die ik volgens mij hiervoor kan gebruiken (array_multisort) waarmee ik de array met het aantal klikken tegelijk kan sorteren tegelijk met een nog aan te maken array met foto nummers, zodat wel duidelijk blijft welk aantal klikken bij welke foto hoort. Dan nog 'even' naar het scherm schrijven en dan moet het klaar zijn.

Voor de zeer enthousiaste liefhebber wil ik de code hier eventueel wel plaatsen.

In ieder geval bedankt voor de reacties.
 
Nieuw probleem... help!

Ik raak helemaal gefrustreerd, help mij! Ik dacht een werkend script te hebben gemaakt en hij werkt ook goed. Lokaal en op het internet. Echter op een of andere manier komt het voor dat ie een enkele keer vreemde dingen doet.

Op een of andere manier komt het voor dat het bestand (aantal_klikken.txt) waar in geschreven wordt "corrupt " raakt. De getallen die er in stonden worden de ene keer allemaal 'ge-reset' en de andere keer een gedeelte daarvan.

Ik heb het vermoeden, omdat het script vrij vaak wordt aangeroepen, dat er tegelijk in het tekst-bestand geschreven wil worden. Daarom heb ik allemaal veiligheden in proberen te bouwen. O.a. door het tekst-bestand voor het inlezen eerst te hernoemen, zodat er niet door meerdere gebruikers in geschreven kan worden. Toch schijnt het niet goed genoeg te zijn. In een log (log.txt) houd ik daarnaast bij hoe vaak het voorkomt dat aantal_klikken.txt niet bestaat. Dat is best regelmatig, maar er staan (op de allereerste keer na) alleen maar regels met "aantal_klikken.txt bestaat 1e keer niet".

Hebben jullie andere ideeen waardoor het script wel altijd goed werkt? Ik heb er aardig wat (overbodig?) commentaar bij gezet, dus het moet allemaal te begrijpen zijn...

Alvast bedankt!

File tel.php:
PHP:
<?php

if (!empty($_GET))			// Wordt er iets meegegeven bij de aanroep van tel.php?
{
  if (!empty($_GET["fotonr"]))	// Wordt er iets meegegeven bij de aanroep van tel.php?fotonr=
  {
    $fotonr = (int) $_GET["fotonr"];	// Schrijf de waarde achter tel.php?fotonr=... in variabele integer $fotonr

    // Als $fotonr groter is dan 0 en kleiner dan 150, voer functie 'verhoog_click' uit
    if($fotonr > 0 && $fotonr < 150)
    {
      verhoog_click($fotonr);
    }
  }
}


// ----- FUNCTIE'S -----

function verhoog_click($nr)
{
  bestaat_file();				// Controleer of file aantal_klikken.txt bestaat

  if(file_exists("aantal_klikken.txt") == TRUE)	// Is aantal_klikken.txt al aangemaakt?
  {
    // Hernoem aantal_klikken.txt naar temp.txt zodat aantal_klikken.txt niet
    // meer bestaat en er niet meer in geschreven kan worden
    rename('aantal_klikken.txt','temp.txt');	
					
    // Stop temp.txt in array $data
    $data = file('temp.txt');
    // Verwijder temp.txt zodat er niet door een ander in geschreven kan worden
    unlink('temp.txt'); 			
    // Verwijder enters (\r\n) uit array plaats $nr, verhoog met 1 en voeg weer een enter toe
    $data[$nr-1] = (trim($data[$nr-1])+1)."\r\n";	

    // Schrijf de array in temp2.txt
    $nieuwetxt = fopen("temp2.txt","w");
    for ($i=0; $i<150; $i++)
    {
      fputs ($nieuwetxt, $data[$i]);
    }
    fclose($nieuwetxt);
    rename("temp2.txt","aantal_klikken.txt");
  }
  else
  {
    bestaat_file();
  }
}


function bestaat_file()
{
  if(file_exists("aantal_klikken.txt") == FALSE)	// Is aantal_klikken.txt al aangemaakt?
  {
    $log = fopen("log.txt","a");		// Maak een log aan
    $tekst = "aantal_klikken.txt bestaat 1e keer niet: ".date("Y-m-d - H\:i\:s")."\r\n";
    fputs ($log, $tekst);				// Schrijf datum en tijd van het schrijven
    fclose($log);
    $getal = rand(15,25)*10000; 		// Wacht tussen 0,15 en 0,25 sec. in stapjes van 0,01 sec.
    usleep($getal);				// Misschien bestaat ie al wel, maar wordt er in geschreven
    if(file_exists("aantal_klikken.txt") == FALSE)
    {
      $log = fopen("log.txt","a");		// Maak een log aan
      $tekst = "aantal_klikken.txt bestaat 2e keer niet: ".date("Y-m-d - H\:i\:s")."\r\n";
      fputs ($log, $tekst);			// Schrijf datum en tijd van het schrijven
      fclose($log);
      $getal = rand(15,25)*10000; 		// Wacht tussen 0,15 en 0,25 sec. in stapjes van 0,01 sec.
      usleep($getal);
      if(file_exists("aantal_klikken.txt") == FALSE) 		
      {
        $log = fopen("log.txt","a");		// Maak een log aan
        $tekst = "aantal_klikken.txt bestaat 3e keer niet: ".date("Y-m-d - H\:i\:s")."\r\n";
        fputs ($log, $tekst);			// Schrijf datum en tijd van het schrijven
        fclose($log);
        $getal = rand(15,25)*10000; 		// Wacht tussen 0,15 en 0,25 sec. in stapjes van 0,01 sec.
        usleep($getal);
        // Als file nog steeds niet bestaat, voer functie maak_lege_txt uit
        if(file_exists("aantal_klikken.txt") == FALSE) 
        {
          maak_lege_txt();
        }
      }
    }
  }
}


function maak_lege_txt()
{
  $legetxt = fopen("temp3.txt","w");		// Maak een lege temp3.txt aan
  for ($i=0; $i<150; $i++)			// Voeg 150 regels toe met 0 als waarde met enter behalve de laatste
  {
    fputs ($legetxt,"0");			// Voeg een nul toe aan het tekstbestand
    if($i < (149))				// Voeg overal een enter aan toe, behalve de laatste (i==149)
    {
      fputs ($legetxt,"\r\n");
    }
  }
  fclose($legetxt);				// Sluit bestand temp3.txt
  rename("temp3.txt", "aantal_klikken.txt");	// Hernoem temp3.txt naar aantal_klikken.txt

  $log = fopen("log.txt","a");			// Maak een log aan
  $tekst = "aantal_klikken.txt aangemaakt op: ".date("Y-m-d - H\:i\:s")."\r\n";
  fputs ($log, $tekst);			// Schrijf datum en tijd van het schrijven
  fclose($log);
}

?>
 
.... moet ik het in een nieuw onderwerp posten om een reactie te krijgen? Of weet er gewoon niemand een oplossing... :confused:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan