2012-07-26 83 views
1

我正在使用Valum AJAX上傳腳本:https://github.com/valums/file-uploader 我在如何獲取存儲到mySQL數據庫中的文件名和路徑時遇到了問題。Valum php AJAX上傳:將文件名和路徑存儲到mySQL數據庫中


使用php.php我看到有在$ PATHINFO和$ filename已經

$pathinfo = pathinfo($this->file->getName()); 
$filename = rawurlencode(str_replace(' ', '-', strtolower($pathinfo['filename']))); 

我試着這樣做,將它保存到我的數據庫,但它似乎並沒有被存儲任何東西

<?php require_once('../../Connections/connSQL.php'); ?> 
<?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 = rawurlencode(str_replace(' ', '-', strtolower($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'); 
     } 

    }  
} 


// 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); 

?> 
<?php 
if (!function_exists("GetSQLValueString")) { 
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{ 
    if (PHP_VERSION < 6) { 
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
    } 

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 

    switch ($theType) { 
    case "text": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break;  
    case "long": 
    case "int": 
     $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
     break; 
    case "double": 
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; 
     break; 
    case "date": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break; 
    case "defined": 
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
     break; 
    } 
    return $theValue; 
} 
} 

$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 


    $updateSQL = sprintf("UPDATE filefolder SET file_title=%s, file_url=%s WHERE m_id=%s", 
         GetSQLValueString($row_Recordset1['m_id'], "text"), 
         GetSQLValueString($row_Recordset1['m_id'], "text"), 
         GetSQLValueString($row_Recordset1['m_id'], "int")); 

    mysql_select_db($database_connSQL, $connSQL); 
    $Result1 = mysql_query($updateSQL, $connSQL) or die(mysql_error()); 


mysql_select_db($database_connSQL, $connSQL); 
$query_Recordset1 = "SELECT *, (filefolder.file_url) AS m_file FROM member INNER JOIN filefolder ON member.m_id = filefolder.m_id"; 
$Recordset1 = mysql_query($query_Recordset1, $connSQL) or die(mysql_error()); 
$row_Recordset1 = mysql_fetch_assoc($Recordset1); 
$totalRows_Recordset1 = mysql_num_rows($Recordset1); 
?> 

<?php 
mysql_free_result($Recordset1); 
?> 

它上傳成功,就是不存儲。任何人都可以指出我的問題或提供替代解決方案嗎?

非常感謝您的幫助!

最佳,

-AC

+0

更新,以提供完整的腳本 – alchuang 2012-07-26 20:38:50

+0

什麼是'GetSQLValueString'?這似乎是一種非常奇怪的SQL轉義方式。 – tadman 2012-07-30 17:49:32

+0

可能是一些轉義代碼 – Andreas 2012-07-30 17:51:28

回答

1

一段時間在網上搜索後,我找到了解決辦法:

顯然,有兩種方法上載在valums腳本,qqUploadedFileXhrqqUploadedFileForm.如果使用示例腳本,然後你使用一個默認:qqUploadedFileXhr.

所以,要獲取您可以使用的文件信息:$ file_name = $ _GET ['qqfile'];就是這樣,只是文件名而已。

但是,如果使用 'qqUploadedFileForm',你可以得到的文件的信息: - $_FILES['qqfile']['name']的文件名 - $_FILES['qqfile']['size']爲大小 - 等

Fullscript這裏:

$file_name = $_GET['qqfile']; 
$uploader = new qqFileUploader($allowedExtensions, $sizeLimit); 
$m_id = $row_RecUser['m_id']; 
$file_type = $_REQUEST['param1']; 

if (strcmp($file_type,'resume') == 0) { 
$result = $uploader->handleUpload('uploader/files/resume'); } 
else if (strcmp($file_type,'certificates') == 0) { 
$result = $uploader->handleUpload('uploader/files/certificates/'); } 

    $insertSQL = sprintf("INSERT INTO filefolder (m_id, file_type, file_title) VALUES (%s, %s, %s)", 
        GetSQLValueString($m_id, "int"), 
        GetSQLValueString($file_type, "text"), 
        GetSQLValueString($file_name, "text")); 
1

我想,你的查詢失敗,因爲你不是單引號你在你的SQL查詢中插入字符串值的反對票試試這個:

UPDATE filefolder SET file_title='%s', file_url='%s' WHERE m_id=%s 

對SQL查詢進行故障診斷時,它可以爲您節省大量時間,以簡單地轉儲生成的查詢字符串,並直接在MySQL中嘗試查看它是否被破壞。 MySQL會給你一些關於可能出錯的好消息。您也可以獲取mysql_error信息以瞭解您遇到的SQL問題。

+0

我只是改變它仍然不工作:( – alchuang 2012-07-26 20:26:01

+0

那麼你看到什麼PHP錯誤,如果有的話?你可以給出一個$ updateSQL和$ connSQL(它應該返回一個數據庫資源)的實際值的樣本。獲取mysql_error信息? – 2012-07-26 20:30:02

+0

嗯,沒有錯誤,可能是由於某種原因沒有運行腳本。我將更新該文章以包含完整腳本。 – alchuang 2012-07-26 20:37:15

相關問題