Avatar billede nyst Nybegynder
22. januar 2007 - 13:45 Der er 24 kommentarer og
1 løsning

sortere billeder affabetisk

Hi there,

har en side der viser alle mine billder i thumpsnails, men mangler at kunne vise dem i alfabetisk rækkefølge, herefter tal.

Ved bogstaver er det det første uanset om det er lilel eller stort.

har forsøgt med sort( $fil_liste );

men det bliver noget underligt noget.

??? :-)
Avatar billede jakobdo Ekspert
22. januar 2007 - 13:54 #1
Prøv natsort()
Avatar billede nyst Nybegynder
22. januar 2007 - 13:57 #2
hejsa, næ den ser ikke ud til at virke men måske jeg placerer den forkert:

<?php

$bibliotek = "../../image";

function list_filer($bibliotek)
{
    if ($bib = @opendir($bibliotek)) {
        $antal_pr_row = 5;
        $num = 0;
        while (false !== ($fil = readdir($bib))) {
            if ($fil != '.' && $fil != '..' && !ereg('^\..+', $fil)) {
                $fil_liste[$num] = "";
                if ($num % $antal_pr_row == 0) $fil_liste[$num] .=  "<tr>";
                $fil_liste[$num] .= "<td><img src=\"$bibliotek/$fil\" width=\"90\" height=\"90\" /><br /><a href=\"$bibliotek/$fil\">$fil</a></td>";
                if ($num % $antal_pr_row == 4) $fil_liste[$num] .= "</tr>";
                $num++;
            }
        }
 
closedir($bib);

natsort( $fil_liste );

   
  if(is_array($fil_liste)) {
        $c = count( $fil_liste );
        $liste = "<table width='100%' border='0'>";
        for ( $i = 0; $i < $c; $i++ )
        {
            $n = $i % 5;
            if ( $n == 0 && $i != 0 )
            {
                $liste .= "  </tr>\n";
            }
            if ( $i == 0 || $n == 0 )
            {
                $liste .= "  <tr>\n";
            }
            $liste .= "    <td>$fil_liste[$i]</td>\n";
        }
        for ( $i = $n + 1; $i < 5; $i++ )
        {
            $liste .= "    <td>&nbsp;</td>\n";
        }
        $liste .= "  </tr>\n</table>\n";

    } else {
      $liste = "<p>Ingen filer i dir</p>";
    }
    return "Klik på link for at se normal visning:" . $liste;
  } else {
    die("Kunne ikke åbne dir: " . $bibliotek);
  }
}

echo list_filer('../../image');

?>
Avatar billede jakobdo Ekspert
22. januar 2007 - 14:08 #3
Det kan jeg ikke lige overskue nu! :o)
Det må jeg kigge på senere, eller en anden må.
Avatar billede sw_red_6 Nybegynder
22. januar 2007 - 14:28 #4
Det kunne være at du skulle prøve natcasesort.
Hvis den heller ikke virker så må du lige forklare hvad den gør forkert..
Avatar billede nyst Nybegynder
22. januar 2007 - 14:35 #5
hej sw_red_6

det er det samme,

som du kan se sætter jeg natsort( $fil_liste ); efter første afsnit

men den viser fotos i tilfældig reækkefølge , kan slet ikke se nogen logi i rækkefølgen.

Skulle jo gerne vise fra a osv vandret 5 foto.

ved ikke om placering af natsort( $fil_liste ); og om $fil_liste er det rigtige.

:-)
Avatar billede sw_red_6 Nybegynder
22. januar 2007 - 14:41 #6
det er nok fordi den ikke ændrer på arraykeys når du sorterer så du skulle måske lave det om så du bruger foreach() til at udskrive dine billeder
Avatar billede sw_red_6 Nybegynder
22. januar 2007 - 14:45 #7
prøv evt. det her:
  if(is_array($fil_liste)) {
    $i=0;
    $liste = "<table width='100%' border='0'>";
    foreach ($fil_liste as $key => $fil) {
      $i++;
      $n = $i % 5;
      if ( $n == 0 && $i != 0 ) {
        $liste .= "  </tr>\n";
      }
      if ( $i == 0 || $n == 0 ) {
        $liste .= "  <tr>\n";
      }
      $liste .= "    <td>$fil</td>\n";
    }
    for ( $i = $n + 1; $i < 5; $i++ ) {
      $liste .= "    <td>&nbsp;</td>\n";
    }
    $liste .= "  </tr>\n</table>\n";

  } else {
    $liste = "<p>Ingen filer i dir</p>";
  }
Avatar billede nyst Nybegynder
22. januar 2007 - 15:06 #8
aå laver den 6 rækker og vil ikke vise alle men står bare og knokler *S*
Avatar billede nyst Nybegynder
22. januar 2007 - 15:14 #9
men den sorterer dog men viser ikke korrekt tabelvisning
Avatar billede sw_red_6 Nybegynder
22. januar 2007 - 15:28 #10
hmm har du prøvet at sætte $i++; nederst i den foreach?
Avatar billede nyst Nybegynder
22. januar 2007 - 15:34 #11
hvordan mener du?
Avatar billede nyst Nybegynder
22. januar 2007 - 15:37 #12
det må være noget med tabellen nu for den kører efter alfabet men den viser en masse tomme felter og laver flere rækker end de 5 og rykker den sidste
return "Klik på link for at se normal visning:" . $liste;
forkert

!!!!
Avatar billede sw_red_6 Nybegynder
22. januar 2007 - 15:38 #13
Sådan her:
    foreach ($fil_liste as $key => $fil) {
      $n = $i % 5;
      if ( $n == 0 && $i != 0 ) {
        $liste .= "  </tr>\n";
      }
      if ( $i == 0 || $n == 0 ) {
        $liste .= "  <tr>\n";
      }
      $liste .= "    <td>$fil</td>\n";
      $i++;
    }

Det er mere fordi du siger den laver 6 rækker, selvom den kun skal lave 5.
Avatar billede nyst Nybegynder
22. januar 2007 - 16:00 #14
du får lige hele koden som den er nu
for den funker ikke
den viser nu 6 rækker og en del tomme felter
hvor koden øverst viser korrekt
jeg kan ikke se hvor det går galt - kan du?
her er koden:

<?php

$bibliotek = "../../image";

function list_filer($bibliotek)
{
    if ($bib = @opendir($bibliotek)) {
        $antal_pr_row = 5;
        $num = 0;
        while (false !== ($fil = readdir($bib))) {
            if ($fil != '.' && $fil != '..' && !ereg('^\..+', $fil)) {
                $fil_liste[$num] = "";
                if ($num % $antal_pr_row == 0) $fil_liste[$num] .=  "<tr>";
                $fil_liste[$num] .= "<td><img src=\"$bibliotek/$fil\" width=\"90\" height=\"90\" /><br /><a href=\"$bibliotek/$fil\">$fil</a></td>";
                if ($num % $antal_pr_row == 4) $fil_liste[$num] .= "</tr>";
                $num++;
            }
        }
 
closedir($bib);

natcasesort( $fil_liste );

  if(is_array($fil_liste)) {
    $i=0;
    $liste = "<table width='100%' border='0'>";
    foreach ($fil_liste as $key => $fil) {
      $n = $i % 5;
      if ( $n == 0 && $i != 0 ) {
        $liste .= "  </tr>\n";
      }
      if ( $i == 0 || $n == 0 ) {
        $liste .= "  <tr>\n";
      }
      $liste .= "    <td>$fil</td>\n";
      $i++;
    }
    for ( $i = $n + 1; $i < 5; $i++ ) {
      $liste .= "    <td>&nbsp;</td>\n";
    }
    $liste .= "  </tr>\n</table>\n";
  } else {
    $liste = "<p>Ingen filer i dir</p>";
  }
    return "Klik på link for at se normal visning:" . $liste;
  } else {
    die("Kunne ikke åbne dir: " . $bibliotek);
  }
}

echo list_filer('../../image');

?>
Avatar billede nyst Nybegynder
22. januar 2007 - 16:04 #15
den første kolonne der skal man scrolle langt langt ned for at se fotoet

om det er den kolonne der er forkert eller om det er den sidste nr 6 ved jeg skisme ik

*S*
Avatar billede sw_red_6 Nybegynder
22. januar 2007 - 16:19 #16
prøv det her:
function list_filer($bibliotek)
{
    if ($bib = @opendir($bibliotek)) {
        $antal_pr_row = 5;
        $num = 0;
        while (false !== ($fil = readdir($bib))) {
            if ($fil != '.' && $fil != '..' && !ereg('^\..+', $fil)) {
                $fil_liste[$num] = "";
                $fil_liste[$num] .= "<td><img src=\"$bibliotek/$fil\" width=\"90\" height=\"90\" /><br /><a href=\"$bibliotek/$fil\">$fil</a></td>";
                $num++;
            }
        }

closedir($bib);

natcasesort( $fil_liste );

  if(is_array($fil_liste)) {
    $i=0;
    $liste = "<table width='100%' border='0'>";
    foreach ($fil_liste as $key => $fil) {
      $n = $i % 5;
      if ( $n == 0 && $i != 0 ) {
        $liste .= "  </tr>\n";
      }
      if ( $i == 0 || $n == 0 ) {
        $liste .= "  <tr>\n";
      }
      $liste .= "    $fil\n";
      $i++;
    }
    for ( $i = $n + 1; $i < 5; $i++ ) {
      $liste .= "    <td>&nbsp;</td>\n";
    }
    $liste .= "  </tr>\n</table>\n";
  } else {
    $liste = "<p>Ingen filer i dir</p>";
  }
    return "Klik på link for at se normal visning:" . $liste;
  } else {
    die("Kunne ikke åbne dir: " . $bibliotek);
  }
}
Avatar billede nyst Nybegynder
22. januar 2007 - 16:36 #17
den funker skisme.

hvor lækkert

kun 1 ting den er utrolig langsom

kan det være koden eller bare et tilfælde???

du smider et velfortjent svar, ik
Avatar billede sw_red_6 Nybegynder
23. januar 2007 - 08:59 #18
Det kan godt være koden der er langsom, men jeg kan ikke umiddelbart se nogen måde at optimerer den på..
Avatar billede nyst Nybegynder
23. januar 2007 - 09:31 #19
nej det er underligt
den går lidt i stå
men hvis jeg går en side tilbage og så frem
så tager den flere med
og sådan igen 2-3 gange
så er den der *S*

ved ike om du gider se på en mere
det er bare en oplistning af alle filerne med en slette-funktion
men den vil jeg også gerne have SORT
du skal nok få flere points hvis jeg kan finde ud af det*S*
Min kode er nu:

<?php
$dir = $_SERVER["DOCUMENT_ROOT"] ."/image/";

if(!isset($_GET['slet'])){
    if (is_dir($dir)) {
      if ($dh = opendir($dir)) {
          while (($file = readdir($dh)) !== false) {
                        if($file != "." && $file != ".." && substr($file, -4) != '.php') {
                            echo "<table border=0><tr>";
                            echo('<td width=200><a href="/image/'.htmlentities(urlencode($file)).'">'.htmlentities($file).'</a></td>');
                            echo "<td><a href=\"" . $_SERVER['PHP_SELF'] . "?slet=" . $file . "\">&#8594;&nbsp;delete</a></td>";
                            echo "</tr></table>";
}
          }
          closedir($dh);
      }
    }
}else{
    if(file_exists($dir . $_GET['slet'])){
        unlink($dir . rawurldecode($_GET['slet']));
        echo "Filen: " . $_GET['slet'] . " blev slettet. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Retur</a><br><br>";
    }else{
        echo "Filen: " . $_GET['slet'] . " findes ikke. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Retur</a><br><br>";
    }
}
?>

:-)
Avatar billede sw_red_6 Nybegynder
26. januar 2007 - 10:58 #20
Det nemmeste ville nok være at skifte dette:
if (is_dir($dir)) {
      if ($dh = opendir($dir)) {
          while (($file = readdir($dh)) !== false) {
                        if($file != "." && $file != ".." && substr($file, -4) != '.php') {
                            echo "<table border=0><tr>";
                            echo('<td width=200><a href="/image/'.htmlentities(urlencode($file)).'">'.htmlentities($file).'</a></td>');
                            echo "<td><a href=\"" . $_SERVER['PHP_SELF'] . "?slet=" . $file . "\">&#8594;&nbsp;delete</a></td>";
                            echo "</tr></table>";
}
          }
          closedir($dh);
      }
    }
ud med den anden funktion jeg har lavet og så ændre i koden så du får slet-linket med..
Avatar billede windcape Praktikant
26. januar 2007 - 11:01 #21
/me synes folk skulle bruge DirectoryIterator noget mere.
Avatar billede nyst Nybegynder
26. januar 2007 - 13:32 #22
hej sw

jeg har vist ikke forklaret mig godt nok.

Min slettefunktion ligger på seperat fil og skal ikke blandes ind i den anden.

Så min kode:

<?php
$dir = $_SERVER["DOCUMENT_ROOT"] ."/image/";

if(!isset($_GET['slet'])){
    if (is_dir($dir)) {
      if ($dh = opendir($dir)) {
          while (($file = readdir($dh)) !== false) {
                        if($file != "." && $file != ".." && substr($file, -4) != '.php') {
                            echo "<table border=0><tr>";
                            echo('<td width=200><a href="/image/'.htmlentities(urlencode($file)).'">'.htmlentities($file).'</a></td>');
                            echo "<td><a href=\"" . $_SERVER['PHP_SELF'] . "?slet=" . $file . "\">&#8594;&nbsp;delete</a></td>";
                            echo "</tr></table>";
}
          }
          closedir($dh);
      }
    }
}else{
    if(file_exists($dir . $_GET['slet'])){
        unlink($dir . rawurldecode($_GET['slet']));
        echo "Filen: " . $_GET['slet'] . " blev slettet. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Retur</a><br><br>";
    }else{
        echo "Filen: " . $_GET['slet'] . " findes ikke. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Retur</a><br><br>";
    }
}
?>

skal bare have indsat en kodestump så den lister i alfabetisk orden.

Jeg har prøvet at indsættet     natcasesort(  ); flere steder men den kommer frem med der skal være et array.

Kan man ikke bruger ORDER eller SORT et sted i koden så den er alfabetisk.

:-)
Avatar billede sw_red_6 Nybegynder
29. januar 2007 - 11:42 #23
det kan ikke umiddelbart sættes ind, har du prøvet at kigge på windcapes forslag ang. DirectoryIterator.. såfremt du har php5 altså og ikke har noget mod at bruge et, tilsyneladende, udokumenteret library...
Avatar billede nyst Nybegynder
29. januar 2007 - 11:54 #24
Hej,

nej anvender ikke php5.

Ok, smider du et svar så stiller jeg spørgsmålet igen...

og 1000 tak for hjælpen

:-)
Avatar billede sw_red_6 Nybegynder
29. januar 2007 - 11:56 #25
så får du et svar igen ;o)
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