Как использовать jQuery-File-Upload с PHP и базой данных? Я хочу вставлять или удалять строки об изображениях при загрузке или удалении изображений, и имя каждого изображения будет равно как время (), когда они будут загружены в каталог.
Все результаты, которые я нашел через google, говорят мне, что мне нужно отредактировать файл upload.class.php, но последняя версия имеет только index.php и UploadHandler.php …
файл UploadHandler.php имеет класс UploadHandler с кодом
public function post($print_response = true) { if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') { return $this->delete($print_response); } $upload = isset($_FILES[$this->options['param_name']]) ? $_FILES[$this->options['param_name']] : null; // Parse the Content-Disposition header, if available: $file_name = isset($_SERVER['HTTP_CONTENT_DISPOSITION']) ? rawurldecode(preg_replace( '/(^[^"]+")|("$)/', '', $_SERVER['HTTP_CONTENT_DISPOSITION'] )) : null; $file_type = isset($_SERVER['HTTP_CONTENT_DESCRIPTION']) ? $_SERVER['HTTP_CONTENT_DESCRIPTION'] : null; // Parse the Content-Range header, which has the following form: // Content-Range: bytes 0-524287/2000000 $content_range = isset($_SERVER['HTTP_CONTENT_RANGE']) ? preg_split('/[^0-9]+/', $_SERVER['HTTP_CONTENT_RANGE']) : null; $size = $content_range ? $content_range[3] : null; $info = array(); if ($upload && is_array($upload['tmp_name'])) { // param_name is an array identifier like "files[]", // $_FILES is a multi-dimensional array: foreach ($upload['tmp_name'] as $index => $value) { $info[] = $this->handle_file_upload( $upload['tmp_name'][$index], $file_name ? $file_name : $upload['name'][$index], $size ? $size : $upload['size'][$index], $file_type ? $file_type : $upload['type'][$index], $upload['error'][$index], $index, $content_range ); } } else { // param_name is a single object identifier like "file", // $_FILES is a one-dimensional array: $info[] = $this->handle_file_upload( isset($upload['tmp_name']) ? $upload['tmp_name'] : null, $file_name ? $file_name : (isset($upload['name']) ? $upload['name'] : null), $size ? $size : (isset($upload['size']) ? $upload['size'] : $_SERVER['CONTENT_LENGTH']), $file_type ? $file_type : (isset($upload['type']) ? $upload['type'] : $_SERVER['CONTENT_TYPE']), isset($upload['error']) ? $upload['error'] : null, null, $content_range ); } return $this->generate_response($info, $print_response); } public function delete($print_response = true) { $file_name = $this->get_file_name_param(); $file_path = $this->get_upload_path($file_name); $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path); if ($success) { foreach($this->options['image_versions'] as $version => $options) { if (!empty($version)) { $file = $this->get_upload_path($file_name, $version); if (is_file($file)) { unlink($file); } } } } return $this->generate_response($success, $print_response); }
Какие строки мне нужно добавить для вставки или удаления имен файлов в mysql?
PS: Я использую PHP
Я использую подкрепление и теперь могу сказать, что вместо файла upload.class.php необходимо изменить файл UploadHandler.php и использовать следующий:
Найдите эту строку -> $ this-> options = array (
Добавьте следующий код в следующие строки:
// mysql connection settings 'database' => '**YOUR DATABASE**', 'host' => '**localhost**', 'username' => '**YOUR USERNAME**', 'password' => '**YOUR PASSWORD**', // end
Итак, теперь вам нужно написать функцию для SQL Query, скопировать и вставить следующий код, например, после функции handle_file_upload:
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; }
Добавить данные файла в базу данных Я объясняю эту функцию загрузкой изображения, поэтому здесь мы сохраняем имя изображения в базе данных. Добавьте эту функцию также в файл upload.class.php
function add_img($whichimg) { $add_to_db = $this->query("INSERT INTO yourtable (**yourcolumnone**) VALUES ('".$whichimg."')") or die(mysql_error()); return $add_to_db; }
поэтому в этой функции мы вызываем запрос функции со строкой между зажимами.
Вы также можете вставить другие данные, например, размер файла.
По крайней мере, мы должны вызвать эту функцию со следующим кодом в конце функции handle_file_upload. Вставьте следующий код под или над этой строкой: $ file-> size = $ file_size;
$file->upload_to_db = $this->add_img($file->name);
Удалить запись, которую мы создали. Удаление записи, которую мы сделали ранее, очень просто, мы создаем новую функцию, которая также делает запрос sql для его удаления.
function delete_img($delimg) { $delete_from_db = $this->query("DELETE FROM yourtable WHERE yourcolumnone = '$delimg'") or die(mysql_error()); return $delete_from_db; }
Теперь мы должны вызвать функцию, на этот раз функции удаления. Перейдите к функции удаления и выполните поиск по этой строке: if ($ success) {вставьте следующий код.
$this->delete_img($file_name);
Наслаждайтесь =)
Вы должны перегрузить методы по умолчанию (как описано в документации), чтобы добавить свои пользовательские функции. Если вы измените исходные файлы, у вас будет больше работы, когда будет выпущена новая версия (или исправление) плагина.
Для моих целей я в основном определил пользовательский класс, который расширяет исходный, и модифицировал только файл /server/php/index.php:
class myUploadHandler extends UploadHandler { //do your stuff //for exemple if you are using a DB: //overload methods like handle_file_upload() for insertion in a DB, //set_additional_file_properties() if you need more fields linked to each uploaded file // or delete() also if you want to remove from DB } $upload_handler = new myUploadHandler(array( 'user_dirs' => true, 'download_via_php' => true, ));