Hallo,


Via een upload formulier wil ik graag afbeeldingen uploaden naar de server en verwerken in een database. De connectie met de database werkt, echter wil het uploaden niet lukken.


<?php
if(isset($_POST['submit'])){
    // Include database config
    include_once 'dbconfig.php';
    
    // File upload config
    $targetDir = "uploads/";
    $allowTypes = array('jpg','png','jpeg','gif');
    
    $statusMsg = $errorMsg = $insertValuesSQL = $errorUpload = $errorUploadType = '';
    if(!empty(array_filter($_FILES['files']['name']))){
        foreach($_FILES['files']['name'] as $key=>$val){
            // File upload path
            $fileName = basename($_FILES['files']['name'][$key]);
            $targetFilePath = $targetDir . $fileName;
            
            // Check het file type
            $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);
            if(in_array($fileType, $allowTypes)){
                // Upload file naar server
                if(move_uploaded_file($_FILES["files"]["tmp_name"][$key], $targetFilePath)){
                   
                    $insertValuesSQL .= "('".$fileName."', NOW()),";
                }else{
                    $errorUpload .= $_FILES['files']['name'][$key].', ';
                }
            }else{
                $errorUploadType .= $_FILES['files']['name'][$key].', ';
            }
        }
        
        if(!empty($insertValuesSQL)){
            $insertValuesSQL = trim($insertValuesSQL,',');
            //file naam in database
            $insert = $db->query("INSERT INTO images (file_name, uploaded_on) VALUES $insertValuesSQL");
            if($insert){
                $errorUpload = !empty($errorUpload)?'Upload Error: '.$errorUpload:'';
                $errorUploadType = !empty($errorUploadType)?'File Type Error: '.$errorUploadType:'';
                $errorMsg = !empty($errorUpload)?'<br/>'.$errorUpload.'<br/>'.$errorUploadType:'<br/>'.$errorUploadType;
                $statusMsg = "Files are uploaded successfully.".$errorMsg;
            }else{
                $statusMsg = "Sorry, there was an error uploading your file.";
            }
        }
    }else{
        $statusMsg = 'Please select a file to upload.';
    }
    
    // Display status bericht
    echo $statusMsg;
}
?>



<form action="" method="post" enctype="multipart/form-data">
    Select Image Files to Upload:
    <input type="file" name="files[]" multiple>
    
    <input class="upload-btn" type="submit" name="submit" value="UPLOAD">
</form>


Ik krijg ook geen succesmelding of error terug, alleen er geen afbeeldingen zijn geselecteerd krijg ik netjes een foutmelding.

Zie ik iets over het hoofd, wie oo wie kan mij helpen?

Gr. Bryan
Als ik een jpg, png, jpeg of gif pak dan geenft deze niets aan, pak ik een foutief bestand dan krijg ik als output: array
Onthoud ook dat je op mime-types moet controleren.
Waarom gebruik je geen kant en klare class, zoals de Uploadclass van verot.net?
Na wat stoeien heb ik het volgende gekregen maar snap niet waarom.

De php code heb ik in een aparte file gezet. Vervolgens heb ik in het form element bij action de link naar de php file gezet.
Nu werk het wel, maar word je ook gelijk naar de php geleid en krijg je slechts de echo terug, terwijl ik dit op de upload pagina wil hebben.

Wat is het verschil dat de php code niet op de zelfde pagina werkt? Dit zou toch normaal wel moeten gaan?
Het zou precies hetzelfde moeten werken, lijkt mij.
Deze pagina word geinclude in de indexpagina, zou het zijn dat dit mis gaat en hier een aparte pagina voor moet aanmaken?
En als je gaat debuggen met de volledige code in 1 pagina?
Waar loopt het proces vast? Of doorloopt die wel alles, maar gebeurt er niets.
Met een paar simpele echo's kun je dat eenvoudig testen.

Mij is hier altijd gezegd dat je beter

<?php if($_SERVER['REQUEST_METHOD'] == "POST" ?>

kunt gebruiken dan

<?php if(isset($_POST['submit'])) ?>
@Bryan, wat verwacht je precies dat array_filter() in dit verhaal doet en wat is de retourwaarde hiervan? Met deze constructie ben ik niet bekend, en waarschijnlijk is 'ie daarvoor ook niet bedoeld?

En wat @Ariën zegt, hoe luidt de error status van elk van de uploads?

Ik hoop ook niet dat je in een publieke directory aan het uploaden bent?

Waarschijnlijk bestaat het bestand $targetFilePath op regel 18 ook nog niet, want dat is de locatie waar je het bestand naar verplaatst op regel 21?

Je zou in principe gewoon de extentie uit de name kunnen vissen, maar een extentie hoeft niet per definitie representatief te zijn voor het bestandstype. Je kunt een tekstbestand prima opslaan als (met extentie) jpg en andersom.

Reageren