[PHP] Random Image ID klopt niet

Pagina: 1
Acties:

Onderwerpen


  • Executor16
  • Registratie: Februari 2001
  • Niet online
Zie eerst even de code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?  
// Array met shit
$mapjes[0] = "./gal/gal/Fotos_2007/2007-12-27_-_AlbumName/";
$mapjes[1] = "./gal/gal/Fotos_2007/2007-12-21_-_AlbumName/";
$mapjes[2] = "./gal/gal/Fotos_2007/2007-12-12_-_AlbumName/";
$mapjes[3] = "./gal/gal/Fotos_2007/2007-12-01_-_AlbumName/";

shuffle($mapjes);
echo "Je bekijkt nu een foto uit:" .$mapjes[0]. "<br><br>";

$gekozenmap = $mapjes[0];
$dir = opendir($gekozenmap);  

// Shit uit dir laden  
while(false !== ($file = readdir($dir)))   
{  
   if(($file !== ".") && ($file !== ".."))   
   {  
       list($filename, $ext) = explode(".", $file);  
       $ext = strtolower($ext);  //alles ff caps naar benenen
        if($ext == "jpg" && substr($filename,0,3) != "tn_")
       {  
        $afbeelding[] = $file;
       }  
   }  
}  
closedir($dir);  

// Random pic uit verzameling halen.  
$aantal = count($afbeelding) - 1;  
$rand = mt_rand(0, $aantal);

// Linkje maken omdat niet de hele dir meegenomen moet worden in de URL
$nieuwlinkje = substr($gekozenmap, 10,-1);

echo "Je bekijkt nu foto met id:" .$rand. "<br><br>";
echo "Aantal fotos gevonden:" .$aantal. "<br><br>";

$afbeelingnr = $aantal - $rand;
print "<a href='gallery.php?spgmGal=$nieuwlinkje&spgmPic=$afbeelingnr#spgmPicture'><img src=\"".$gekozenmap . $afbeelding[$rand]."\" width=200 border=1></a>";
?>


Alles werkt goed en de thumbnail wordt ook goed weergegeven. Ook wordt de link naar het origineel opgebouwd, maar nog niet helemaal goed. De afbeelding ID komt niet overeen met de originele afbeelding ID in het fotoboek. Zo verschijnt er dus een andere image dan de random thumbnail.

De foto's in de originele gallery zijn gewoon genummerd vanaf degene die het eerst voorkomt in de dir tot de laatste, dus gewoon 0,1,2,3,4,5,6,etc... (LET OP: de eerste foto is dus 0, en niet 1)

In het script hierboven moet ik dus de var $afbeelingnr hetzelfde krijgen als de ID van de foto in het fotoboek.

Geprobeerd:
PHP:
1
$afbeelingnr = $aantal - $rand;

PHP:
1
$afbeelingnr = $rand;

PHP:
1
$afbeelingnr = $rand -1;

  • DamadmOO
  • Registratie: Maart 2005
  • Laatst online: 19-09 19:31
PHP:
1
$afbeelingnr = $rand + 1;

volgens mij is het dan wel goed.

  • Executor16
  • Registratie: Februari 2001
  • Niet online
DamadmOO schreef op donderdag 28 februari 2008 @ 15:18:
PHP:
1
$afbeelingnr = $rand + 1;

volgens mij is het dan wel goed.
Nope werkt ook niet.

Volgens die echo die elke keer $rand uitprint is komt er dit uit:
$rand = 30 (volgens script)
terwijl het origineel = 2

en nog andere foto's als testje:
$rand = 130 (volgens script)
terwijl het origineel = 58

$rand = 150 (volgens script)
terwijl het origineel = 193

Ik zie niet echt een verband om een formule te verzinnen om van rand naar het orinele id te komen :/

[ Voor 11% gewijzigd door Executor16 op 28-02-2008 15:41 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wat doe je nou precies met $afbeelingnr in gallery.php? Is de array wel altijd op dezelfde manier genummerd? Kan je niet gewoon met associatieve arrays gaan werken, of wil je dat niet? Waarom test je het eerst niet zonder rand(), want blijkbaar gaat het bij elk nummer fout... etc. etc.

{signature}


  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 00:22

DizzyWeb

Ondertiteld

Doe voor de gein eens een print_r van die $afbeelding array. Iets zegt me dat de volgorde anders is dan jij verwacht....

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:11

TeeDee

CQB 241

Volgens mij gebruik je 2 verschillende randoms?

Je gebruikt voor de link $afbeelingnr.
Voor de thumbnail $afbeelding[$rand].

Als ik het even zo doorneem zijn dat 2 compleet andere waardes.

[ Voor 131% gewijzigd door TeeDee op 28-02-2008 15:45 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Executor16
  • Registratie: Februari 2001
  • Niet online
Zo te zien gaat het daar dus fout idd omdat ie ze ook echt random nummert :/

Ik moet er dus op 1 of andere manier voor zorgen dat ie niet random nummert maar gewoon op de juiste volgorde. Dan zou namelijk de -1 ook niet eens hoeven.

[ Voor 52% gewijzigd door Executor16 op 25-12-2013 13:58 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Executor16 schreef op donderdag 28 februari 2008 @ 15:46:
Array ( [0] => IMG_3585.JPG [1] => IMG_3594.JPG [2] => IMG_3609.jpg [3] => IMG_3635.JPG [4] => IMG_3590.JPG [5] => IMG_3619.jpg [6] => IMG_3575.JPG [7] => IMG_3643.JPG [8] => IMG_3625.jpg [9] => IMG_3602.jpg [10] => *KNIP*

zo te zien gaat het daar dus fout idd omdat ie ze ook echt random nummert :/
Dan lees je de readdir() manual en zie je "The filenames are returned in the order in which they are stored by the filesystem".
Ik moet er dus op 1 of andere manier voor zorgen dat ie niet random nummert maar gewoon op de juiste volgorde.
Dan sorteer je gewoon zelf de array.
Dan zou namelijk de -1 ook niet eens hoeven.
Die hoef sowieso niet. Het 1e element van een array heeft gewoon 0 als key.

{signature}


  • erikvdv1
  • Registratie: December 2005
  • Laatst online: 21-09 19:06
Of je gebruikt de functie scandir() (vanaf PHP 5). Daarmee is je code een stuk korter en hij sorteert al automatisch op alfabetische volgorde.

[ Voor 11% gewijzigd door erikvdv1 op 28-02-2008 16:54 ]


Acties:
  • 0 Henk 'm!

  • Executor16
  • Registratie: Februari 2001
  • Niet online
Hoe kan ik gewoon die array sorteren?

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Anders typ je even 'sort' in bij php.net.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Executor16
  • Registratie: Februari 2001
  • Niet online
Het werkt! Bedankt O+

[ Voor 70% gewijzigd door Executor16 op 20-12-2013 00:56 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Met 761 posts hier op het forum weet je nog steeds niet dat topics sluiten bedoeld is voor slechte cq. nutteloze topics en niet voor topics waarin het originele probleem is opgelost? :?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Executor16
  • Registratie: Februari 2001
  • Niet online
curry684 schreef op zaterdag 01 maart 2008 @ 16:03:
[...]

Met 761 posts hier op het forum weet je nog steeds niet dat topics sluiten bedoeld is voor slechte cq. nutteloze topics en niet voor topics waarin het originele probleem is opgelost? :?
Ja alleen niet echt aan gedacht aangezien ik nog op meer fora zit ;)
Pagina: 1