Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> bardzo prosty skrypt losowania obrazka, małe połączenie JS i PHP
cybertix
post 8.01.2009, 22:21:33
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.08.2007

Ostrzeżenie: (0%)
-----


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' ?
Go to the top of the page
+Quote Post
Rafal Filipek
post 8.01.2009, 22:31:19
Post #2





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
cybertix
post 9.01.2009, 12:11:22
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.08.2007

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
Wykrywacz
post 9.01.2009, 12:17:40
Post #4





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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


Ten post edytował Wykrywacz 9.01.2009, 12:24:39
Go to the top of the page
+Quote Post
cybertix
post 9.01.2009, 12:42:38
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.08.2007

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował cybertix 9.01.2009, 12:49:10
Go to the top of the page
+Quote Post
Wykrywacz
post 9.01.2009, 13:21:36
Post #6





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.         ?>
Go to the top of the page
+Quote Post
cybertix
post 9.01.2009, 13:41:33
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.08.2007

Ostrzeżenie: (0%)
-----


W moim skrypcie tylko tej funkcji other mi nie widzi sciana.gif
Reszta jest OK tongue.gif
Go to the top of the page
+Quote Post
zulus
post 9.01.2009, 13:58:40
Post #8





Grupa: Zarejestrowani
Postów: 225
Pomógł: 18
Dołączył: 30.06.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Obejmij nazwę pliku w cudzysłowy winksmiley.jpg
  1. <?php
  2. echo "images[$i] = '$pozycja';\n
  3. ?>


Ten post edytował zulus 9.01.2009, 13:59:51


--------------------
Go to the top of the page
+Quote Post
cybertix
post 9.01.2009, 14:08:41
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.08.2007

Ostrzeżenie: (0%)
-----


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" />' ?>


Ten post edytował cybertix 9.01.2009, 18:44:42
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 9.06.2024 - 08:33