Avatar billede sigmadk Nybegynder
04. oktober 2004 - 16:10 Der er 23 kommentarer og
1 løsning

Problemer med filupload?

Hej,

Jeg har problemer med dette filupload-script!

Filen skal ligge i mappen "images", og den kommer i en streng ved navn $fil fra en form.

<?

//------------------------------------------------------
// Kontrol af login-oplysninger
//*****************************

    $res = mysql_query("SELECT id FROM login WHERE bruger='$user' AND password='$pass'");
                             
    if ((mysql_num_rows($res) == 1)) {


//------------------------------------------------------
// Upload af baggrundsbillede
//***************************

    if($fil){
   

        //Her skal filen flyttes fra
        $fra    = $_FILES['fil']['tmp_name'];
       
        //Hvilken type fil arbejder vi med?
        $ext    = strtolower(end(explode(".", $_FILES['fil']['name'])));
       
        //Hvis filen er et jpg, jpeg eller gif billede
        if($ext == "jpg" || $ext == "jpeg" || $ext == "gif"){
       
        $tid        = time();
       
        //Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
        $nytNavn = $tid . ”_” . rand(1, 1000000) . $ext;
       
        //Her er vores destination
        $til        = "../images/grafik/menu/" . $nytNavn;
       
        //Her sker det magiske:
        move_uploaded_file($fra, $til);
       
        }

       
   
    }


//------------------------------------------------------
// Redigering af farve
//********************

    if($send){
   
   
        switch($farve){
       
            case(1):
                $kode = "bgcolor=$specifik";
                break;
           
            case(2):
                $kode = "background=images/grafik/menu/$filnavn_name";
                break;
               
            default:
                $kode = "bgcolor=$farve";
                break;
               
        }
       
       
        mysql_query(" UPDATE grafik SET menu='$kode' WHERE id = '1' ") or print mysql_error();
       
       
        echo "<p align=center><img border=0 src=images/done.gif width=300 height=200></p>";
       
       
    } else {


//------------------------------------------------------

?>
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:19 #1
$user og $pass skal lige sættes til en værdi
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 16:26 #2
Det er sessions, så det skulle ikke være noget problem
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:35 #3
Hvad er problemet præcis?

Findes denne mappe struktur "../images/grafik/menu/"?
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 16:37 #4
Altså den melder ikke nogen fejl - og ja, mappestrukturen findes! Har og prøvet med andre mapper, men der sker intet..?
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:40 #5
$fra    = $_FILES['fil']['tmp_name']; er fil størrelsen og ikke navnet

The size, in bytes, of the uploaded file.
$_FILES['userfile']['tmp_name']
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:42 #6
move_uploaded_file($_FILES['userfile']['tmp_name'], $til);
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:42 #7
ups - ikke userfile, men fil hedder din

move_uploaded_file($_FILES['fil']['tmp_name'], $til);
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 16:45 #8
Der sker stadig ikke noget??!?!?

Skal php.ini sættes op på en speciel måde ?
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:48 #9
ja

file_uploads boolean
Whether or not to allow HTTP file uploads. See also the upload_max_filesize, upload_tmp_dir, and post_max_size directives.
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 16:49 #10
hmm... alt er konfiguret korrekt! Jeg kører med PHP triad
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:51 #11
prøv denne fra manualen og bemærk // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead


<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    print "File is valid, and was successfully uploaded. ";
    print "Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($_FILES);
}
print "</pre>";

?>
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:53 #12
prøv evt. også at lægge en

echo $_FILES['fil']['tmp_name'];

ind, før move, for at se om der overhovedet står noget i den.
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:57 #13
sorry, jeg bøffede da jeg bildte dig ind at det var størrelsen (04/10-2004 16:40:37). Har lige nærlæst

$_FILES['userfile']['tmp_name']
The temporary filename of the file in which the uploaded file was stored on the server.

men svaret virker alligevel for jeg dummede mig 2 gange i samme svar :-)
Avatar billede bojo Nybegynder
04. oktober 2004 - 16:58 #14
Et muligt svar her

The Variables defined for uploaded files differs depending on the PHP version and configuration. The autoglobal $_FILES exists as of PHP 4.1.0 The $HTTP_POST_FILES array has existed since PHP 4.0.0. These arrays will contain all your uploaded file information. Using $_FILES is preferred. If the PHP directive register_globals is on, related variable names will also exist. register_globals defaults to off as of PHP 4.2.0.
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 17:00 #15
Når jeg sætter den til at udskrive $_FILES['fil']['tmp_name']; så skriver den intet, men når jeg sætter den til at udskrive $filnavn, så skriver den dette:C:\\Documents and Settings\\Kasper Nygaard\\Dokumenter\\Billeder\\Film\\a.jpg
Avatar billede bojo Nybegynder
04. oktober 2004 - 17:06 #16
Det kunne jo tyde på at du ikke har "register_globals on" efter det jeg skrev 16:58:27

Hvad hedder dit inputfelt i formen? jfr. din kode skal det hedde "fil", men hvor f* bliver $filnavn sat?

Hvad står der i $fil    (  if($fil){  )
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 17:08 #17
kan jeg ikke prøve at sende filen til dig ?
Avatar billede sukos Juniormester
04. oktober 2004 - 17:15 #18
Du kan også prøve med dette:


<?php
session_start();

function alert() {
if(isset($_SESSION["besked"])) {
echo" onload=\"alert('". htmlentities($_SESSION["besked"]) ."');\"";
unset($_SESSION["besked"]);
}else{
echo"";
}
}

// ca. Kb må billedet fylde
$kb = 30;

// min. bredde og højde (minimum???)
$minw = 100;
$minh = 60;

// Det dir som der skal uploades til, med skråstreger
$galleridir = "/images/";

// Fuld sti til galleridir
$moveto = $_SERVER["DOCUMENT_ROOT"] . $galleridir;

// Hvor sendes man hen efter upload?
$redir = $_SERVER["PHP_SELF"];

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

// Array med fejlbeskeder sat med $_FILES["upfile"]["error"]
$arg = array(1 => "Filen er større end tilladt upload i php.ini", 2 => "Filen er større end ". round(($kb*1024)/1000) ." Kb", 3 => "Sorry, men kun en del af filen blev uploadet", 4 => "Vælg en fil til upload!");

// Array med filtyper, til brug for det endelige filnavn
$filetypes = array(1 => "gif", 2 => "jpg", 3 => "png");


    if($_FILES["upfile"]["error"] > 0) {
    $_SESSION["besked"] = strtr($_FILES["upfile"]["error"], $arg);
    header("Location:". $redir ."");
    exit();
    }

    if($_FILES["upfile"]["size"] > ($kb*1024)) {
    $_SESSION["besked"] = "Filen er for stor til upload!!!";
    header("Location:". $redir ."");
    exit();
    }

    if(false == ($str = getimagesize($_FILES["upfile"]["tmp_name"]))) {
    $_SESSION["besked"] = "Valgte fil til upload er ikke en billedfil!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[2] > 3) {
    $_SESSION["besked"] = "Kun gif, jpg og png filer kan uploades!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[0] < $minw) {
    $_SESSION["besked"] = "Billedet er under ". $minw ." px. i bredden!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[1] < $minh) {
    $_SESSION["besked"] = "Billedet er under ". $minh ." px. i højden!";
    header("Location:". $redir ."");
    exit();
    }

    // FILNAVN UDEN FILTYPE
    $newname = time() ."_". rand(1000, 9999);

    // FILTYPEN
    $filtypen = strtr($str[2], $filetypes);

    $upname = $newname .".". $filtypen;

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
    $_SESSION["besked"] = "Billedet er blevet uploadet!";
    }else{
    $_SESSION["besked"] = "Billedet kunne desværre ikke flyttes!";
    }

    header("Location:". $redir ."");
    exit();

}
?>

<html><head><title>Billede upload</title>

</head>

<body<?php alert(); ?>>

<?php

if(!is_dir($moveto)) {
echo"Dir som fil skal flyttes til eksisterer ikke!!!";
}else{
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo($kb*1024); ?>">
<input name="upfile" type="file" size="32"><br>
<input type="submit" value="Upload">
</form>

<?php
}
?>

</body></html>
Avatar billede bojo Nybegynder
04. oktober 2004 - 17:19 #19
jo send til bojo at tulstrup dot net  ( oversæt at og dot )
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 17:24 #20
Filen er sendt...
Avatar billede bojo Nybegynder
04. oktober 2004 - 18:18 #21
Ret din action så der står

<form method="post" action="<? echo $PHP_SELF; ?>">
Avatar billede sigmadk Nybegynder
04. oktober 2004 - 20:59 #22
tak, det virkede...

Laver du et svar?
Avatar billede bojo Nybegynder
04. oktober 2004 - 21:00 #23
Fint :-)
Avatar billede bojo Nybegynder
04. oktober 2004 - 21:00 #24
ups
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