Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: bardzo prosty skrypt losowania obrazka
Forum PHP.pl > Forum > Przedszkole
cybertix
Witam

pisze sobie skrypt który wyświetla losowy obrazek


cała strona wygląda tak

Kod
<html>
<head>
    <title> Losowy obrazek </title>
    <script type="text/javascript">
        
        var images = new Array();
        
        <?php
            
            $dir = 'img/';
            $array = Array();
            
            if($dh = opendir($dir))
            {
                $i=0;
                
                while(($pozycja = readdir($dh)) != FALSE)
                    if(!is_dir($pozycja))
                    {
                        echo "images[$i] = $pozycja;\n        ";
                        $array[$i++] = $pozycja;
                    }
                
                closedir($dh);
            }
            echo "\n";

        ?>
        
        function other()
        {
            document.getElementById("img").setAttribute("src", images[Math.floor(Math.random()*images.length)]);
        }
        
    </script>
</head>

<body>

        <input type="button" onClick="other();" value="Losuj inny" />
        <br /><br />
        <?php echo '<img src="'.$dir.$array[rand(0, sizeof($array))].'" id="img" />' ?>
    
</body>
</html>



i chodzi o to że nie wywołuje mi tej funkcji other po kliknięciu w button'a
w firebug'u po kliknięciu występuje błąd other is not defined


co zrobić żeby jak to mój nauczyciel mówi fungowało tongue.gif, żeby ta funkcja była 'widoczna' ?
Rafal Filipek
mi tam takie szybkie sprawdzenie działa
  1. <title> Losowy obrazek </title>
  2. <script type="text/javascript">
  3. var images = new Array();
  4. images[0] = '1.png';
  5. images[1] = '2.png';
  6. images[2] = '3.png';
  7. function other(){
  8. document.getElementById("img").setAttribute("src", images[Math.floor(Math.random()*images.length-1)]);
  9. }
  10. </script>
  11. </head>
  12. <input type="button" onClick="other();" value="Losuj inny" />
  13. <br /><br />
  14. <?php echo '<img src="1.png" id="img" />' ?>
  15. </body>
  16. </html>
cybertix
Cytat(Rafal Filipek @ 8.01.2009, 22:31:19 ) *
mi tam takie szybkie sprawdzenie działa
  1. <title> Losowy obrazek </title>
  2. <script type="text/javascript">
  3. var images = new Array();
  4. images[0] = '1.png';
  5. images[1] = '2.png';
  6. images[2] = '3.png';
  7. function other(){
  8. document.getElementById("img").setAttribute("src", images[Math.floor(Math.random()*images.length-1)]);
  9. }
  10. </script>
  11. </head>
  12. <input type="button" onClick="other();" value="Losuj inny" />
  13. <br /><br />
  14. <?php echo '<img src="1.png" id="img" />' ?>
  15. </body>
  16. </html>



na początku też miałem takie coś i działało smile.gif
tylko nie chciałbym na sztywno samemu tworzyć tą tablice images
chce żeby zrobił to PHP
bo jak bede chciał mieć jakąś nową fotke to bede musiał znowu dopisywać do skryptu images[x] = 'jakas nazwa';
przy paru fotkach nawet może tak być
tylko jak będzie dużo fotek to lepiej żeby PHP mi to zrobił

sprawdzałem całość bez pętli while w skrypcie PHP
czyli

Kod
<script type="text/javascript">
        
        var images = new Array();
        
        <?php
            
            $dir = 'img/';
            $array = Array();
            
            if($dh = opendir($dir))
            {
                $i=0;
                
                /*while(($pozycja = readdir($dh)) != FALSE)
                    if(!is_dir($pozycja))
                    {
                        echo "images[$i] = $pozycja;\n        ";
                        $array[$i++] = $pozycja;
                    }*/
                
                closedir($dh);
            }
            echo "\n";

        ?>
        
        function other()
        {
            //document.getElementById("img").setAttribute("src", images[Math.floor(Math.random()*images.length)]);
            alert('działa');

        }
        
    </script>



reszta strony jest ta sama

i funkcja jest wywoływana
tylko czemu z tym while nie działa sciana.gif ?
Wykrywacz
A nie wstawia ci w miejscu readdir($dh) zamiast false wartości ""?

Zobacz w manualu

Cytat
Ostrzeżenie

Ta funkcja może zwrócić logiczne FALSE, ale także zwykłą wartość rozpoznawaną jako FALSE, na przykład 0 lub "". Więcej informacji w rozdziale dotyczącym typów logicznych. Użyj operatora === aby sprawdzić wartość i typ zwracany przez tę funkcję.


A druga sprawa czy w ten sposób przez przypadek nie sprawdzasz jeżeli niema ścieżki to echouj?

  1. <?php
  2. if(!is_dir($pozycja))
  3.                    {
  4.                        echo "images[$i] = $pozycja;\n        ";
  5.                        $array[$i++] = $pozycja;
  6.                    }*/
  7. ?>

Ja bym to zroił przez

  1. <?php
  2. if (isset(is_dir($pozycja))){
  3. ....
  4. }
  5. ?>


Wydaje mi się żę to chyba tu może być błąd bo masz wartości a ifem wyświetlasz echo jeżeli by ich nie było winksmiley.jpg (ale to tak szybko przed śniadaniem więc mogę kłamać ;P)

edit. a nawet ja bym zrobił jeszcze inaczej
  1. <?php
  2. if (is_dir($pozacja) == TRUE){
  3. ...
  4. }
  5. ?>
cybertix
strona jest tutaj http://zsm.slask.pl/ddepta/web/inne/losowy%20obrazek/

i w źródle strony jest nasz skrypt :

  1. <script type="text/javascript">
  2.  
  3. var images = new Array();
  4.  
  5. images[0] = 9.jpg;
  6. images[1] = 8.jpg;
  7. images[2] = 7.jpg;
  8. images[3] = 6.jpg;
  9. images[4] = 5.jpg;
  10. images[5] = 4.jpg;
  11. images[6] = 3.jpg;
  12. images[7] = 2.jpg;
  13. images[8] = 1.jpg;
  14.  
  15.  
  16. function other()
  17. {
  18. document.getElementById("img").setAttribute("src", images[Math.floor(Math.random()*images.length)]);
  19. }
  20.  
  21. </script>


czyli skrypt PHP dobrze działa
Jeżeli by było
  1. <?php
  2. if(is_dir($pozycja))
  3.  
  4. //to w skrypcie by było
  5.        images[0] = .;
  6.        images[1] = ..;
  7. ?>


a mnie przecież interesują pliki(fotki) a nie 'foldery'

i co dalej ?
Wykrywacz
To może tak?
  1. <?php
  2.            
  3.            $dir = 'img/';
  4.            $array = Array();
  5.            
  6.            if(file_exists($dir))
  7.            {
  8.                $i=0;
  9.                
  10.                 foreach (glob("*.txt") as $filename) {
  11.                   images[$i] = $filename.'\n';
  12.                   images[$i]++;
  13. }
  14.          
  15.            }
  16.         ?>
cybertix
W moim skrypcie tylko tej funkcji other mi nie widzi sciana.gif
Reszta jest OK tongue.gif
zulus
Obejmij nazwę pliku w cudzysłowy winksmiley.jpg
  1. <?php
  2. echo "images[$i] = '$pozycja';\n
  3. ?>
cybertix
dzięki zulus

i tak jeszcze musiałem dać małą poprawke
a mianowicie w skrypcie w head

  1. var dir = 'img/';
  2.  
  3. // i jeszcze w funkcji other
  4. document.getElementById("img").setAttribute("src", dir+images[Math.round(Math.random()*(images.length-1))]);



i w ciele strony w skrypcie PHP

  1. <?php echo '<img src="'.$dir.$array[rand(0, sizeof($array)-1)].'" id="img" />' ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.