Avatar billede langkiller Nybegynder
30. november 2011 - 16:51 Der er 7 kommentarer og
1 løsning

Warning: Invalid argument supplied for foreach() in

har en funktion der skal tælle hvor mange billeder der findes i en mappe og vise dem hvis der er mere end 1, ellers udskriver den . Det virkede da kørte den på localhost, men ikke da jeg lagde den ud på min server.. Koden ser sådan her ud:

$dir = "reunion_billeder/".$reunion["id"].$reunion["sted"].date("Y", $reunion["timestamp"])."/";
                    $images = glob($dir . "*");       
                    $antal = count($images);
               
                    if ($antal < 1)
                    {
                        print "
                        <div style=\"height: 3px;\"></div>
                        <i>Der er ikke blevet tilføjet nogen billeder til denne reunion</i>
                        <div style=\"height: 3px;\"></div>";
                        }
                        else
                        {
                        print "   
                        <div style=\"height: 3px;\"></div>";
                                                                           
                        $counter = 1;
                       
                        foreach($images as $image)
                        {
                            if ($counter < 40)
                            {   
                            print "<img src=\"$image\" width=\"40\" height=\"40\">&nbsp;";
                           
                                $break = $counter / 20;   
                                if (is_int($break)) { print "<br>"; }
                                $counter++;   
                            }
                        }
                                                                               
                        print "
                        <div style=\"height: 7px;\"></div><a href=\"vis.php?action=showpics&dir=$dir\" class=\"n\"
                        onClick=\"return popup(this, '')\">Se alle billederne fra denne reunion</a>";
                                                                       
                    }       




Prøvede at skrive " print $antal; " og fik resultatet 1 selvom der ikke var nogen filer i mappen.. Den tror altså der findes 1 fil i mappen selvom den er tom hvilket selvfølgelig forvirrer foreach funktionen..
Den er altså gal omkring:

$images = glob($dir . "*");       
$antal = count($images);
               
if ($antal < 1)
{
Avatar billede acore Ekspert
30. november 2011 - 16:57 #1
Prøv at skrive $images ud, så du kan sammenligne det den finder med dine forventninger. Det kunne jo være, at en af de filer, den fandt, var ".." (altså et niveau op) eller ".".
Avatar billede langkiller Nybegynder
30. november 2011 - 17:34 #2
.. gjorde ingen forskel :d
Avatar billede langkiller Nybegynder
30. november 2011 - 17:50 #3
det virker fint på localhost , men ikke på nettet. det er det jeg ikke helt forstår :s
Avatar billede acore Ekspert
30. november 2011 - 18:52 #4
Det gjorde forhåbentlig den forskel, at du kan se hvilke filnavne $images indeholder. Du siger, at der er 1 fil - check navnet og forhold dig til det i forhold til #1.

Når der er noget, man ikke forstår, må man undersøge det nærmere.
Avatar billede langkiller Nybegynder
30. november 2011 - 19:00 #5
nej du har læst forkert, siger netop at der IKKE findes nogle filer i mappen, men at når jeg udskriver $antal tror den at der er 1 fil!

Derfor gør det jo ingen forskel når jeg skriver $images ud som du siger, da der IKKE er nogle filer i den pågældende mappe
Avatar billede langkiller Nybegynder
30. november 2011 - 19:59 #6
problemet er løst, men ellers tak for hjælpen acore. smid et svar hvis du vil have points

glob() giver false hvis der ikke findes nogle billeder i mappen og count(false) returnerer "1".. så derfor er løsningen:

if ($images == false) { $antal = 0; }
else { $antal = count(glob($dir . "*")); }
Avatar billede acore Ekspert
30. november 2011 - 21:19 #7
Så, hvis/når du havde skrevet $images ud, og set, at det ikke var et array, men FALSE, så var du på sporet.

Men skidt med det - godt du fik det løst, og behold bare dine point, hvis du ikke synes godt om rådet - som det var - det var ikke en løsning.
Avatar billede langkiller Nybegynder
30. november 2011 - 21:38 #8
ja det er rigtig nok, det var en semi-løsning du kom med :)

okay så smider bare selv et svar
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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