Avatar billede 4us.dk Nybegynder
11. februar 2004 - 23:09 Der er 17 kommentarer og
3 løsninger

Random funktion

Hej Eksperter.

Jeg står og skal bruge en funktion, som kan random tage fat i billeder...

Den skal fungere ved at den undersøger: images/upload/ efter billeder (det er kun jpg billeder, der er i mappen, ved ikke om det hjælper), og derefter random vælge et af billederne og udskrive det.

Er dette muligt?

Hvis ja, kan nogen så hjælpe mig med at brygge et sammen?

På forhånd mange tak.
Avatar billede jakobclausen Nybegynder
11. februar 2004 - 23:22 #1
Jeg vil forslå at du opretter en database til at styre det med. Databasen indeholder en id og en sti for hver billede.

(1) Du opretter forbindelse til din database
(2) Laver et udtræk med en random id ved hjælp af:
http://dk.php.net/manual/en/function.rand.php

(3) Billedet udskrives
Avatar billede jakobclausen Nybegynder
11. februar 2004 - 23:28 #2
Du skal bruge rand() - http://www.mysql.com/doc/en/Mathematical_functions.html istedet for

<?
$conn = mysql_connect("host", "user", "pass");
mysql_select_db("database");
$query = mysql_result(mysql_query("SELECT * From tabel where id = rand(x),0);

echo "<img src='$query[sti]' border='0'>";

mysql_close($conn);
?>

NB!  X = antal billeder - kan også findes ved hjælp af et udtræk
Avatar billede jakobclausen Nybegynder
11. februar 2004 - 23:29 #3
$query = mysql_result(mysql_query("SELECT * From tabel where id = rand(x),1);

echo "<img src='$query' border='0'>";
Avatar billede danino Nybegynder
11. februar 2004 - 23:34 #4
jakobclausen >> hvis han bruger en database til at styre det, så vil den jo ikke tjekke om der er kommet flere billeder i mappen siden sidst...
Brug i stedet dette script jeg har strikket sammen :)

<?php
chdir("./images/upload");
    if ($dir = dir(".")){
        $dir -> rewind();
   
        while ($file = $dir->read())
        {
            if($file == "." || $file == "..")
            {
                continue;
            }
            else
            {
                billeder[] .= $file;
            }
      }
mt_srand( (double) microtime() * 1000000);
$antal_filer = count($billeder);
$i = mt_rand(0, --$antal_filer);
echo "<img src=\"" . $billeder[$i] . "\">";
?>

Scriptet er dog ikke testet.... endnu...
Avatar billede 4us.dk Nybegynder
11. februar 2004 - 23:56 #5
Tak, jeg har ikke lige testet det, vil teste i morgen... danino du må meget gerne teste det ;)

skriver lige i morgen... snakkes
Avatar billede tefcke Nybegynder
12. februar 2004 - 00:06 #6
billeder[] .= $file;

skal nok være:

$billeder[] = $file;
Avatar billede danino Nybegynder
12. februar 2004 - 00:29 #7
Ja, eller
$billeder[] .= $file;
Avatar billede yellow Nybegynder
12. februar 2004 - 01:26 #8
Hvis du kører med PHP 4.3.0 eller nyere kan du lave en elegant løsning med glob()

Noget i retning af:
$imageFiles = glob("/images/*.jpg");
$randomImage = $imageFiles[ array_rand($imageFiles) ];
Avatar billede 4us.dk Nybegynder
12. februar 2004 - 11:17 #9
danino: jeg har prøvet dit script, og det ser ud til at virke... jeg har lagt det ind i en include ("random.php");

Men nedenunder der, har jeg en:
<?php
    include ("../inc/bund.inc.php");
?>

og den har der (og var der ikke) fejl i nu... den siger at den ikke kan include den fil...
Har det noget med dit script at gøre siden den lige pludselig gør det?
Avatar billede danino Nybegynder
12. februar 2004 - 11:39 #10
Tja... Hvis du bruger de samme variabelnavne som mig, så kan det godt give lidt problemer... Bruger du nogle af disse?
$billeder
$antal_filer
$i
??... for så må du lige ændre i navnene...
Avatar billede danino Nybegynder
12. februar 2004 - 11:39 #11
eller $dir
Avatar billede danino Nybegynder
12. februar 2004 - 11:40 #12
ok.. eller $file... men så er der heller ikke flere... :)
Avatar billede 4us.dk Nybegynder
12. februar 2004 - 14:44 #13
Ok, jeg har nu ændret alle variabler, men det ser ikke ud til at virke...

bund.inc.php indeholder faktisk kun:
</body>
</html>

Det er det eneste...


Helt præcist har jeg:
......
  <tr>
    <td colspan="2"><?php include ("../inc/random.inc.php"); ?></td>
  </tr>
</table>
<?php
    include ("../inc/bund.inc.php");
?>
Avatar billede danino Nybegynder
12. februar 2004 - 22:28 #14
Hvad for en fejl får du? ... Hvis du altså får nogen...
Avatar billede 4us.dk Nybegynder
12. februar 2004 - 23:33 #15
Jeg får følgende fejl:

Warning: main(): Unable to access ../inc/bund.inc.php in /docs/forside.php on line 37

Warning: main(../inc/bund.inc.php): failed to open stream: No such file or directory in /docs/projekter/test/lel/docs/forside.php on line 37

Warning: main(): Failed opening '../inc/bund.inc.php' for inclusion (include_path='.:/pack/php-4.3.3/share/pear') in /docs/projekter/test/lel/docs/forside.php on line 37
Avatar billede danino Nybegynder
13. februar 2004 - 12:07 #16
Det er fordi at du enten er kommet til at lave en fejl i filnavnene, eller i stien til dine filer. Tjek dem lige igen...
Avatar billede 4us.dk Nybegynder
13. februar 2004 - 13:45 #17
Jeg har fil:
"../inc/random.inc.php"

<?php
chdir("images/bund");
    if ($dir2 = dir(".")){
        $dir2 -> rewind();
   
        while ($file1 = $dir2->read())
        {
            if($file1 == "." || $file1 == "..")
            {
                continue;
            }
            else
            {
                $billeder1[] .= $file1;
            }
      }
mt_srand( (double) microtime() * 1000000);
$antal_filer1 = count($billeder1);
$i22 = mt_rand(0, --$antal_filer1);
echo "<img src=\"images/bund/" . $billeder1[$i22] . "\">";
}
?>

og jeg har:

<?php include ("../inc/random.inc.php"); ?>

På alle mine sider (til at includere random script på siderne)


Lidt længere nede har jeg så:
<?php
    include ("../inc/bund.inc.php");
?>

Og i bund er der ikke andet end:
</body>
</html>


random scriptet virker... men  bunden bliver ikke includeret... men hvis jeg fjerner random scriptet, bliver bunden includeret...
Det script, som er lavet, kan det være den som påvirker det? eller skal man lukke noget først, før man kan include noget andet, eller påvirker den stierne på filer som kommer efter include scriptet, eller...?

Håber du/I kan finde årsagen, tak.
Avatar billede tefcke Nybegynder
13. februar 2004 - 13:49 #18
Det er fordi du i random scriptet skifter "working direcory" med:
chdir("images/bund");

i bunden af dit random script, kan du gøre følgende:
chdir("../../");

Så skulle du komme tilbage til det rigtige "working directory" som du inkluderer bund.inc.php fra!
Avatar billede 4us.dk Nybegynder
13. februar 2004 - 17:57 #19
tefche: Ja, du har ret, det virker nu ;)

kan du ikke også lige ligge et svar, så kan jeg dele lidt points rundt
Avatar billede tefcke Nybegynder
13. februar 2004 - 18:07 #20
Ok!
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