Avatar billede dd-man Nybegynder
25. juni 2003 - 21:33 Der er 16 kommentarer og
1 løsning

Hvordan tæller jeg array?

Hejsa,

Som overskriften lyder, hvordan tæller jeg et array; tror det hedder 2d array.

Hvis jeg eksempelvis har:
<input type="file" name="filnavn[]">
<input type="file" name="filnavn[]">
<input type="file" name="filnavn[]">
<input type="file" name="filnavn[]">

og jeg poster til en anden side... så kan jeg jo ikke tælle med:
count($_FILES['filnavn']);

Jeg skal nemlig lave en slags løkke... som uploader alle de billeder man nu har valgt, derfor kræver det at jeg jo ved hvor mange billeder der er valgt til at blive uploaded.

Håber nogen kan hjælpe mig; tak.
Avatar billede ahv Nybegynder
25. juni 2003 - 21:37 #1
Du kan sikkert få noget ud af at se på dette, et script jeg har lavet der kan upload x antal billeder, i dette tilfælde 10 ->

<?php
if (isset($_POST['up'])) {
    $i = 0;
    while (list($name, $value) = each($_FILES['upfil']['name'])) {
        if ($value) {
            $dist = $_SERVER["DOCUMENT_ROOT"] ."/gallery/";
            $files = $value;
            $temparr = explode(".", $files);
            $temparr[count($temparr)-2] = time();
            $files = implode(".", $temparr);
            $rand = rand(1,100000);
            $files = "$rand$files";
            move_uploaded_file($_FILES['upfil']['tmp_name'][$i], $dist . $files);
        }
        $i++;
    }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<?php
for ($s = 0; 10 > $s; $s++) {
?>
Fil til upload
<input type="file" name="upfil[]"><br>
<?php
}
?>
<input type="submit" value="Upload" name="up">
</form>
Avatar billede dd-man Nybegynder
25. juni 2003 - 21:44 #2
tester lige... du var lidt hurtig der :)
Avatar billede dd-man Nybegynder
25. juni 2003 - 21:48 #3
hvordan er det lige det du har lavet med at filnavnene har en masse tal... hvad gør de og hvad er meningen med de lange tal?
Avatar billede ahv Nybegynder
25. juni 2003 - 21:49 #4
Tricket er at hvis to uplaoder på samme tid eller to filer har samme navn overskriver de ikke hinanden, de for et unikt navn, tiden siden 1970 i sekunder kunne egentlig være nok, men hvis uplaodningen går hurtigt eller to gør det på samme tid vil de overksirve derofr for den et random number på der lægger mellem 1 og 100.000
Avatar billede ahv Nybegynder
25. juni 2003 - 21:50 #5
Hvis du blot ønsker deres oprindligenavne gør du blot sådan her ->

<?php
if (isset($_POST['up'])) {
    $i = 0;
    while (list($name, $value) = each($_FILES['upfil']['name'])) {
        if ($value) {
            $dist = $_SERVER["DOCUMENT_ROOT"] ."/gallery/";
            $files = $value;
            move_uploaded_file($_FILES['upfil']['tmp_name'][$i], $dist . $files);
        }
        $i++;
    }
}
?>
Avatar billede dd-man Nybegynder
25. juni 2003 - 21:54 #6
Jeg vil gerne have lavet det lidt smartere (det virker nemlig, tak :)

Lidt med at jeg sætter billedernes sti ind i en tabel...
så der vil jeg gerne kunne have at navnet ville være noget som:

id_nr.fil-extention

eksempel 1 (3 billeder uploaded):
35_1.gif
35_2.gif
35_3.gif

eksempel 2 (et billede uploaded):
36_1.jpg

"id" er variablen:
$faasidsteID

og så ved jeg ikke lige hvordan man sætter "_nr" på også... det er det jeg lige vil spørge dig om, tak :)
Avatar billede ahv Nybegynder
25. juni 2003 - 21:57 #7
if (isset($_POST['up'])) {
    $i = 0;
    $nr = 1;
    while (list($name, $value) = each($_FILES['upfil']['name'])) {
        if ($value) {
            $dist = $_SERVER["DOCUMENT_ROOT"] ."/gallery/";
            $files = $value;
            $temparr = explode(".", $files);
            $temparr[count($temparr)-2] = "$faasidsteID_$nr";
            $files = implode(".", $temparr);
            move_uploaded_file($_FILES['upfil']['tmp_name'][$i], $dist . $files);
            $nr++;
        }
        $i++;
    }
}
Avatar billede dd-man Nybegynder
25. juni 2003 - 21:59 #8
Tak, det virker! :)

Hvis jeg nu fremover godt vil tælle hvor mange der er i sådan et array, hvis jeg vil vide det... er det så bare:

echo each($_FILES['navn'];

eller hva...? hvis jeg vil skrive for eksempel:

Du har $x_antal billeder tilføjet til det id...
Avatar billede ahv Nybegynder
25. juni 2003 - 22:04 #9
Hvis de hedder filnavn[]

$check = $_FILES['filnavn']['name'];
foreach ($check as $a) {
    if ($a) {
        $u++;
    }
}

$u indeholder så det antal man har valgt.
Avatar billede dd-man Nybegynder
25. juni 2003 - 22:07 #10
Okay, mange tak

Noget andet er lige at filerne der bliver uploaded hedder:
1.gif,2.gif

altså der står ikke <id>_nr.gif

Jeg har følgende kode nu:

if ($_FILES['billedeupload']) {
$i = 0;
$nr = 1;
while (list($name, $value) = each($_FILES['billedeupload']['name'])) {
    if ($value) {
    $dist = "images/upload/";
    $files = $value;
    $temparr = explode(".", $files);
    $temparr[count($temparr)-2] = "$faasidsteID_$nr";
    $files = implode(".", $temparr);
    move_uploaded_file($_FILES['billedeupload']['tmp_name'][$i], $dist . $files);
    $destination = $dist . $files;
    mysql_query("INSERT INTO tabel (annonceID,billede) VALUES ('$faasidsteID','$destination')") or die (mysql_error());
    $nr++;
}
$i++;
}            }
Avatar billede ahv Nybegynder
25. juni 2003 - 22:09 #11
Prøv ->

$temparr[count($temparr)-2] = $faasidsteID."_".$nr;

Ellers er du sikker på -> $faasidsteID indeholder noget?
Avatar billede dd-man Nybegynder
25. juni 2003 - 22:14 #12
yes sir, det virker! :)
Tak
Avatar billede ahv Nybegynder
25. juni 2003 - 22:14 #13
Det var så lidt.
Avatar billede dd-man Nybegynder
26. juni 2003 - 00:21 #14
Hvis jeg lige kan spørge om et ekstra spørgsmål... hvis du har tid/lyst til at svare det...

Hvordan gør jeg så det kun er grafikfiler og ikke zip-filer m.m. som må uploades?

Tak.
Avatar billede ahv Nybegynder
26. juni 2003 - 00:41 #15
if(eregi(".jpg$|.gif$|.jpeg$", $files)) {
Avatar billede ahv Nybegynder
26. juni 2003 - 00:42 #16
if ($_FILES['billedeupload']) {
$i = 0;
$nr = 1;
while (list($name, $value) = each($_FILES['billedeupload']['name'])) {
    if ($value) {
    $dist = "images/upload/";
    $files = $value;
    if(eregi(".jpg$|.gif$|.jpeg$", $files)) {
    $temparr = explode(".", $files);
    $temparr[count($temparr)-2] = $faasidsteID."_".$nr;
    $files = implode(".", $temparr);
    move_uploaded_file($_FILES['billedeupload']['tmp_name'][$i], $dist . $files);
    $destination = $dist . $files;
    mysql_query("INSERT INTO tabel (annonceID,billede) VALUES ('$faasidsteID','$destination')") or die (mysql_error());
    $nr++;
}
}
$i++;
}            }
Avatar billede dd-man Nybegynder
26. juni 2003 - 01:29 #17
Tak, det kører bare som smurt. :)
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