Avatar billede lesp Nybegynder
10. november 2007 - 20:19 Der er 15 kommentarer og
1 løsning

Billedeupload som ikke virker

Hejsa
Hvad går der galt her?

if(isset($_FILES['file']['name'])) {
    $filename = $_FILES['file']['name'];
    $filename = 'images/'.basename($filename);
    move_uploaded_file($_FILES['file']['tmp_name'],$filename);
Jeg flytter samtidigt billedets navn til databasen
Problemet er, at det bliver gemt i databasen, men at det ikke bliver flyttet på serveren. Her er min formular:

<input type='file' name='file' id='file'>
Avatar billede nielle Nybegynder
10. november 2007 - 21:36 #1
Du bør ikke bruge 'file' som name, men derudover ser det da rigtigt nok ud. Hvilken værdo returnere kaldet til move_uploaded_file()?
Avatar billede lesp Nybegynder
10. november 2007 - 22:21 #2
Men det virker ikke. Det bliver kun flyttet i databasen.
Avatar billede nielle Nybegynder
10. november 2007 - 22:41 #3
Hvilken værdo returnere kaldet til move_uploaded_file()? True eller false?
Avatar billede lesp Nybegynder
10. november 2007 - 22:46 #4
Hvad mener du? Altså den udfører alle andre opgaver end at uploade filen til serveren.
Avatar billede lesp Nybegynder
10. november 2007 - 22:48 #5
Her er hele upload-scriptet:

<?php
session_start();

$user = $_POST['user'];


if ($_SESSION['status'] == "login")
{
include_once 'connect.php';

if(isset($_FILES['file']['name'])) {
    $filename = $_FILES['file']['name'];
    $filename = 'images/'.basename($filename);
    move_uploaded_file($_FILES['file']['tmp_name'],$filename);
    $sql = "INSERT INTO
              products(
                  item_cat,
                  item_undercat,
                  item_title,
                  item_desc,
                  item_price,
                  item_nr,
                  item_image
              )
            VALUES ('%s','%s','%s','%s','%s','%s','%s')";
    $sql = sprintf($sql,
        mysql_real_escape_string($_POST['category']),
        mysql_real_escape_string($_POST['undercategory']),
        mysql_real_escape_string($_POST['item_title']),
        mysql_real_escape_string($_POST['item_desc']),
        mysql_real_escape_string($_POST['item_price']),
        mysql_real_escape_string($_POST['item_nr']),
        mysql_real_escape_string($file)
    );
    $res = mysql_query($sql);
    if(!$res) {
        die(mysql_error());
    }
    echo "Done<br> Klik <a href='nzoet.php?user=$user'>her</a> for at gå tilbage.";

}
}
?>
Avatar billede nielle Nybegynder
10. november 2007 - 23:33 #6
I følge dokumentationen returenere move_uploaded_file() værdien true eller false alt efter om det går godt eller ej:

http://dk2.php.net/move_uploaded_file

så den bør man overveje at tjekek på.

Desuden var det slet ikke filnavnet, men noget helt andet du gemte i din database (variablen $file, hvor den så kommer fra).

Prøv med dette:

<?php
session_start();

$user = $_POST['user'];

if ($_SESSION['status'] == "login") {
    include_once 'connect.php';

    if (isset($_FILES['file']['name'])) {
        $filename = 'images/' . basename($_FILES['file']['name']);

        if (move_uploaded_file($_FILES['file']['tmp_name'], $filename)) {
            echo "File is valid, and was successfully uploaded.";
        } else {
            echo "Possible file upload attack!";
        }   

        $sql = "INSERT INTO products (item_cat, item_undercat, item_title, item_desc, item_price, item_nr, item_image)
            VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')";
        $sql = sprintf($sql,
            mysql_real_escape_string($_POST['category']),
            mysql_real_escape_string($_POST['undercategory']),
            mysql_real_escape_string($_POST['item_title']),
            mysql_real_escape_string($_POST['item_desc']),
            mysql_real_escape_string($_POST['item_price']),
            mysql_real_escape_string($_POST['item_nr']),
            mysql_real_escape_string($filename)
            );

        $res = mysql_query($sql) or die(mysql_error());
        echo "Done<br>Klik <a href='nzoet.php?user=$user'>her</a> for at gå tilbage.";
    }
}
?>
Avatar billede lesp Nybegynder
11. november 2007 - 20:50 #7
Her er hvad jeg får:

Possible file upload attack!Done
Klik her for at gå tilbage.
Avatar billede nielle Nybegynder
11. november 2007 - 22:58 #8
Så er det på tide at se hvad der rent faktisk er i de relevante varioabble:

        if (move_uploaded_file($_FILES['file']['tmp_name'], $filename)) {
            echo "File is valid, and was successfully uploaded.";
        } else {
            echo 'DEBUG: Fra: ' . $_FILES['file']['tmp_name'] . ' til ' . $filename . '<br>';
            echo "Possible file upload attack!";
        }
Avatar billede lesp Nybegynder
12. november 2007 - 09:52 #9
Output:

DEBUG: Fra: /tmp/phpFQSmjy til images/66muscoupe_thumb_02.jpg
Possible file upload attack!Done
Klik her for at gå tilbage.
Avatar billede lesp Nybegynder
12. november 2007 - 09:54 #10
DEBUG: Fra: /tmp/phptb0js1 til images/os.png
Possible file upload attack!Done
Klik her for at gå tilbage.
Avatar billede michael_stim Ekspert
12. november 2007 - 09:56 #11
måske noget med rettigheder på images mappen.
Avatar billede lesp Nybegynder
12. november 2007 - 10:06 #12
Michael Stim. Tak! Skriv et svar!
Avatar billede michael_stim Ekspert
12. november 2007 - 10:11 #13
Ellers tak, samler ikke på point ;o)
Avatar billede lesp Nybegynder
12. november 2007 - 13:15 #14
Okay. Dit valg
Avatar billede nielle Nybegynder
19. november 2007 - 17:13 #15
Du skal acceptere dit eget svar ... ellers står spørmålet fortsat åbent og du har ikke fået dine point tilbage.
Avatar billede nielle Nybegynder
19. november 2007 - 17:15 #16
Disregard ... Eksperten ser sommetider lidt underligt ud: Det ene svar er markeret som accepteret men det andet er ikke?!
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