Avatar billede bonden Nybegynder
18. april 2003 - 21:46 Der er 16 kommentarer og
1 løsning

Opliste billeder i rækkefølge

Jeg har følgende kode:

<?
if ($action==""){
echo"<b>Billeder</b><br><br>
";
/*
*/
if ($dir = @opendir("../")) {
while (($file = readdir($dir))) {
$filetime = $file;       
$filenavn=$file;
$filenavn = str_replace('image_', 'Billede kl. ', $filenavn);
$filenavn = str_replace('.jpg', '', $filenavn);
$filetime2 = str_replace('image_','',$filetime);
$filetime2 = str_replace('_','',$filetime2);
$filetime2 = str_replace('.jpg','',$filetime2);
$year = substr($filetime2, 0, 2);
$month = substr($filetime2, 2, 2);
$day = substr($filetime2, 4, 2);
$hour = substr($filetime2, 6, 2);
$minute = substr($filetime2, 8, 2);
$second = substr($filetime2, 10, 2);
$tid = mktime($hour, $minute, $second, $month, $date, $year);
   
 
    echo"$filenavn<br>";   
} 

    closedir($dir);
}
}
?>

Den tager nogle billeder fra en mappe og laver en liste over dem. Billederne hedder "image_yymmdd_HHMMSS.jpg" og jeg får så lavet billedernes navne om til timestamps.
Nu vil jeg gerne have listet billeder i rækkefølge med det nyeste billede først - og det må være noget med at lave et array inde i array'et. Jeg vil samtidigt have mulighed for at vise et enkelt billede, hvor jeg så ved et klik på "næste" får vist det næste billede, som jo så er det billede, der er 50 sekunder ældre. Dette må også være noget med at lave et array inde i mit array.
Hvis jeg kørte det sammen med en mysql-database, havde jeg ingen problemer - men lige til denne har jeg ingen db at læne mig op ad.....
Nogle, der har et bud?
Avatar billede erikjacobsen Ekspert
18. april 2003 - 21:50 #1
Du kan læse alle filnavnene ind i et array, og så lave en almindelig
sortering på dem. Det skal så ske hver gang du skal have fat i
et eller flere billeder. Ud fra dette array kan du gøre det du ønsker.
Avatar billede bonden Nybegynder
18. april 2003 - 22:00 #2
Jeps - noget i den stil, jeg forsøgte at formulere før;-)
Men jeg kører lidt fast, når jeg har ovenstående kode, da jeg der har billederne indlæst - og har fundet datoer på dem. Jeg skal bare vise dem, lidt som når man bruger "select * from tabel order by desc"...
Avatar billede bonden Nybegynder
18. april 2003 - 22:05 #3
Jeg forestiller mig, at når jeg har fået lavet listen af billeder, tildeles de et id - noget a la image[1] - og jeg så kan lave "næste billede" fra eks. image[435] som <a href="fil.php?image[435+1]">Næste</a>
Avatar billede erikjacobsen Ekspert
18. april 2003 - 22:06 #4
Yeps. Men du kan jo starte med at få læst dem i et array, sortere
det, udskrive filnavnene så du kan se det passer, og så måske få
lidt inspiration af det (eller ønske dig en database i julegave)
Avatar billede bonden Nybegynder
18. april 2003 - 22:10 #5
Databaser har jeg rigeligt af;-)
Billederne i mappen er billeder, der bliver uploadet via ftp fra et kamera hvert 50. sekund. Der noget windows-software med til at vise billerne med, men er ikke så udpræget begejstret for windows-grej:-)
Avatar billede erikjacobsen Ekspert
18. april 2003 - 22:12 #6
Så din software vil bare lægge dem op med ftp?

Men du kan jo angive filnavnet på den næste i rækken, når du aflæser
det aktuelle billede i det sorterede array. Og det forrige. Du
behøver ingen sjove id-er.
Avatar billede bonden Nybegynder
18. april 2003 - 22:15 #7
Jeg leger lidt videre med koden.

I kameraet sidder der både en ftp-server- og client samt en httpd-server, ligesom man kan få adgang til den med telnet. Styresystemet er opbygget på et linux-system. Det er lidt små-smart.
Avatar billede jakoba Nybegynder
19. april 2003 - 01:19 #8
<?
if ($action==""){
    echo"<b>Billeder</b><br><br>
";
    if ($dir = @opendir("../")) {
        $alle_filer = array();    // her samler vi alle filnavnene
        while (($file = readdir($dir))) {
            if ( substr( $file, 0, 6 ) == "image_" ) {
                $alle_filer[] = $file;
            }
        }
        closedir($dir);      // nu ligger alle billedfilernes navne i arrayet

        $alle_filer = sort( $alle_filer );  // her sorteres de i datoorden'

        foreach ( $alle_filer as $file ) {

            $filenavn = str_replace('image_', 'Billede kl. ', $file);
            $filenavn = str_replace('.jpg', '', $filenavn);

            $filetime2 = str_replace('image_','',$file);
            $filetime2 = str_replace('_','',$filetime2);
            $filetime2 = str_replace('.jpg','',$filetime2);
            $year = substr($filetime2, 0, 2);
            $month = substr($filetime2, 2, 2);
            $day = substr($filetime2, 4, 2);
            $hour = substr($filetime2, 6, 2);
            $minute = substr($filetime2, 8, 2);
            $second = substr($filetime2, 10, 2);
            $tid = mktime($hour, $minute, $second, $month, $date, $year);

            echo"$filenavn<br>";          // her udskrives de
        }
    }
}
?>

alt det der med $filetime2 er ikke nødvendigt for at sortere. Så medmindre du bruger det til noget andet kan du sagtens slette det.

mvh JakobA
Avatar billede bonden Nybegynder
19. april 2003 - 12:26 #9
Det virker ikke. Den kommer med en fejl:
Invalid argument supplied for foreach() - kan det passe, at der ikke er noget i arrayet? - og at den derfor ikke kan lave funktionen foreach?
Avatar billede erikjacobsen Ekspert
19. april 2003 - 13:35 #10
Prøv

  sort( $alle_filer );  // her sorteres de i datoorden'

i stedet for

  $alle_filer = sort( $alle_filer );  // her sorteres de i datoorden'
Avatar billede bonden Nybegynder
19. april 2003 - 15:50 #11
Ja, så bliver de alle listet - som de også gjorde før.
Jeg har nu leget en del videre med det uden at få synderligt meget ud af det.
Billederne kan fint listes op, men det med kun at få listet 3 billeder i rækkefølge vil altså ikke lykkes.

Når jeg vælger et billede, skal det have en slags id, således at jeg kan finde det næste billede, der skal vises.
billede.jpg [1]
billede.jpg [2]
billede.jpg [3]
billede.jpg [4]
billede.jpg [5]
.....er den måde, jeg gerne vil have dem ud på - således at hvis jeg kigger på billede.jpg [2] skal næste billede være billede.jpg [3].....
Avatar billede bonden Nybegynder
19. april 2003 - 16:15 #12
Det her lister også billederne op:
<?
echo"<b>Billeder</b><br><br>
";if ($action==""){
    if ($dir = @opendir("../kamera/")) {
        $alle_filer = array();    // her samler vi alle filnavnene
        while (($file = readdir($dir))) {
            if ( substr( $file, 0, 6 ) == "image_" ) {
                $alle_filer[] = $file;
                }}
        closedir($dir);      // nu ligger alle billedfilernes navne i arrayet
      sort( $alle_filer );  // her sorteres de i datoorden'
          $filenavn = str_replace('image_', 'Billede kl. ', $file);
            $filenavn = str_replace('.jpg', '', $filenavn);
            $images = count($alle_filer);
                for ($i=0; $i<$images; $i++) {
                echo"<a href='$PHP_SELF?action=vis&image=$alle_filer[$i]'>$alle_filer[$i]</a><br>"; // her udskrives de
        }  }}
    if ($action=="vis"){
    echo"<br><img src='../kamera/$image'><br><br>";
   
}
?>
Avatar billede erikjacobsen Ekspert
19. april 2003 - 16:22 #13
Lad os lege videre.

Du skal starte med at vise det første i det sorterede array.
Så skal der være en link til det forrige (nå nej, der er ikke noget)
og det næste.

Linket til det næste er så blot
<a href="dinphpfil.php?billede=**navnethentetfranæstepositioniarrayet**">NEXT</a>

Men så gælder der jo, at kun hvis $_GET['billede'] ikke er sat, så
skal det første billede vises. Er $_GET['billede'] sat, skal du
lede i arrayet efter positionen, vise dette billede, og linke
til næste og forrige med et link som ovenfor.

Det er bare til inspiration ... :)
Avatar billede bonden Nybegynder
19. april 2003 - 16:24 #14
Vi er helt enige;-)) Skal bare have mainprocessoren til at omsætte det til teknik.
Avatar billede erikjacobsen Ekspert
19. april 2003 - 16:31 #15
(Dette er ikke personligt: jeg gider ikke skrive din kode for dig.
Det lærer du intet af, næsten. Jeg vil gerne hjælp - hvis jeg kan.
Til gengæld er det gratis...)
Avatar billede bonden Nybegynder
19. april 2003 - 16:34 #16
Ved det ganske udemærket godt;-) Har det nøjagtigt på samme måde.
Og jeg ved, jeg også nok skal fange den på et tidspunkt;-))
Avatar billede bonden Nybegynder
14. februar 2005 - 19:17 #17
Lukker
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