关于Blueimp jQuery文件上传加载的表单数据

时间:2012-12-10 16:42:13

标签: php jquery file-upload blueimp

似乎我到处寻找并尝试了一切,我无法让这个工作,任何帮助将不胜感激!我正在使用Blueimp的jQuery文件上传。我已通过以下方式更改了UploadHandler.php,以使此上载工作在我的系统中具有多个记录和位置。我正在使用PHP和MySQL。

添加到handle_file_upload函数,以便将文件路径,文件名,文件类型,文件大小,记录类型和“作业号”上传到我在MySQL中为每个不同文件创建的表。

$file->upload_to_db = $this->add_file($job_num, $recordtype, $file_path, $filename, $type, $file_size);

此作业编号作为get变量发送到页面(带有文件上载),以及在添加文件时发送给Handler的隐藏表单字段。我添加的add_file函数如下:

function add_file($job_num, $recordtype, $filepath, $filename, $filetype, $filesize)
{
    $filepath = addslashes($filepath);
    $insert_query = $this->query("INSERT INTO fileupload (job_num, recordtype, file_path, file_name, file_type, file_size) VALUES ('".$job_num."','".$recordtype."','".$filepath."','".$filename."','".$filetype."','".$filesize."')");
    return $insert_query;
}

查询功能:

protected function query($query) {
    $database = $this->options['database'];
    $host = $this->options['host'];
    $username = $this->options['username']; 
    $password = $this->options['password'];
    $Link = mysql_connect($host, $username, $password);
    if (!$Link){
        die( mysql_error() );
    }
    $db_selected = mysql_select_db($database);
    if (!$db_selected){
        die( mysql_error() );
    }
    $result = mysql_query($query);
    mysql_close($Link);
    return $result;
}

我也有删除功能。现在,一切正常。我添加的每个文件都会保存,路径也会存储在数据库中。从这里我必须找到一种方法,只显示为该记录上传的文件,而不是显示每条记录的所有文件。我修改了get函数:

public function get($print_response = true) {
      if ($print_response && isset($_GET['download'])) {
        return $this->download();
    }
    $uploads = $this->query_db();
    return $this->generate_response($uploads, $print_response);
}

query_db函数:

public function query_db() {
    $uploads_array = array();
    // error_log("Job Num: ".$this->job_num."\n\n",3,"error_log.txt");
    $select_result = $this->query("SELECT * FROM fileupload WHERE job_num=423424");
    while($query_results = mysql_fetch_object($select_result))
    {   
        $file = new stdClass();
        $file->id = $query_results->id;
        $file->name = $query_results->file_name;
        $file->size = $query_results->file_size;
        $file->type = $query_results->file_type;
        $file->url = "filepath_to_url/".$query_results->file_name;
        $file->thumbnail_url = "filepath_to_thumbnail/".$query_results->file_name;
        $file->delete_url = "";
        $file->delete_type = "DELETE";
        array_push($uploads_array,$file);
    }
    return $uploads_array;
}

我的系统上文件路径正确的位置。这再次,工作得很好。但正如您在query_db函数中的查询中所看到的,我将job_num硬编码。加载第一页时我需要一种方法来获取它。我找到了一种方法来做到这一点,没有任何工作。当我提交/添加其他文件时,我可以使用$ _REQUEST ['job_num']来获取它,但不能在页面加载时使用。我对OOP PHP不太熟悉,所以这对我来说是新的。

2 个答案:

答案 0 :(得分:0)

根据您的评论,您可能希望向您的班级添加job_number媒体资源。然后,当您像这样调用add_file()

时,可以在班级中设置此值
function add_file($job_num, $recordtype, $filepath, $filename, $filetype, $filesize)
{
    $this->job_number = $job_num;
    $filepath = addslashes($filepath);
    $insert_query = $this->query("INSERT INTO fileupload (job_num, recordtype, file_path, file_name, file_type, file_size) VALUES ('".$job_num."','".$recordtype."','".$filepath."','".$filename."','".$filetype."','".$filesize."')");
    return $insert_query;
}

然后,您可以在query_db()方法中引用此作业编号,如下所示:

public function query_db() {
    $uploads_array = array();
    // error_log("Job Num: ".$this->job_num."\n\n",3,"error_log.txt");
    $select_result = $this->query("SELECT * FROM fileupload WHERE job_num=" . $this->job_number);
    while($query_results = mysql_fetch_object($select_result))
    {   
        $file = new stdClass();
        $file->id = $query_results->id;
        $file->name = $query_results->file_name;
        $file->size = $query_results->file_size;
        $file->type = $query_results->file_type;
        $file->url = "filepath_to_url/".$query_results->file_name;
        $file->thumbnail_url = "filepath_to_thumbnail/".$query_results->file_name;
        $file->delete_url = "";
        $file->delete_type = "DELETE";
        array_push($uploads_array,$file);
    }
    return $uploads_array;
}

注意我的代码示例中没有考虑数据卫生。您还需要这样做以防止SQL注入。实际上,您应该真正考虑使用mysqli_*函数,因为mysql_*已被弃用。您还应该将数据库连接传递给您可以将其提供给类的所有区域的类(例如add_file方法,在将对象编号设置到对象之前将其转义为最好。)< / p>

答案 1 :(得分:0)

也许这会有所帮助

protected function get_file_objects() {

    $user_id = $this->options['session_id'];
    $files = $this->query("SELECT yourname FROM yourname WHERE yourname='$user_id'");
    $files_array=array();
    while($row = mysql_fetch_assoc($files)){
        array_push($files_array,$row['yourname']);
    }
    return array_values( array_filter( array_map(
        array($this, 'get_file_object'),
        $files_array
    ) ) );
}