Avatar billede blach Nybegynder
27. oktober 2003 - 13:22 Der er 50 kommentarer og
1 løsning

Array og for each

Jeg har nogle filer i en mappe som er gemt i et array ($files). Disse vil jeg gerne have tjekket om de er i en database - dem som ikke er skal udkrives...
Hvad er der galt med denne kode???

--cut--
open();
foreach ($files as $value) {
    $foresp = mysql_query("SELECT fil_navn FROM tabel WHERE fil_navn='$value'");
    while($data = mysql_fetch_array($foresp))
    {
    if ($data[0] == $value) {
        echo $value ." er i databasen<BR>";
    } else {
        echo $value ." skal skrives i databasen<BR>";
    }
    if ($data[0] == '') {
        echo $value ." skal skrives i databasen<BR>";
    }
    }
}
close();
--cut--
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 13:24 #1
foreach ($files as $value) {
    $foresp = mysql_query("SELECT fil_navn FROM tabel WHERE fil_navn='$value'");
    if (mysql_num_rows($foresp)>0)
    {
        echo $value ." er i databasen<BR>";
    } else {
        echo $value ." skal skrives i databasen<BR>";
    }
  mysql_free_result($foresp);
}
Avatar billede iphase Nybegynder
27. oktober 2003 - 13:25 #2
Prøv at bruge fetch_row istedet for fetch_array, så burde det virke.. tror jeg nok? ;)
Avatar billede Slettet bruger
27. oktober 2003 - 13:32 #3
er det iøvrigt ikke en meget uigennemtænkt ide at lave en ny forespørgsel for hver eneste fil?

Så hellere lave en enkelt foresprøgsel, hive de filer ind i et array og matche dem op mod dit nuværende array.
Avatar billede iphase Nybegynder
27. oktober 2003 - 13:39 #4
Jeg vil give el_barto ret.. det er en meget rodet måde at gøre det på.
Avatar billede blach Nybegynder
27. oktober 2003 - 13:40 #5
iphase  --> prøver lige...
el_barto --> Jov, vil da gerne hvis I har en bedre ide, her er starten på scriptet og 200 point hvis du gider lave det: http://www.eksperten.dk/spm/418921
Avatar billede blach Nybegynder
27. oktober 2003 - 13:48 #6
erikjacobsen --> Det virker, pointene er dine...
iphase --> Det virker ikke...
Avatar billede blach Nybegynder
27. oktober 2003 - 13:49 #7
Men er der en smartere måde at gøre dette på? Kan tage lang tid hvis der er mange filer...
I kan hjælpe her: http://www.eksperten.dk/spm/418921
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 13:55 #8
Hvilket antal filer snakker vi om?
Avatar billede blach Nybegynder
27. oktober 2003 - 14:03 #9
Puha, kan være helt op til 800 i en mappe...
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 14:06 #10
Og hvis jeg forstår korrekt, så skal du sikre dig at alle filer i mappen
står i databasen, og at der ikke står flere i databasen end der er i mappen?
Avatar billede blach Nybegynder
27. oktober 2003 - 14:08 #11
Ja, den skal sikre at de filer som står i mappen også kommer i databasen.. Jeg skal nok selv lave det med at putte dem i databasen!

At der ikke står flere i databasen end der er filer til, har jeg et andet script til - så det behøves I ikke at lave!
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 14:12 #12
Det kan man da li'sågodt nu vi er i gang. Helt utestet:

if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $reg[$file]++;
        }
    }
    closedir($handle);
}
$foresp = mysql_query("SELECT fil_navn FROM tabel");
while($data = mysql_fetch_array($foresp))
  $reg[$data['fil_navn']--;
}
mysql_free_result($foresp);
foreach ($reg as $key=>$value) {
  if ($value==1) {
    print "$key skal tilføjes<br>\n";
  } elseif ($value==-1) {
    print "$key skal fjernes fra databasen<br>\n";
  } else {
    print "$key var der sørme<br>\n";
}
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 14:13 #13
Trykfejl:

  $reg[$data['fil_navn']]--;
Avatar billede blach Nybegynder
27. oktober 2003 - 15:06 #14
if ($handle = opendir('.')) { // der skal jeg vel sætte mappens navn ind?Parse error: parse error in /var/www/html/lektiecafe/reg_opgaver.php on line 14
dvs:
} //mellem $reg[$data['fil_navn']--; og mysql_free_result($foresp);
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 15:10 #15
Ja. Se min trykfejl.
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 15:11 #16
Ookay - en trykfejl mere. I scriptet retter du

while($data = mysql_fetch_array($foresp))
  $reg[$data['fil_navn']--;
}

til

while($data = mysql_fetch_array($foresp)) {
  $reg[$data['fil_navn']]--;
}
Avatar billede blach Nybegynder
27. oktober 2003 - 15:16 #17
Parse error: parse error in /var/www/html/lektiecafe/reg_opg.php on line 25
Avatar billede blach Nybegynder
27. oktober 2003 - 15:20 #18
Du bruger $value uden at have erklæret den?
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 15:20 #19
Smæk en
  }
på efter linien
print "$key var der sørme<br>\n";
Avatar billede blach Nybegynder
27. oktober 2003 - 15:28 #20
Hmm.. der er noget i vejen med det script, den udskriver bare en masse fra databasen nu...

Tror du ikke den kan virke det du hjalp med først? Jeg skal ikke bruge det ofte, bare når der bliver lagt en masse nye filer ind... Og synes sådan set at der er et godt script!
Avatar billede blach Nybegynder
27. oktober 2003 - 15:30 #21
Hvis jeg fjerner:
else {
    echo $key ."var der sørme<br>\n";
  }

Så virker det bedre - udskriver de filer jeg mangler at registrere...
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 15:32 #22
Det er da muligt den ikke virker - det er jo ikke testet.

Men hvordan ser scriptet ud nu, og hvad er det den udskriver?
Avatar billede blach Nybegynder
27. oktober 2003 - 15:35 #23
Når jeg flerner
else {
    print "$key var der sørme<br>\n";
  }

Virker det helt fint...
Avatar billede blach Nybegynder
27. oktober 2003 - 16:58 #24
Vil du ligge et svar erikjacobsen ???
Avatar billede blach Nybegynder
27. oktober 2003 - 17:37 #25
Og fortælle mig hvad jeg skal ændre i denne sætning???
if ($handle = opendir('mappe/$undermappe')) {
Avatar billede tipsen Nybegynder
27. oktober 2003 - 17:50 #26
if (false !== ($handle = opendir('mappe/$undermappe'))) {
Avatar billede blach Nybegynder
27. oktober 2003 - 18:26 #27
tipsen --> Ikke det, den godtager ikke opendir('mappe/$undermappe') fordi det er en variabel ($undermappe)...
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 18:27 #28
Ikke 'mappe/$undermappe' med "mappe/$undermappe"
men står der mappenavne i databasen skal du gøre lidt ekstra!
Avatar billede blach Nybegynder
27. oktober 2003 - 18:28 #29
opendir("../mappe/$undermappe")
virker det...
Avatar billede blach Nybegynder
27. oktober 2003 - 18:45 #30
erikjacobsen, hvorfor gemmer den intet i databasen? Den udskriver kun filerne på siden...


open();
if ($handle = opendir("../mappe/$undermappe")) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            $reg[$file]++;
        }
    }
    closedir($handle);
}
$foresp = mysql_query("SELECT fil_navn FROM table");
while($data = mysql_fetch_array($foresp)) {
  $reg[$data['fil_navn']]--;
}
mysql_free_result($foresp);
foreach ($reg as $key=>$value) {
  if ($value==1) {
    $insertSQL = "INSERT INTO table (fil_navn, mappe, dato, type, size) values ('$value', '$_POST[mappe]', '$dato', '$type', '$dato', '$type', '$size')";
    mysql_query($insertSQL);
    echo $key ." er blevet tilføjet i databasen!<br>\n";
  } elseif ($value==-1) {
    echo $key ." skal fjernes fra databasen<br>\n";
  }
}
close();
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 18:52 #31
"men står der mappenavne i databasen skal du gøre lidt ekstra!"
Avatar billede blach Nybegynder
27. oktober 2003 - 19:11 #32
Hvorfor det? De er jo gemt for sig selv under mappe, og jeg vælger selv mappen den skal gennemsøge vha. en post...

Men hvorfor gemmer den ikke dataene? Er det ikke muligt at gemme fil_navn, mappe osv?
Avatar billede blach Nybegynder
27. oktober 2003 - 19:14 #33
Jeg troede at man nemt kunne gemme f.eks. det fundne filnavn i databasen..
Dette er måske ikke tilfældet?
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 19:23 #34
Ok, så  -  du kan jo starte med
      mysql_query($insertSQL) or die(mysql_error());
Avatar billede blach Nybegynder
27. oktober 2003 - 19:47 #35
Fedt tricks :] Så virker det...
Men hvordan vil du tjekke filens størrelse og type? ($size, $type)
Avatar billede erikjacobsen Ekspert
27. oktober 2003 - 20:42 #36
http://php.net/filesize
og type kan du jo se i filnavnet
Avatar billede blach Nybegynder
27. oktober 2003 - 20:50 #37
Warning: stat failed for nyfi.php (errno=2 - Ingen sådan fil eller filkatalog) in /var/www/html/... on line 24
nyfi.php er blevet tilføjet i databasen!


skriver den hvis jeg putter
    $size = filesize($key);
ind efter
  if ($value==1) {
Avatar billede erikjacobsen Ekspert
28. oktober 2003 - 07:12 #38
Så ligger filen vel ikke der?
Avatar billede blach Nybegynder
28. oktober 2003 - 10:24 #39
Jov filen ligger der, den fejler bare når jeg putter det
    $size = filesize($key);
ind i koden...
Avatar billede erikjacobsen Ekspert
28. oktober 2003 - 10:52 #40
nyfi.php ligger der vel ikke, i det katalog dit script ligger i.
Du skal sørge for de rigtige stier.
Avatar billede blach Nybegynder
28. oktober 2003 - 11:39 #41
Jov filen ligger der, og scriptet sætter også ind i databasen og gemmer tilmed også størrelsen, men udskriver stadig en fejlmeddelse
arning: stat failed for nyfil.txt (errno=2 - Ingen sådan fil eller filkatalog) in /var/www/html/lektiecafe/admin/undersider/reg_opg.php on line 24
nyfil.txt er blevet tilføjet i databasen!

Dette gør den kun når jeg tilføjer nedenstående til scriptet
$size = filesize($key);
Avatar billede blach Nybegynder
28. oktober 2003 - 11:40 #42
erikjacobsen --> Jeg har lavet så man selv vælger et katalog som skal registreres:
if ($handle = opendir("../mappe/$undermappe")) {
Avatar billede blach Nybegynder
28. oktober 2003 - 11:42 #43
Undskyld, den gemmer ikke filstørrelsen..

Kan det ikke lade sig gøre at gemme den filstørrelse?
Avatar billede erikjacobsen Ekspert
28. oktober 2003 - 12:25 #44
Nej, men så ligger den der jo ikke.

Du skal - formentlig:

$size = filesize("../mappe/$undermappe/$key");
Avatar billede blach Nybegynder
28. oktober 2003 - 18:28 #45
Ja det var meget bedre :]
Tak for hjælpen!
Avatar billede blach Nybegynder
30. oktober 2003 - 11:50 #46
erikjacobsen --> vil du ligge et svar?
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 11:55 #47
ok så
Avatar billede blach Nybegynder
05. december 2003 - 12:35 #48
erikjacobsen -->
Avatar billede blach Nybegynder
05. december 2003 - 12:36 #49
Vil du ikke hjælpe med at udskrive type også?
Jeg har jo
    $size = filesize("../xxx/$mappe/$key");

Men hvordan udskriver jeg type? Dette virker ikke:
    $type = $_FILES['../xxx/$mappe/$key']['type'];
Avatar billede blach Nybegynder
05. december 2003 - 12:37 #50
Altså $type for word er eks.:
application/msword
Avatar billede erikjacobsen Ekspert
05. december 2003 - 17:41 #51
Du skal bare bruge det navn du har givet feltet i formen.

(Og hvis det er sikkerhedsmæssigt vigtigt at vide at filtypen er korrekt,
kan du desværre ikke stole på denne oplysning, da enhver hacker kan skifte
den ud. F.eks uploade en .php fil som application/msword)
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