Avatar billede xeox Nybegynder
30. april 2013 - 15:59 Der er 11 kommentarer og
1 løsning

Hjælp til random picture

Hej eksperter.

Jeg håber i kan hjælpe mig, jeg har følgende script:
// Global Variables
$image_dir = "$_SERVER[DOCUMENT_ROOT]/images/midtlogo"; // vej til mappe
$image_relative_path = '/images/midtlogo'; // vej til billeder
$file_types = array('jpg','jpeg','gif','png');
$image_time = '20000'; // Hvor ofte skifter billede

if($handle = opendir($image_dir)) {
    while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        $ext_bits = explode(".",$file); // finds file extensions
        foreach($ext_bits as $key => $value){
            if(in_array($value,$file_types)){
                $image_rotation .= '<li><img src="'.$image_relative_path.'/'.$file.'" class="banner_pic"></li>';
            }       
        }
    }
}
closedir($handle);
}

?>

Scriptet virker fint med at hente billederne fra mappen og så spytte dem ud på siden, men hver gang man går til en ny side på hjemmesiden, så starter den forfra med samme billede og viser det.

Mit spørgsmål er så: Kan i hjælpe mig med at lave en random funktion, så den ikke behøver at starte med det første billede som den lige har vist på en anden side, men i stedet viser et andet billede fra mappen.
Avatar billede olebole Juniormester
30. april 2013 - 17:02 #1
<ole>

Det er vist ikke en særlig hensigtsmæssig kode. Prøve denne i stedet:

$image_dir = "$_SERVER[DOCUMENT_ROOT]/images/midtlogo"; // vej til mappe
$image_relative_path = '/images/midtlogo'; // vej til billeder
$file_types = array('jpg'=>1,'jpeg'=>1,'gif'=>1,'png'=>1);
$image_time = '20000'; // Hvor ofte skifter billede

$pics = array();
if($handle = opendir($image_dir)) {
    while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        $ext = end(explode(".",$file)); // finds file extensions
        if($file_types[$ext]){
            $pics[] = $image_relative_path.'/'.$file;
        }
    }
}
closedir($handle);
shuffle($pics);
$image_rotation = '';
foreach ($pics as $value) {
    $image_rotation .= '<li><img src="'.$value.'" class="banner_pic"></li>';
}

/mvh
</bole>
Avatar billede xeox Nybegynder
30. april 2013 - 23:02 #2
Der manglede lige et }, den er sat på i scriptet under hvis nogen skal bruge det senere hen.

$image_dir = "$_SERVER[DOCUMENT_ROOT]/images/midtlogo"; // vej til mappe
$image_relative_path = '/images/midtlogo'; // vej til billeder
$file_types = array('jpg'=>1,'jpeg'=>1,'gif'=>1,'png'=>1);
$image_time = '20000'; // Hvor ofte skifter billede

$pics = array();
if($handle = opendir($image_dir)) {
    while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        $ext = end(explode(".",$file)); // finds file extensions
        if($file_types[$ext]){
            $pics[] = $image_relative_path.'/'.$file;
        }
    }
}
closedir($handle);
shuffle($pics);
$image_rotation = '';
foreach ($pics as $value) {
    $image_rotation .= '<li><img src="'.$value.'" class="banner_pic"></li>';
}

Men det virker super, tusind tak for hjælpen :)

Smid et svar.
Avatar billede olebole Juniormester
30. april 2013 - 23:29 #3
Nej, den har du ikke sat ind i dén kode. Sådan skal koden se vist ud:

$image_dir = "$_SERVER[DOCUMENT_ROOT]/images/midtlogo"; // vej til mappe
$image_relative_path = '/images/midtlogo'; // vej til billeder
$file_types = array('jpg'=>1,'jpeg'=>1,'gif'=>1,'png'=>1);
$image_time = '20000'; // Hvor ofte skifter billede

$pics = array();
if($handle = opendir($image_dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $ext = end(explode(".",$file)); // finds file extensions
            if($file_types[$ext]){
                $pics[] = $image_relative_path.'/'.$file;
            }
        }
    }
    closedir($handle);
    shuffle($pics);
    $image_rotation = '';
    foreach ($pics as $value) {
        $image_rotation .= '<li><img src="'.$value.'" class="banner_pic"></li>';
    }
}

Og ellers tak, jeg samler ikke point. Du lægger bare selv et svar og accepterer det, så tråden lukkes  =)
Avatar billede xeox Nybegynder
30. april 2013 - 23:32 #4
Haha ja det var godt klaret at jeg fik postet den "gamle" kode :)

Men super du fik det rettet.

Endnu engang tak for hjælpen, og point ;)

-lukket-
Avatar billede olebole Juniormester
30. april 2013 - 23:53 #5
Hehe ... selvtak. Og den manglende Tuborg tager jeg på min kappe. Det var mig, der lod den forsvinde. Tro mig ... det er ikke første gang, en Tuborg på mystisk vis er forsvundet mellem hænderne på mig  *D
Avatar billede kjeldsted Novice
01. maj 2013 - 00:18 #6
Undskylder på forhånd for spam,
Men altså, olebole. Hvis du en dag finder ud af hvordan de Tuborg forsvinder og ikke mindst hvordan man forhindre dem i at forsvinde på den måde, må du gerne lige sige til! Det sker nemlig også for mig at de nogen gange bare er pist væk. Med en fejl om Unexpected End på sidste linje i scriptet.
Avatar billede olebole Juniormester
01. maj 2013 - 00:33 #7
Kjeldsted, det handler som med så meget andet om at være i kontakt med kroppen og forstå dens signaler  =)

Prøv at lade en Tuborg forsvinde med fuldt overlæg. Mærk efter og føl den vidunderlige fornemmelse, der breder sig i kroppen under selve forsvindingen. Læg også mærke til, at den tilhørende hovedpine erfaringsmæssigt først melder sig, når Tuborgen er helt væk.

Når du næste gang mærker denne søde kilden i torso, mens du koder, ved du, at en Tuborg netop er forsvundet.

*hik* Simple as that  *-\
Avatar billede olebole Juniormester
01. maj 2013 - 00:38 #8
- og hvis du mod forventning mente det seriøst, så er svaret: Vær omhyggelig med din kodeindrykning. Så fanger du (næsten) med garanti alle undslupne Tuborger  =)
Avatar billede xeox Nybegynder
01. maj 2013 - 00:40 #9
-genåben-

Jeg er ked af at jeg må til at genåbne, men jeg støder på et problem hvis jeg henter flere rows i min mysql.

det her er hele koden:

<? require "db.php";
$query = mysql_query("SELECT * FROM galleri_list ORDER BY RAND() LIMIT 0,2");
?>
</td>
</tr>
<tr>
<td>
<?
if (mysql_num_rows($query)==0) {
echo"<table width=\"366\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"submitbox\">
  <tr>
    <td width=\"37\" valign=\"middle\" bgcolor=\"#711314\"><img src=\"../images/blink_war.png\" width=\"26\" height=\"23\"></td>
    <td width=\"463\" valign=\"middle\" bgcolor=\"#711314\">Der findes ingen gallerier i &#65533;jeblikket.</td>
  </tr>
</table><br>";
    } else {
while ($row = mysql_fetch_array($query)) {
$oversk = $row['oversk'];
$tekst = $row['tekst'];
$stihent = $row['stinavn'];
//$gallsti = str_replace("../", "", $stihent);
$dir = "$stihent";

if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          if($file != "." && $file != ".."){
                $billeder[] = $file;
          }
      }
      closedir($dh);
  }
}

$vis = mt_rand(0,count($billeder)-1);
$id = $row['id'];
$over = '#FFFFFF';
$pics = array("jpg","jpeg","gif","png","tif","bmp","JPG");
$dir = "$stihent";
$total = 0;
if (is_dir($dir))
{
    if ($dh = opendir($dir))
    {
        while (($file = readdir($dh)) !== false)
        {
            $ext = end(explode(".",$file));
            if(in_array($ext,$pics) && is_file($dir."/".$file))
            {
                $total++;
            }
        }
        closedir($dh);
    }
}
echo"
    <table width=\"80%\" border=\"0\" cellpadding=\"0\" align=\"center\" cellspacing=\"0\" onclick=\"parent.location.href='galleri_open.php?id=$id'\" style=\"cursor:pointer;\">
        <tr>
            <td valign=\"top\"><div align=\"center\">";
        if ($total == 0) {
        echo "<img src=\"images/billedekommer.gif\" class=\"main_gal_picram\" border=\"0\" width=\"195\" height=\"124\" alt=\"Åben galleriet\">";
        } else {
        echo "<img src=\"$stihent/$billeder[$vis]\" class=\"main_gal_picram\" border=\"0\" width=\"195\" height=\"124\" alt=\"Åben galleriet\">";
        } echo "
            </div></td>
        </tr>
        <tr>
            <td valign=\"top\" align=\"center\"><span class=\"ran_biler_oversk\">$oversk</span><i></td>
        </tr>
    </table><br>";
      }
      }
?>


hvis jeg henter 2 rows fra min mysql med hver sit dir, så kan den sidste udhentning godt finde på at tro at den har lige så mange billeder i dir som den første row som bliver hentet.

dvs. hvis row nr. 1 har 10 billeder og row 2 kun har 4 billeder, så kan row 2 godt finde på at slå images/6.jpg selvom der kun er til 4.jpg

Kan du hjælpe med det ?
Avatar billede olebole Juniormester
01. maj 2013 - 00:55 #10
Sorry, men nope! Ryk din kode ordentligt ind. Ellers gider jeg ikke rode i den.

Hvis du vil lære at kode og undgå at lave fejl, er det allerførste, du skal lære, at rykke din kode ind. Ingen kan finde ud af en rodet kode, og det gælder også den, som har skrevet den. Vend tilbage til koden i dit indlæg om et halvt år - og du forstår hat af den
Avatar billede xeox Nybegynder
01. maj 2013 - 01:07 #11
Det er jeg da ked af, her er et nyt forsøg
<?
require "db.php";
$query = mysql_query("SELECT * FROM galleri_list ORDER BY RAND() LIMIT 0,1");
    if (mysql_num_rows($query)==0) {
echo "<table width=\"366\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"submitbox\">
  <tr>
    <td width=\"37\" valign=\"middle\" bgcolor=\"#711314\"><img src=\"../images/blink_war.png\" width=\"26\" height=\"23\"></td>
    <td width=\"463\" valign=\"middle\" bgcolor=\"#711314\">Der findes ingen gallerier i &#65533;jeblikket.</td>
  </tr>
</table>
<br>";
} else {
while ($row = mysql_fetch_array($query)) {
$oversk = $row['oversk'];
$tekst = $row['tekst'];
$stihent = $row['stinavn'];
//$gallsti = str_replace("../", "", $stihent);
$dir = "$stihent";

if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          if($file != "." && $file != ".."){
                $billeder[] = $file;
          }
      }
      closedir($dh);
  }
}

$vis = mt_rand(0,count($billeder)-1);
$id = $row['id'];
$over = '#FFFFFF';
$pics = array("jpg","jpeg","gif","png","tif","bmp","JPG");
$dir = "$stihent";
$total = 0;
if (is_dir($dir))
{
    if ($dh = opendir($dir))
    {
        while (($file = readdir($dh)) !== false)
        {
            $ext = end(explode(".",$file));
            if(in_array($ext,$pics) && is_file($dir."/".$file))
            {
                $total++;
            }
        }
        closedir($dh);
    }
}
echo "<table width=\"80%\" border=\"0\" cellpadding=\"0\" align=\"center\" cellspacing=\"0\" onclick=\"parent.location.href='galleri_open.php?id=$id'\" style=\"cursor:pointer;\">
        <tr>
            <td valign=\"top\"><div align=\"center\">";
if ($total == 0) {
    echo "<img src=\"images/billedekommer.gif\" class=\"main_gal_picram\" border=\"0\" width=\"195\" height=\"124\" alt=\"Åben galleriet\">";
} else {
    echo "<img src=\"$stihent/$billeder[$vis]\" class=\"main_gal_picram\" border=\"0\" width=\"195\" height=\"124\" alt=\"Åben galleriet\">";
}
    echo "</div>
            </td>
        </tr>
        <tr>
            <td valign=\"top\" align=\"center\"><span class=\"ran_biler_oversk\">$oversk</span><i></td>
        </tr>
    </table><br>";
    }
}
?>

hvis det hjælper, her der står det på den måde som jeg læser det når jeg laver det. - Jeg har ingen problemer i at læse det i det program jeg bruger, ved ik om der er forskel?
Avatar billede arne_v Ekspert
01. maj 2013 - 04:31 #12
En alternativ maade at finde billeder i et dir paa:

$allfiles = scandir($image_dir);
$allpics = array_filter($allfiles, function($f) use($file_types) {
                                      $parts = explode('.', $f);
                                      return array_key_exists(end($parts), $file_types);
                                  });
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester