Avatar billede blach Nybegynder
17. juli 2004 - 17:31 Der er 16 kommentarer og
2 løsninger

Upload-script skal omdøbe filer

Mit upload script virker glimrende, men jeg kunne godt tænke mig, at det gav hver fil et unikt id.. altså et nummer som ikke gentages. Også gerne brugerens nummer ($bruger_id)
Min kode er nedenfor:

-- cut --

<?php
if ($_POST['submit']) {
$bruger_id = "1";

//stien, hvortil filer skal uploades, her et subdir til roden af domænet
$dist = "/home/web/uploadtest/";

//FLERE FILER PÅ SAMME TID

if (isset($_FILES["upfile"])) {

echo"&Oslash;nskede filer til upload:<p>\n";

$antal = 0;
$filetyper = array("image/gif", "image/jpeg", "image/pjpeg", "image/png");
$maxsize = "102400";

//Find antallet af filer til upload med en for-løkke
for($i = 0; $i < count($_FILES["upfile"]["name"]); $i++) {

    if ($_FILES["upfile"]["name"][$i] !="") {
    //Læg en til $antal for hver fil.

    $antal++;
    if (in_array($_FILES['upfile']['type'][$i], $filetyper) && $_FILES['upfile']['size'][$i] < $maxsize) {
        if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$i])) {

    move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i]);

    //til brug for info om filtyper
    $str1 = $_FILES["upfile"]["name"][$i];
    $str2 = $_FILES["upfile"]["size"][$i];
    $str3 = $_FILES["upfile"]["type"][$i];

    //gemmer oplysninger i databasen
    open();
    $insertSQL = "INSERT INTO filer (fil_navn, type, size) values ('$str1', '$str3', '$str2')";
    mysql_query($insertSQL);
    close();

    echo $str1 ." er blevet uploadet!<BR>";

        }else{

    echo"Upload til serveren skete ikke!";

            }
                } else {
                    echo"Filtypen ikke tilladt til upload eller den er for stor...";
                }
        }
    }

if($antal < 1) { //Hvis der ingen filer er valgt
      echo"Husk at v&aelig;lg en eller flere filer til upload!";
    }else{

    }

}

} else {

echo '
<form enctype="multipart/form-data" METHOD=post action="'.$php_self.'">
<DIV CLASS="normal">V&aelig;lg en eller flere opgaver til upload:<BR>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br><p>
<input type="submit" name="submit" value="Upload" class="button"></center><p>
</form>';

}
?>
Avatar billede basicq Nybegynder
17. juli 2004 - 19:13 #1
Måske du kan bruger det her...

move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i]);

$ext = explode(".", $_FILES["upfile"]["name"]);

$newName = $dist . md5(time()) . $bruger_id . "." . $ext[1];

rename($dist . $_FILES["upfile"]["name"], $newName);
Avatar billede basicq Nybegynder
17. juli 2004 - 19:14 #2
Sorry

$ext = explode(".", $_FILES["upfile"]["name"][]$i);

$newName = $dist . md5(time()) . $bruger_id . "." . $ext[1];

rename($dist . $_FILES["upfile"]["name"][$i], $newName);
Avatar billede basicq Nybegynder
17. juli 2004 - 19:15 #3
aaa så smuttede $i skulle jo være
$ext = explode(".", $_FILES["upfile"]["name"][$i]);
Avatar billede blach Nybegynder
17. juli 2004 - 19:27 #4
Hvor skal jeg indsætte det i scriptet?
Avatar billede basicq Nybegynder
17. juli 2004 - 19:46 #5
<?php
if ($_POST['submit']) {
$bruger_id = "1";

//stien, hvortil filer skal uploades, her et subdir til roden af domænet
$dist = "/home/web/uploadtest/";

//FLERE FILER PÅ SAMME TID

if (isset($_FILES["upfile"])) {

echo"&Oslash;nskede filer til upload:<p>\n";

$antal = 0;
$filetyper = array("image/gif", "image/jpeg", "image/pjpeg", "image/png");
$maxsize = "102400";

//Find antallet af filer til upload med en for-løkke
for($i = 0; $i < count($_FILES["upfile"]["name"]); $i++) {

    if ($_FILES["upfile"]["name"][$i] !="") {
    //Læg en til $antal for hver fil.

    $antal++;
    if (in_array($_FILES['upfile']['type'][$i], $filetyper) && $_FILES['upfile']['size'][$i] < $maxsize) {
        if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$i])) {

    move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i]);
$ext = explode(".", $_FILES["upfile"]["name"][$i]);

$newName = $dist . md5(time()) . $bruger_id . "." . $ext[1];

rename($dist . $_FILES["upfile"]["name"][$i], $newName);

    //til brug for info om filtyper
    $str1 = $_FILES["upfile"]["name"][$i];
    $str2 = $_FILES["upfile"]["size"][$i];
    $str3 = $_FILES["upfile"]["type"][$i];

    //gemmer oplysninger i databasen
    open();
    $insertSQL = "INSERT INTO filer (fil_navn, type, size) values ('$str1', '$str3', '$str2')";
    mysql_query($insertSQL);
    close();

    echo $str1 ." er blevet uploadet!<BR>";

        }else{

    echo"Upload til serveren skete ikke!";

            }
                } else {
                    echo"Filtypen ikke tilladt til upload eller den er for stor...";
                }
        }
    }

if($antal < 1) { //Hvis der ingen filer er valgt
      echo"Husk at v&aelig;lg en eller flere filer til upload!";
    }else{

    }

}

} else {

echo '
<form enctype="multipart/form-data" METHOD=post action="'.$php_self.'">
<DIV CLASS="normal">V&aelig;lg en eller flere opgaver til upload:<BR>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br><p>
<input type="submit" name="submit" value="Upload" class="button"></center><p>
</form>';

}
?>
Avatar billede blach Nybegynder
17. juli 2004 - 19:57 #6
Og så får den bare et navn efter tidspunktet den er uploadet?
Avatar billede basicq Nybegynder
17. juli 2004 - 20:05 #7
ja det kan man godt sige prøv se på php.net og søg efter time.

Men prøv det her istedet så skriver du også det rigtige ind i din db.

<?php
if ($_POST['submit']) {
$bruger_id = "1";

//stien, hvortil filer skal uploades, her et subdir til roden af domænet
$dist = "/home/web/uploadtest/";

//FLERE FILER PÅ SAMME TID

if (isset($_FILES["upfile"])) {

echo"&Oslash;nskede filer til upload:<p>\n";

$antal = 0;
$filetyper = array("image/gif", "image/jpeg", "image/pjpeg", "image/png");
$maxsize = "102400";

//Find antallet af filer til upload med en for-løkke
for($i = 0; $i < count($_FILES["upfile"]["name"]); $i++) {

    if ($_FILES["upfile"]["name"][$i] !="") {
    //Læg en til $antal for hver fil.

    $antal++;
    if (in_array($_FILES['upfile']['type'][$i], $filetyper) && $_FILES['upfile']['size'][$i] < $maxsize) {
        if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$i])) {

    move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i]);
    // adskiller filnavn fra filtype
    $ext = explode(".", $_FILES["upfile"]["name"][$i]);
    $newName = mt_rand(time(), 1). "_" . $bruger_id . "." . $ext[1];
    rename($dist . $_FILES["upfile"]["name"][$i], $dist."".$newName);

    //til brug for info om filtyper
    $str1 = $newName;
    $str2 = $_FILES["upfile"]["size"][$i];
    $str3 = $_FILES["upfile"]["type"][$i];

    echo $str1." - $i<br />";
    //gemmer oplysninger i databasen
    open();
    $insertSQL = "INSERT INTO filer (fil_navn, type, size) values ('$str1', '$str3', '$str2')";
    mysql_query($insertSQL);
    close();

    echo $str1 ." er blevet uploadet!<BR>";

        }else{

    echo"Upload til serveren skete ikke!";

            }
                } else {
                    echo"Filtypen ikke tilladt til upload eller den er for stor...";
                }
        }
    }

if($antal < 1) { //Hvis der ingen filer er valgt
      echo"Husk at v&aelig;lg en eller flere filer til upload!";
    }else{

    }

}

} else {

echo '
<form enctype="multipart/form-data" METHOD=post action="'.$php_self.'">
<DIV CLASS="normal">V&aelig;lg en eller flere opgaver til upload:<BR>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br><p>
<input type="submit" name="submit" value="Upload" class="button"></center><p>
</form>';

}
?>
Avatar billede blach Nybegynder
17. juli 2004 - 20:09 #8
Hvad sker der så hvis man uploader 2. gang? fortsætter den så bare i tal-rækken?
Avatar billede basicq Nybegynder
17. juli 2004 - 20:18 #9
Hvis du vil være sikker på at filnavnet bliver unikt så brug den her.

$newName = md5(uniqid(rand(), true)). "_" . $bruger_id . "." . $ext[1];
Avatar billede blach Nybegynder
17. juli 2004 - 20:22 #10
OK.. jeg tester det lige imorgen...
Avatar billede basicq Nybegynder
17. juli 2004 - 20:22 #11
:-)
Avatar billede blach Nybegynder
19. juli 2004 - 12:50 #12
OK, det ser ud til at virke glimrende.. Men hvorfor skriver den
xxx_1.jpg - 0
xxx_1.jpg er blevet uploadet!

Hvad skal det xxx_1.jpg - 0 til for?
Avatar billede basicq Nybegynder
19. juli 2004 - 16:35 #13
Nu er xxx_1.jpg - 0 og resten af xxx_1.jpg væk ellers skal du bare rette eller slette alle steder der står echo"Noget text";

<?php
if ($_POST['submit']) {
$bruger_id = "1";

//stien, hvortil filer skal uploades, her et subdir til roden af domænet
$dist = "/home/web/uploadtest/";

//FLERE FILER PÅ SAMME TID

if (isset($_FILES["upfile"])) {

echo"&Oslash;nskede filer til upload:<p>\n";

$antal = 0;
$filetyper = array("image/gif", "image/jpeg", "image/pjpeg", "image/png");
$maxsize = "102400";

//Find antallet af filer til upload med en for-løkke
for($i = 0; $i < count($_FILES["upfile"]["name"]); $i++) {

    if ($_FILES["upfile"]["name"][$i] !="") {
    //Læg en til $antal for hver fil.

    $antal++;
    if (in_array($_FILES['upfile']['type'][$i], $filetyper) && $_FILES['upfile']['size'][$i] < $maxsize) {
        if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$i])) {

    move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i]);
    // adskiller filnavn fra filtype
    $ext = explode(".", $_FILES["upfile"]["name"][$i]);
    $newName = mt_rand(time(), 1). "_" . $bruger_id . "." . $ext[1];
    rename($dist . $_FILES["upfile"]["name"][$i], $dist."".$newName);

    //til brug for info om filtyper
    $str1 = $newName;
    $str2 = $_FILES["upfile"]["size"][$i];
    $str3 = $_FILES["upfile"]["type"][$i];

    //gemmer oplysninger i databasen
    open();
    $insertSQL = "INSERT INTO filer (fil_navn, type, size) values ('$str1', '$str3', '$str2')";
    mysql_query($insertSQL);
    close();

    echo "Filen er blevet uploadet!<BR>";

        }else{

    echo"Upload til serveren skete ikke!";

            }
                } else {
                    echo"Filtypen ikke tilladt til upload eller den er for stor...";
                }
        }
    }

if($antal < 1) { //Hvis der ingen filer er valgt
      echo"Husk at v&aelig;lg en eller flere filer til upload!";
    }else{

    }

}

} else {

echo '
<form enctype="multipart/form-data" METHOD=post action="'.$php_self.'">
<DIV CLASS="normal">V&aelig;lg en eller flere opgaver til upload:<BR>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br>
<input name="upfile[]" type="file" size="48" class="button"><br><p>
<input type="submit" name="submit" value="Upload" class="button"></center><p>
</form>';

}
?>
Avatar billede blach Nybegynder
19. juli 2004 - 19:19 #14
Tak...
Avatar billede basicq Nybegynder
19. juli 2004 - 22:52 #15
Velbekomme :-) og så syntes jeg nok at 150 point lige er i overkanten, stik mig 30 nu når du er så gavmild.
Avatar billede blach Nybegynder
20. juli 2004 - 09:34 #16
ok, du får halvdelen så :]
Avatar billede blach Nybegynder
20. juli 2004 - 09:34 #17
:]
Avatar billede basicq Nybegynder
20. juli 2004 - 09:50 #18
Prøv at se dig lidt om på eksperten og se hvad de forskellige giver af point, det er alt for mange point at give for dit problem. Men jeg takker da mange gange for de 75 point, selv om jeg nu syntes det lige er i overkanten.

Håber du får en god sommer.

:-)
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