Avatar billede playr Nybegynder
16. marts 2007 - 09:18 Der er 16 kommentarer

Move uploaded file? Ændre navn?

Hej.

Hej. Efter jeg har oploadet en fil så gemmer den et id med $_GET. Koden ser således ud:

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

Så den flytter filen over til mappen som er angivet i $dist.

Hvordan kan jeg gøre således at jeg selv bestemmer navnet på filen, således den får det der er get i $_GET.

Det her virker ikke?

$getName= $_GET[id];
    move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist."".$getName);
Avatar billede showsource Seniormester
16. marts 2007 - 10:14 #1
$_FILES["upfile"]["tmp_name"][$i] => Det er vel flere filer?
Så kan du jo ikke bare bruge $_GET["id"], så overskrives navnet jo.

Gemmer du i DB?
Avatar billede playr Nybegynder
16. marts 2007 - 10:42 #2
Ja jeg gemmer i DB.

Nej der er kun 1 fil. Har bare brugt den samme kode fra flere filer af. Fungere fint nok?

Ja jeg gemmer i DB.

Hvor skal jeg skrive det $_GET["id"] ind henne ?
Avatar billede showsource Seniormester
16. marts 2007 - 11:10 #3
Hvis du har et felt i DB som er autoincrement, primary ( typisk kaldet "id" ) kan du jo bruge det som navn i stedet.

mysql_query("INSERT INTO tabel ...........
efter din insert, kan du få sidst indsatte id med:

$idref = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM tabel"), 0);

Så mangler du blot filtypen.
Den kan du få med:
$fileinfo = pathinfo($_FILES["upfile"]["name"]);
$filtype = $fileinfo["extension"];

$savename = $idref .".". $filtype;
Avatar billede playr Nybegynder
16. marts 2007 - 11:12 #4
Det med at indsætte i databasen er ikke noget problem.

Det er mere det med at overwrite billedet.

Forstår godt din kode (sådan da), men ved ikke helt hvordan den skal sættes sammen med
move_uploaded_file($_FILES["upfile"]["tmp_name"], $dist . $_FILES["upfile"]["name"]);
Avatar billede showsource Seniormester
16. marts 2007 - 11:19 #5
move_uploaded_file($_FILES["upfile"]["tmp_name"], $dist . $savename);

Du kan også lade $idref være:
$idref = intval($_GET["id"]);

men er det kun billeder du uploader?
Avatar billede showsource Seniormester
16. marts 2007 - 11:19 #6
Og har du det autoincrement felt i din tabel?
Avatar billede playr Nybegynder
16. marts 2007 - 11:25 #7
Okay prøver mig lige frem.

Ja der er autoicrement med i feltet, men kun på ID det her er jo "billede" feltet så det bliver der jo ikke rodet med.

Ja det er kun billeder der skal uploades
Avatar billede showsource Seniormester
16. marts 2007 - 11:40 #8
Så ville jeg bruge getimagesize() til at tjekke for upload og navngivning.

// filtyper tilladt for upload
// de forskellige "keys" ( 1 2 3 4 ) referer til hvad getimagesize() returnerer
$filtyper = array(1 => "gif", 2 => "jpg", 3 => "png", 4 => "swf");

if(is_uploaded_file($_FILES["upfile"]["tmp_name"])) {

    if(false == ($str = getimagesize($_FILES["upfile"]["tmp_name"]))) {
    echo"Valgte fil til upload, er ikke en billedfil!";
    exit;
    }

    if(!isset($filtyper[$str[2]])) { // findes "key" i arrayet $filtyper?
    echo"Filtypen er ikke tilladt for upload!<br />";
    echo"Tilladte typer: ". implode(", ", $filtyper);
    exit;
    }

    // lav din insert
    mysql_query("INSERT INTO tabel ...........

    // får sidst indsatte id
    $idref = mysql_result(mysql_query("SELECT LAST_INSERT_ID() FROM tabel"), 0);

    $savename = $idref .".". $filtyper[$str[2]];

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

}
Avatar billede playr Nybegynder
16. marts 2007 - 11:55 #9
Undskyld, den hedder $_POST[id] og ikke $_GET[]

Den behøver ikke opdateret databasen, den skal jo bare opdatere billedet.
Den henter ID´et fra tidligere side hvor den gemmer som $_POST

Har prøvet at lave:
$idref = $_POST[id]

Men det gider den ikke :S
Avatar billede playr Nybegynder
16. marts 2007 - 12:02 #10
Den uploader billedet nu :)

men den skriver det sådan her:

Billedfilen.jpg.jpg

Hvorfor det ?
Avatar billede showsource Seniormester
16. marts 2007 - 12:26 #11
du må gerne vise din kode
Avatar billede playr Nybegynder
16. marts 2007 - 12:49 #12
Ja undskyld, ville være meget god idé :-)


$filtyper = array(1 => "gif", 2 => "jpg", 3 => "png", 4 => "swf");

if(is_uploaded_file($_FILES["upfile"]["tmp_name"])) {

    if(false == ($str = getimagesize($_FILES["upfile"]["tmp_name"]))) {
    echo"Valgte fil til upload, er ikke en billedfil!";
    exit;
    }

    if(!isset($filtyper[$str[2]])) { // findes "key" i arrayet $filtyper?
    echo"Filtypen er ikke tilladt for upload!<br />";
    echo"Tilladte typer: ". implode(", ", $filtyper);
    exit;
    }

    $idref = "$_POST[nytBillede]";

    $savename = $idref .".". $filtyper[$str[2]];

    move_uploaded_file($_FILES["upfile"]["tmp_name"], $dist . $savename);
   
    echo" <img src=../billeder/$savename>";
   

}
}
Avatar billede showsource Seniormester
16. marts 2007 - 12:52 #13
Navn før filtype bestemmes jo af $_POST[nytBillede]

Men hvad er det præcis du gerne vil?
Avatar billede playr Nybegynder
16. marts 2007 - 14:12 #14
Den henter jo filnavnet gemmen $_POST[nytBillede]
Når man uploader et nyt vil jeg bare gerne have den sletter det gamle og sætter det nye ind med samme filnavn. Så den nærmest erstatter det.

Der behøves ingen opdateringer i databasen da det jo er samme billednavn, bare et nyt billede på serveren
Avatar billede showsource Seniormester
17. marts 2007 - 12:21 #15
Hvis du uploader en fil, ( eller kopiere en fil ), med et navn som allerede findes overskrives den gamle fil.

Om du så har brug for et tjek på om det er det rigtige navn som postes, ved jeg jo ikke.

move_uploaded_file($_FILES["upfile"]["tmp_name"], $dist . $_POST["nytBillede"]);
Avatar billede playr Nybegynder
19. marts 2007 - 11:42 #16
Hmm det virker ikke.

Hvis jeg bare skrive:

echo $_POST[nytbillede];

Så skriver den også navnet på billedet ud, men den oploader ikke noget ? :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