Prikaz nasumične slike

Prikaz nasumične slike

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4577

Napisano: 12 Jan 2015 21:39

Hoću da mi se na početnoj strani aplikacije prikazuje stalno druga slika kada korisnik ponovo poseti tu stranu. Ovu skriptu koju sam napisao sada i ne radi baš najbolje (nekad ni ne prikaže sliku) , a i nekada se desi da prikaže dva puta za redom istu sliku.

<?php           $root = $_SERVER['DOCUMENT_ROOT'];    $putanja = 'images/';              function prikaziSlike($putanja) {       $slike = array();       if ($dir = @opendir($putanja) ) {          while ( false !== ($fajl = readdir($dir)) ) {             // pronalazi .gif, .jpg, .png slike             if ( preg_match("/(\.gif|\.jpg|\.png|)$/", $fajl) ) {                     $slike[] = $fajl;                  }               }               closedir($dir);       }            return $slike;    }              function prikaziSlikeIzNiza($ar) {       mt_srand( (double)microtime() * 1000000 );       $broj = array_rand($ar);       return $ar[$broj];    }              $listaSlika = prikaziSlike($putanja);    $img = prikaziSlikeIzNiza($listaSlika);           ?>        <div align="center">    <img src="<?php echo $putanja . $img ?>"> </div>

Znači pored te skripte za prikaz nasumične slike treba mi i nešto što bi pamtilo koja se slika prošli put prikazala (to može i preko kolačića da se odradi).

Edit: rešio sam (nisam koristio nasumični odabir pošto bi samo bespotrebno trošio vreme, ovako je sigurno da se korisniku neće pojavljivati ista slika dvaput, sem naravno ako se kojim slučajem obriše kolačić).

<?php           $lokacija = "images";    $vreme = time() + 3600;           if(!isset($_COOKIE['slika'])) {       $imeSlike = "1.jpg";       setcookie('slika', 1, $vreme, "/");       echo "<img src=\"$lokacija/$imeSlike\" alt=\"$imeSlike\" />";    } else {       $imeSlike = $_COOKIE['slika'] . ".jpg";       if($_COOKIE['slika'] == 1 || $_COOKIE['slika'] < 4) {          $_COOKIE['slika']+=1;          setcookie('slika', $_COOKIE['slika'], $vreme, "/");          echo "<img src=\"$lokacija/$imeSlike\" alt=\"$imeSlike\" />";       } else if($_COOKIE['slika'] == 4) {          $_COOKIE['slika']-=3;          setcookie('slika', $_COOKIE['slika'], $vreme, "/");          echo "<img src=\"$lokacija/$imeSlike\" alt=\"$imeSlike\" />";       }    }        ?>



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Napisano: 13 Jan 2015 18:32

Citat: Ovu skriptu koju sam napisao
Hteo si reci preveo? : Very Happy
[Link mogu videti samo ulogovani korisnici]

Da si malo debug ove skripte mozda bi i skontao gde je greska.

Prilikom debug output je npr:

slika-1.jpg
slika-2.png
.
..


Ajde razimem da nadje slike ali gde nadje ove tacke. Te tacke izazivaju problem u img src tagu i dobijas gresku.

Medjutim lik koji je pisao ovu skriptu nije razmisljao o posledicama pa dolazi do ovih problema. U php-u kada se radi sa nizovima postoji jedna jako korisna funkcija koja se zove array_dif() izracunavanje razlike nizova.

U ovom tvom primeru jedino ti moze pomoci ako na kraju iskaza dodas :
return  array_diff($slike, array('..','.'));;

Celukupni kod bi ti izgledao ovako :

    <?php                  $root = $_SERVER['DOCUMENT_ROOT'];        $putanja = 'images/';                      function prikaziSlike($putanja) {           $slike = array();           if ($dir = @opendir($putanja) ) {              while ( false !== ($fajl = readdir($dir)) ) {                 // pronalazi .gif, .jpg, .png slike                 if ( preg_match("/(\.gif|\.jpg|\.png|)$/", $fajl) ) {                                  $slike[] = $fajl;                        }                   }                   closedir($dir);           }                return  array_diff($slike, array('..','.'));        }                      function prikaziSlikeIzNiza($ar) {           mt_srand( (double)microtime() * 1000000 );           $broj = array_rand($ar);           return $ar[$broj];        }                      $listaSlika = prikaziSlike($putanja);        $img = prikaziSlikeIzNiza($listaSlika);                           ?>               <div align="center">         <img src="<?php echo $putanja. $img; ?>">     </div>

Probao i radi Wink Ziveli

Dopuna: 13 Jan 2015 18:55



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4577

Napisano: 13 Jan 2015 20:41

@_ivKe, hvala ti za ovo Ziveli

Tek sam kasnije skontao da ovo sve što ja hoću traži potpuno drugačiju skriptu, za ovo što mi treba je veoma bitno da se ne pojavljuje dva puta ista slika nakon refresh-a, a sa tom prvom skriptom može da se desi.

Gledam sad taj tvoj gif, i primećujem da se jedna slika ne prikazuje (broken link) ili mi se čini? Very Happy

Dopuna: 13 Jan 2015 20:43

Aha, to je pre ispravke, izvinjavam se Razz Nego kako ti radi taj NetBeans, ja sam ga koristio samo dok sam radio Javu Very Happy Baš ću sad da probam s njim malo da eksperimentišem.

_ivKe ::Da si malo debug ove skripte mozda bi i skontao gde je greska.

Nemam gde da ih debagujem, to je problem Mr. Green

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

NetBeans fantasticno radni a sto se tice na suvo da debug onda imas var_dump, print_r, echo, print Smile bitan ti je >> output.

Sto se tice toga da se ne ponavljaju koristi funkcije shuffle i range cak sto vise mozes i da izvuces i sa array_shift

Ko je trenutno na forumu
 

Ukupno su 1240 korisnika na forumu :: 43 registrovanih, 6 sakrivenih i 1191 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apis Dr, Aristotle2002, blatruc82, bobor, bojan1234, Bojan198527, bokicacar, cyprus, Doc, draganca, dukajov, GT, jalos, JOntra, kalens021, kolle.the.kid, Komentator, Koser, kovacicbozo, kutija11, liki83, lord sir giga, mat, MB120mm, mist-mist, Mitraljeta, MrG, nikoladim, Parker, Pero Petković, Ray1973, Romibrat, samo_citam, sevenino, skok, Srky Boy, VJ, vladetije, zemljanin, zokilivac, Zoran1959, zubri