Avatar billede Kasperhn Nybegynder
19. maj 2013 - 14:09 Der er 6 kommentarer

PHP upload til username

Hej udviklere.


Jeg sidder og er igang med at lave et uploadings system til et projekt jeg har lavet.
Det skal være muligt for brugeren at uploade et billede til en mappe han har i FTP'en.

Men billedet ligger sig forkert, selvom stien er lavet rigtigt:

[code lang="PHP"]

// connect to database
include ('db.php');

$query = "SELECT * FROM users WHERE id='$id'";
$result = mysql_query($query);
$row = mysql_fetch_array(mysql_query($query));
$username = $row['username'];

$upload_dir = '../../../uploads/images/'.$username.'/';
$allowed_ext = array('jpg','jpeg','png','gif');


if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
    exit_status('Error! Wrong HTTP method!');
}


if(array_key_exists('pic',$_FILES) && $_FILES['pic']['error'] == 0 ){
   
    $pic = $_FILES['pic'];

    if(!in_array(get_extension($pic['name']),$allowed_ext)){
        exit_status('Only '.implode(',',$allowed_ext).' files are allowed!');
    }   

    if($demo_mode){
       
        // File uploads are ignored. We only log them.
       
        $line = implode('        ', array( date('r'), $_SERVER['REMOTE_ADDR'], $pic['size'], $pic['name']));
        file_put_contents('log.txt', $line.PHP_EOL, FILE_APPEND);
       
        exit_status('Uploads are ignored in demo mode.');
    }
   
   
    // Move the uploaded file from the temporary
    // directory to the uploads folder:
   
    if(move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])){
        exit_status('File was uploaded successfuly!');
    }
   
}

exit_status('Something went wrong with your upload!');


// Helper functions

function exit_status($str){
    echo json_encode(array('status'=>$str));
    exit;
}

function get_extension($file_name){
    $ext = explode('.', $file_name);
    $ext = array_pop($ext);
    return strtolower($ext);
}
[/code]

Kan nogen finde fejlen og hjælpe mig her, billedet ligger sig i mappen "uploads/images" og ikke "uploads/images/username" som jeg gerne vil have den til.
19. maj 2013 - 14:24 #1
En mulighed er naturligvis at $username kunne være tom.  Prøv, efter kodelinken

$username = $row['username']; at tilføre

echo "USERNAME = "; var_dump($username);die;

og se om du får det forventede username.
Avatar billede Kasperhn Nybegynder
19. maj 2013 - 14:35 #2
Den skriver "USERNAME = NULL

og den burde skrive det brugernavn jeg har angivet i databasen.!
Avatar billede Kasperhn Nybegynder
19. maj 2013 - 14:58 #3
Nu skriver den så denne fejl i stedet:
{"status":"Error! Wrong HTTP method!"}
19. maj 2013 - 16:32 #4
Du fortæller ikke hvad du forandrede mellem #2 og #3 der resulterede in #3's fejlbesked, så jeg vil basere dette indlæg på koden i dit oprindelige spørgsmål og #1 og #2. 

Du forventer en værdi i $username, og den værdi er basis for den mappe billedet skal oploades til.  Det viser sig så, at årsagen til at billedet uploades til en forkert mappe er at $username er tomt.  Det er en success, forstået således, at du gør fremskridt i at løse problemet.  Grunden til at $username er tomt er naturligvis, at din query ikke giver noget resultat.  Så næste trin må være, at finde ud af, hvorfor queryen ikke giver resultat. 

En nærliggende årsag kan være, at $id ikke indeholder det du forventer.  Det fremgår ikke af din kode, hvor $id kommer fra. Jeg foreslår, at du udskriver $id ved hjælp af koden echo "ID = "; var_dump($id);

Hvis den er gal med $id så må du naturligvis gå tilbage til det sted i koden hvor $id skal få sin værdi og undersøge, hvorfor den ikke får den forventede værdi.  Hvis indholdet af $id er det du forventede, så må der være noget andet galt med din query.  Du kan få mysql til at fortælle hvad der er galt ved midlertidigt at ændre koden

$result = mysql_query($query);

til

$result = mysql_query($query) or die(mysql_error());

(Forøvrigt er det ikke meningen, at du skal oprette dine indlæg som svar.  Svar er til løsninger og pointgivning.  Opret dine indlæg med prik i Kommentar.)
25. maj 2013 - 09:44 #5
kasperhn, kom du fra det igen?  Fik du mit indlæg #4?  Kunne du bruge det?  Kom ind og fortæl hvad din videre hensigt er med tråden.
05. december 2013 - 16:31 #6
kasperhn, jeg prøver lige en gang til.  Der har ikke været aktivitet på denne tråd i over et halvt år, så spørgsmålet er næppe længere aktuelt.  Kan jeg bede dig lukke spørgsmålet igen, i overensstemmelse med Ekspertens regler?  Please.  Jeg opretter dette som svar, som du kan acceptere ifald du mener at have haft hjælp af mine indlæg.  Ellers luk ved at acceptere et af dine egne svar.
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

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