Avatar billede husseintellawe Nybegynder
17. januar 2011 - 19:56 Der er 3 kommentarer og
1 løsning

Hvad gør jeg forkert med det her Multiupload til database.

Hej alle sammen. Jeg har hentet den her multi-uploader som jeg ikke kan få til at gemme i databasen. den kan sagtens gemme i mappen som er sat til at blive gemt i.  Hvad gør jeg forkert har lavet en INSERT INTO på linie næsten i bunden.

scriptet er hentet her.

http://valums.com/ajax-upload/

på forhånd rigtig mange tak.



<?php
include("../client/config.php");

/**
* Handle file uploads via XMLHttpRequest
*/
class qqUploadedFileXhr {
    /**
    * Save the file to the specified path
    * @return boolean TRUE on success
    */
    function save($path) {   
        $input = fopen("php://input", "r");
        $temp = tmpfile();
        $realSize = stream_copy_to_stream($input, $temp);
        fclose($input);
       
        if ($realSize != $this->getSize()){           
            return false;
        }
       
        $target = fopen($path, "w");       
        fseek($temp, 0, SEEK_SET);
        stream_copy_to_stream($temp, $target);
        fclose($target);
       
        return true;
    }
    function getName() {
        return $_GET['qqfile'];
    }
    function getSize() {
        if (isset($_SERVER["CONTENT_LENGTH"])){
            return (int)$_SERVER["CONTENT_LENGTH"];           
        } else {
            throw new Exception('Getting content length is not supported.');
        }     
    } 
}

/**
* Handle file uploads via regular form post (uses the $_FILES array)
*/
class qqUploadedFileForm { 
    /**
    * Save the file to the specified path
    * @return boolean TRUE on success
    */
    function save($path) {
        if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
            return false;
        }
       
        return true;
    }
    function getName() {
        return $_FILES['qqfile']['name'];
    }
    function getSize() {
        return $_FILES['qqfile']['size'];
    }
}

class qqFileUploader {
    private $allowedExtensions = array();
    private $sizeLimit = 10485760;
    private $file;

    function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760){       
        $allowedExtensions = array_map("strtolower", $allowedExtensions);
           
        $this->allowedExtensions = $allowedExtensions;       
        $this->sizeLimit = $sizeLimit;
       
        $this->checkServerSettings();     

        if (isset($_GET['qqfile'])) {
            $this->file = new qqUploadedFileXhr();
        } elseif (isset($_FILES['qqfile'])) {
            $this->file = new qqUploadedFileForm();
        } else {
            $this->file = false;
        }
    }
   
    private function checkServerSettings(){       
        $postSize = $this->toBytes(ini_get('post_max_size'));
        $uploadSize = $this->toBytes(ini_get('upload_max_filesize'));       
       
        if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
            $size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';           
            die("{'error':'increase post_max_size and upload_max_filesize to $size'}");   
        }       
    }
   
    private function toBytes($str){
        $val = trim($str);
        $last = strtolower($str[strlen($str)-1]);
        switch($last) {
            case 'g': $val *= 1024;
            case 'm': $val *= 1024;
            case 'k': $val *= 1024;       
        }
        return $val;
    }
   
    /**
    * Returns array('success'=>true) or array('error'=>'error message')
    */
    function handleUpload($uploadDirectory, $replaceOldFile = FALSE){
        if (!is_writable($uploadDirectory)){
            return array('error' => "Server error. Upload directory isn't writable.");
        }
       
        if (!$this->file){
            return array('error' => 'No files were uploaded.');
        }
       
        $size = $this->file->getSize();
       
        if ($size == 0) {
            return array('error' => 'File is empty');
        }
       
        if ($size > $this->sizeLimit) {
            return array('error' => 'File is too large');
        }
       
        $pathinfo = pathinfo($this->file->getName());
        $filename = $pathinfo['filename'];
        //$filename = md5(uniqid());
        $ext = $pathinfo['extension'];

        if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
            $these = implode(', ', $this->allowedExtensions);
            return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
        }
       
        if(!$replaceOldFile){
            /// don't overwrite previous files that were uploaded
            while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
                $filename .= rand(10, 99);
            }
        }
       
        if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
            return array('success'=>true);
        } else {
            return array('error'=> 'Could not save uploaded file.' .
                'The upload was cancelled, or server error encountered');
        }
       
      mysqli_query($link, "INSERT INTO img (name) VALUES ('$filename')"); 
    }
   
     
}


       

// list of valid extensions, ex. array("jpeg", "xml", "bmp")
$allowedExtensions = array();
// max file size in bytes
$sizeLimit = 10 * 1024 * 1024;

$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$result = $uploader->handleUpload('uploads/');
// to pass data through iframe you will need to encode all html tags
echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);
Avatar billede showsource Seniormester
17. januar 2011 - 21:05 #1
$filename er jo ikke defineret.
Prøv at lægge din query ind på en ny linie efter:
return array('success'=>true);
Avatar billede husseintellawe Nybegynder
17. januar 2011 - 21:40 #2
$pathinfo = pathinfo($this->file->getName());
        $filename = $pathinfo['filename'];
        //$filename = md5(uniqid());
        $ext = $pathinfo['extension'];


er den ikke defineret her ? eller er det mig der har forstået det helt forkert ?

Tak for hurtig svar.
Avatar billede HBP2 Praktikant
17. januar 2011 - 23:35 #3
Hvis den kan gemme filen på disk, men ikke i DB så er der et par mulige forklaringer eller 3 (og sikkert flere):

$link er ikke synlig inde i class'en, eller
SQL query'en er forkert, eller
filnavnet indeholder noget som skal escape's
Avatar billede showsource Seniormester
18. januar 2011 - 07:00 #4
Ja, jeg var nok for hurtig :O)
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