Gå til innhold

Tilfeldig bilete frå ein uorganisert database.


Anbefalte innlegg

Videoannonse
Annonse

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
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

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 :p Som du sikkert kan gjette, så vil den aldri avslutte ;)

Endret av Terrasque
Lenke til kommentar

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 av Notelitten
Lenke til kommentar

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 av Terrasque
Lenke til kommentar

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

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 av Terrasque
Lenke til kommentar

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 av InnFjording
Lenke til kommentar

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 av Kjell Arne Steinsvik
Lenke til kommentar

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å
×
×
  • Opprett ny...