InnFjording Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 Hei eg har ei nettside med ein funksjon som hentar eit tilfeldig bilete frå ein uorganisert database. Det eg kunne tenkt meg var at same bilete ikkje kjem opp 2 gangar. Håpar nokon har eit svar på dette. -InnFjording Lenke til kommentar
Sk!ppy Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 Lurer på om dette er noe. Lenke til kommentar
InnFjording Skrevet 30. oktober 2011 Forfatter Del Skrevet 30. oktober 2011 Vel problemet med dette er at det ikkje er ein sql database. Det er eigentleg berre ei stor mappe med mange bilete Lenke til kommentar
torbjørn marø Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 Hvordan kan du plukke ut bildet - altså hvilke metadata har du lagret? Har du en sekvensiell id tilgjengelig? I såfall er problemet å plukke en random tall fra denne sekvensen. Eller..? Lenke til kommentar
InnFjording Skrevet 30. oktober 2011 Forfatter Del Skrevet 30. oktober 2011 Her er koden. Eg skal innrømme at eg skreiv delar av den frå ei toturial side, men dette er då koden i si heilhet. <? $imglist=''; $img_folder = "images/Random/"; mt_srand((double)microtime()*1000); $imgs = dir($img_folder); while ($file = $imgs->read()) { if (eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file)) $imglist .= "$file "; } closedir($imgs->handle); $imglist = explode(" ", $imglist); $no = sizeof($imglist)-2; //generate a random number between 0 and the number of images $random = mt_rand(0, $no); $image = $imglist[$random]; echo '<a href="http://nordfjordgs.net/links.php"><img src="'.$img_folder.$image.'" border=0 ></a>'; ?> Lenke til kommentar
Terrasque Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 (endret) Calles den funksjonen/kodeblokken flere ganger per side, eller er det bare en random image per side? Endret 30. oktober 2011 av Terrasque Lenke til kommentar
Terrasque Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 class RandomImageDispenser { public $extensions = array("jpg", "png", "gif"); public $images = array(); public $imagedir = ""; public $index = 0; public function __construct($dir) { $this->createImageList($dir); } public function getImage() { $array_length = sizeof($this->images); $img = $this->images[$this->index++ % $array_length]; return $this->imagedir . $img; } public function createImageList($dir) { $this->imagedir = $dir; $this->images = array(); $this->index = 0; $imgs = dir($dir); while ($filename = $imgs->read()) { $file_ext = pathinfo($filename, PATHINFO_EXTENSION); if (in_array(strtolower($file_ext), $this->extensions)) { $this->images[] = $filename; } } shuffle($this->images); } } $shuffle = new RandomImageDispenser("path_to_images"); while (true) { echo "Image : " .$shuffle->getImage() . "\n"; } Lenke til kommentar
InnFjording Skrevet 30. oktober 2011 Forfatter Del Skrevet 30. oktober 2011 uhm... korleis skal eg implimentere koden på sida? fordi no vart sida sjåande slek ut: http://nordfjordgs.net/links.php Lenke til kommentar
Terrasque Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 (endret) echo '<a href="http://nordfjordgs.net/links.php"><img src="'.$img_folder.$image.'" border=0 ></a>'; til echo '<a href="http://nordfjordgs.net/links.php"><img src="'.$shuffle->getImage().'" border=0 ></a>'; Som vist her: while (true) { echo "Image : " . $shuffle->getImage() . "\n"; } Siden du ikke har vist hele koden, kan jeg ikke gi så mye mer info Edit : Du har ikke svart på hva du mente med "Det eg kunne tenkt meg var at same bilete ikkje kjem opp 2 gangar." - er det per side, per bruker, per session, per dag, per inge torkelsen? Også.. Var ikke meningen å bruke "while (true)" loop'en i siden direkte Som du sikkert kan gjette, så vil den aldri avslutte Endret 30. oktober 2011 av Terrasque Lenke til kommentar
InnFjording Skrevet 30. oktober 2011 Forfatter Del Skrevet 30. oktober 2011 Per session Lenke til kommentar
Notelitten Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 (endret) Jeg forstår ikke helt hva du vil. Er det slik at du ønsker at det skal komme opp et helt nytt bilde hver gang? Da lurer jeg gjerne på hvem dette skal gjelde for; er det bare slik at siden skal vise et nytt bilde hver gang, eller skal hver nye bruker få en mulighet til å se bildene de ikke enda har sett? Edit: har du tilgang på MySQL? Da blir jo alt mye lettere. Endret 30. oktober 2011 av Notelitten Lenke til kommentar
Terrasque Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 (endret) Putt class'en i egen fil, og på sider du trenger den, gjør dette: session_start(); include 'classfil.php' if (!isset($_SESSION['randimage'])) { $_SESSION['randimage'] = new RandomImageDispenser("path_to_images");; } $shuffle = $_SESSION['randimage']; Så er det bare å bruke "$shuffle->getImage()" hver gang du trenger en bilde url. Edit : hvor mange bilder har du i den mappen, forresten? Og, hvor mange bilder vil hver bruker sannsynligvis se? Endret 30. oktober 2011 av Terrasque Lenke til kommentar
InnFjording Skrevet 30. oktober 2011 Forfatter Del Skrevet 30. oktober 2011 Her er heile koden, slik som den ser ut no <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>NordfjordGamingSquad - Løje</title> <link rel="stylesheet" href="styles.css" type="text/css" /> </head> <body> <div id="container"> <?php include("stilar/header.php"); ?> <?php include("stilar/menu.php"); ?> </div> <br> <center> <?php class RandomImageDispenser { public $extensions = array("jpg", "png", "gif"); public $images = array(); public $imagedir = ""; public $index = 0; public function __construct($dir) { $this->createImageList($dir); } public function getImage() { $array_length = sizeof($this->images); $img = $this->images[$this->index++ % $array_length]; return $this->imagedir . $img; } public function createImageList($dir) { $this->imagedir = $dir; $this->images = array(); $this->index = 0; $imgs = dir($dir); while ($filename = $imgs->read()) { $file_ext = pathinfo($filename, PATHINFO_EXTENSION); if (in_array(strtolower($file_ext), $this->extensions)) { $this->images[] = $filename; } } shuffle($this->images); } } $shuffle = new RandomImageDispenser("images/Random"); while (true) { echo "Image : " . $shuffle->getImage() . "\n"; } ?> </center><br><br> <center><script type="text/javascript"> var uri = 'http://impno.tradedoubler.com/imp?type(js)pool(461425)a(1944389)' + new String (Math.random()).substring (2, 11); document.write('<sc'+'ript type="text/javascript" src="'+uri+'" charset="ISO-8859-1"></sc'+'ript>'); </script></center> </div><br> </div> </body> </html> Takk for all hjelp so langt ^^ Det er no omtrent 3500 bilder i mappa men om ikkje lenge ligger der sikkert snart 5000 Lenke til kommentar
Terrasque Skrevet 30. oktober 2011 Del Skrevet 30. oktober 2011 (endret) Med så mange bilder bør du kanskje legge inn en $this->images = array_slice($this->images, 0, 200); etter shuffle($this->images) linjen. Det vil begrense til 200 bilder lagret for hver bruker, å loope igjennom. Ellers kan det kanskje slite litt på lagring / minne etterhvert (5000 bildenavn * aktive sessions = masse lagret i sessions). Endret 30. oktober 2011 av Terrasque Lenke til kommentar
InnFjording Skrevet 30. oktober 2011 Forfatter Del Skrevet 30. oktober 2011 Hmm... det ser ikkje ut som om eg klarer å implimitere denne slik det ser ut no. Eg får opp ei feilmelding med denne linja if (!isset($_SESSION['randimage'])) { det er sikkert ein heilt banal feil Lenke til kommentar
Fibonacci Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 Er du sikker på det ikkje er linja før/etter som skaper problem her? Kan du poste litt meir av koda rundt? Lenke til kommentar
InnFjording Skrevet 31. oktober 2011 Forfatter Del Skrevet 31. oktober 2011 (endret) Her er koden til side der bildet skal postast <?php session_start(); <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>NordfjordGamingSquad - Løje</title> <link rel="stylesheet" href="styles.css" type="text/css" /> </head> <body> <div id="container"> <?php include("stilar/header.php"); ?> <?php include("stilar/menu.php"); ?> </div> <br> <center> include 'classfil.php'; if (!isset($_SESSION['randimage'])) { $_SESSION['randimage'] = new RandomImageDispenser("images/Random");; } $shuffle = $_SESSION['randimage']; ?> </center><br><br> <center><script type="text/javascript"> var uri = 'http://impno.tradedoubler.com/imp?type(js)pool(461425)a(1944389)' + new String (Math.random()).substring (2, 11); document.write('<sc'+'ript type="text/javascript" src="'+uri+'" charset="ISO-8859-1"></sc'+'ript>'); </script></center> </div><br> </div> </body> </html> Om det er noko meir du treng so berre sei i fra ^^ Endret 31. oktober 2011 av InnFjording Lenke til kommentar
Fibonacci Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 Du manglar semikolon etter include 'classfil.php' Lenke til kommentar
InnFjording Skrevet 31. oktober 2011 Forfatter Del Skrevet 31. oktober 2011 Oops.. fiksa det no, men det funka framleis ikkje... retta noken andre småting .. oppdaterer koden .... nu Lenke til kommentar
Fibonacci Skrevet 31. oktober 2011 Del Skrevet 31. oktober 2011 (endret) Eg ser eit anna problem ja: du kallar session_start() etter du har skrive ut HTML. session_start() må kallast før noko som helst anna vert sendt ut til nettlesaren. Edit: Ein tommelfingerregel kan vere at du tek deg av det meste som må behandlast av PHP øverst i fila, og skriv ut HTML-en på slutten når alt er ferdig prosessert. Endret 31. oktober 2011 av Kjell Arne Steinsvik Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå