Avatar billede raan Nybegynder
29. maj 2007 - 16:15 Der er 11 kommentarer og
1 løsning

upload fil

Jeg har denne uplaod fil, men hvordan gør jeg så jeg selv kan bestemme hvad filen skal hedde når den bliver uploadet? :)
. altså fx. img_1. img_2 osv ..

<?php

function upload_fil($fil, $max_stoerrelse = 100, $bibliotek = 'default', $filtyper_tilladt = 'default')
{
    if ($bibliotek == 'default') {
        $bibliotek = 'privat/upload';
    }

    if ($filtyper_tilladt == 'default') {
        $filtyper_tilladt = array('image/bmp', 'image/jpeg', 'image/pjpeg', 'image/tiff', 'image/png', 'image/gif', 'application/pdf', 'application/zip', 'application/arj', 'application/x-zip-compressed', 'application/octet-stream');
    }

    if ($fil['size'] > 0) {
        $filnavn = strtolower(ereg_replace(' ', '_', $fil['name']));
        $fil_sti = $bibliotek . '/' . $filnavn;
        $fra = $fil['tmp_name'];
        $fil_stoerrelse = filesize($fra)/1024;
        $filtype = $fil['type'];
        $fejl = 0;

        if (!in_array($filtype, $filtyper_tilladt)) {
            echo "<p>Filtypen '$filtype' er ikke tilladt. De tilladte filtyper er '" . implode("', '", $filtyper_tilladt) . "'. Filen '$filnavn' kan derfor ikke uploades!</p>";
            $fejl = 1;
        }

        if ($fil_stoerrelse > $max_stoerrelse) {
            echo "<p>Filen '$filnavn' er for stor og kan ikke uploades. Den fylder " . ceil($fil_stoerrelse) . " kb og der kan maximalt uploades $max_stoerrelse kb!</p>";
            $fejl = 1;
        }

        if ($fejl == 0) {
            if (file_exists($_SERVER['DOCUMENT_ROOT'] . $fil_sti)) {
                $pos = strrpos($filnavn, '.');
                $foerpos = substr($filnavn, 0, $pos);
                $efterpos = substr($filnavn, $pos + 1, strlen($filnavn) - ($pos + 1));
                $i = 2;

                echo "<p>Filen '$filnavn' eksisterer allerede i '$bibliotek' og filen omdøbes derfor til ";

                while (file_exists($_SERVER['DOCUMENT_ROOT'] . $fil_sti)) {
                    $filnavn = $foerpos . '(' . $i . ').' . $efterpos;
                    $fil_sti = $bibliotek . '/' . $filnavn;
                    $i++;
                }

                echo "'$filnavn'</p>";
            }

            $til = $_SERVER['DOCUMENT_ROOT'] . $fil_sti;

            if (move_uploaded_file($fra, $til)) {
                mysql_connect("*", "*", "*");
            mysql_select_db("*");
                mysql_query("INSERT INTO ip_upload (filnavn, ip) VALUES ('".$_FILES['userfile']['name']."','".$_SERVER['REMOTE_ADDR']."')") or die(mysql_error());
                echo "<p>Filen '$filnavn' er uploadet!</p>";
                return $fil_sti;
            } else {
                echo "<p>Desværre, filen '$filnavn' kunne ikke uploades!</p>";
                return false;
            }
        }
    } else {
        echo '<p>Der er ikke vedhæftet nogen fil!</p>';
    }
}


if (isset($_POST['send']))
{
$userfile = $_FILES['userfile'];
$bibliotek = $_POST['bibliotek'];
upload_fil($userfile, 10000, $bibliotek);
}
else
{
?>

<form enctype="multipart/form-data" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
Vælg fil<br />
<input type="file" name="userfile"><br />
Vælg mappe:<br />
<select name="bibliotek">
    <option value ="/upload/upload/hjemmeside">Hjemmeside</option>
</select><br />
<input type="submit" name="send" value="Upload Fil">
</form>

<?php
}
}
?>
Avatar billede w13 Novice
29. maj 2007 - 16:21 #1
Er det ikke her:
    if ($fil['size'] > 0) {
        $filnavn = strtolower(ereg_replace(' ', '_', $fil['name']));

Dvs. linje 15 i din kode, hvor du definerer $filnavn. Her erstattes lige nu mellemrum med underscore og alle bogstaver gøres små.
Avatar billede raan Nybegynder
29. maj 2007 - 16:25 #2
jep, men hvordan gør jeg så den siger img_1, img_2 osv ?
Avatar billede w13 Novice
29. maj 2007 - 16:29 #3
Ja, så skal du jo have et eller andet sted, hvor den tæller. Jeg har før gjort det med en tekst-fil, dvs. en fil, som jeg kaldte "count.txt", der så blev lagt 1 til ved hver upload. Men PHP er ikke lige mit felt. Prøv at søge en kode, som tæller i en tekstfil.
Avatar billede raan Nybegynder
29. maj 2007 - 16:32 #4
det burde også kunne gøres uden.
- andre der har en idé?
Avatar billede w13 Novice
29. maj 2007 - 16:34 #5
Et eller andet sted skal du jo have tallet gemt. Jeg går ikke ud fra, at du kun uploader alle billeder på én gang i træk, så du kunne nøjes med en session. Alternativt skal du gemme i en database, hvilket ville fylde meget mere, eller lave en kode, som henter det nyeste billede (eller billedet med det højeste tal bag på filnavnet) og som så henter dette tal, så du kan lægge 1 til.
Avatar billede raan Nybegynder
29. maj 2007 - 16:39 #6
Ja, altså den finder det sidste billede også lægge et til der .. men hvordan?
Avatar billede webweaver Praktikant
30. maj 2007 - 20:34 #7
Altså man kan jo gå ind med PHP og se hvad der ligger i en mappe. Og man kan også udskrive det. Så må man vel også kunne tælle antal af filer i den?

Mvh. Lasse Jensen
Avatar billede w13 Novice
30. maj 2007 - 20:54 #8
Men hvad så, hvis et billede er blevet slettet? Så vil der være ét for lidt. På den måde, vil man prøve at kalde det uploadede billede det samme som det nyeste.
Avatar billede raan Nybegynder
31. maj 2007 - 01:55 #9
Det kunne man, jeg ved ikke helt hvad den bedste løsning er ..
Avatar billede windcape Praktikant
31. maj 2007 - 02:07 #10
jeg ville analysere de sidste filnavn :) er ikke synderligt komplext.
Avatar billede raan Nybegynder
31. maj 2007 - 10:37 #11
vil du hjælpe lidt med det ? :)
Avatar billede raan Nybegynder
11. juni 2007 - 18:25 #12
lukker! ;s
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