Gå til innhold

Hente og vise tilfeldig sitat


Anbefalte innlegg

Skrevet

Jeg har sett på denne, og ønsker å bruke lignende fremgangsmåte for å hente frem et sitat fra en fil/mappe og vise dette. Er dette mulig? Det er det samme om sitatene lagres separat i filer i en mappe, eller alle i én fil (noe som virker mindre tungvint).

Videoannonse
Annonse
Skrevet

Det finnes flere måter å løse dette på. Litt avhengig av hvor mange sitater du har så kan det nok være fordelaktig å lagre det i separate filer. Ulepmen med en fil er at den kan bli stor, og det kan bli mye jobb for PHP å dele opp sitatene for den må skille mellom alle sammen. Selvfølgelig, det beste er å lagre det i en database, men siden du spesifiserer at det skal være en fil så antar jeg at du ikke har tilgang til dette.

 

Hvis meningen er at du bare skal kunne laste opp en ny fil med sitat, så er det beste om du åpner hovedfilen (eller en egen fil) hvor du lagrer alle filnavnene i en array. Da blir scriptet raskt.

 

En annen mulighet er å lese fra filene i en mappe og velge en tilfeldig fil. Dette er litt mer jobb, men en fult mulig løsning dersom du ikke har alt for mange hits pr. dag. Da trenger du bare å laste opp nye sitater i nye filer så finner scriptet de nye automatisk. Og du kan også slette og scriptet finner det ut selv.

 

Bruk readdir() for å lese inn filene i mappen, se i manualen og følg det eksempelet men i steden for å echo så lagre det i en array.

 

Bruk så mt_rand() for å finne et tilfeldig tall, og count() for å finne antallet filer.

 

Så bruker du bare include for å hente innholdet fra filen.

Skrevet
hva med:
<?php
srand((double)microtime()*1000000);
$rand = rand(0,10);
include "path/til/filer/".$rand.".php";
?>

Så kaller du filene for 1.php, 2.php osv

1. srand er ikke lengre nødvendig

2. bruk mt_rand og ikke rand

3. $rand = rand(0,10); her må det oppdateres når brukeren legger til eller fjerner sitater.

Skrevet

PHP 4.2 er vel tre og et halvt år eller noe, så det burde ikke akuratt være et problem. mt_rand() gir rett og slett en beddre verdi.

 

Du leser inn alle filene i en mappe med readdir(), og da kan du bare lagre disse i en array, så bruker du bare array_rand() for å velge en tilfeldig.

Skrevet (endret)

<?php
$handle = opendir('path/to/files');
while (false !== ($file = readdir($handle))) {
$array[] = $file;
$i++
}
echo array_rand($array);
?>

Sånn?

(Har ikke PHP på denne pc'en :( )

 

EDIT: Glemte code-tag

Endret av Judofyr
Skrevet

Tja... men hvorfor fjerner du ikke like godt $i?

 

$array[] = "Hei"; // $array[0] er da Hei

$array[] = "Hallo"; // $array[1] er da Hallo

 

Eventuelt så kan du jo sjekke at det ikke er mapper, men faktisk filer. Kun aktuelt dersom du har undermapper i den mappen.

Skrevet

Jeg har tilgang til databaser, men jeg tenkte at dette blir en knotete måte å legge inn sitater på. Hvordan bruker jeg databaser til å løse dette, da?

Skrevet

SELECT * FROM quotes ORDER BY rand() LIMIT 1

 

Så bør du kanskje merke deg når et sitat var sist brukt, slik at du ikke får det samme to dager på rad. Lagre dato for sist brukt eller no, og bruker ORDER BY last_view DESC, rand() eller no.

Skrevet

Jeg har lite erfaring med PHP-koding og MySQl-databaser, så kan du være så snill å være litt mer grundig med forklaringen din?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...