Intereting Posts

Добавьте дополнительные пользовательские переменные в mysql insert на blueimp / jquery-file-upload

В настоящее время я вставляю заголовок и описание через mysql внутри сценария blueimp / jquery-file-upload. Я использовал этот учебник, чтобы получить меня там, однако мне нужно добавить еще одну переменную. Переменная – это сеанс текущего зарегистрированного идентификатора пользователя $_SESSION["userid"] , и я хочу вставить его в столбец i, добавленный с именем uid . Обычно просто вставлять другой столбец во вставку, однако этот сценарий очень обидчив, и в любое время я его SyntaxError: Unexpected token < , даже малейший бит, я получаю « SyntaxError: Unexpected token < ». Любая помощь будет принята с благодарностью.

/server/php/index.php

 $options = array( 'delete_type' => 'POST', 'db_host' => 'localhost', 'db_user' => 'fpform_fanuser', 'db_pass' => '*****', 'db_name' => 'fpform_fandata', 'db_table' => 'files' ); error_reporting(E_ALL | E_STRICT); require('UploadHandler.php'); class CustomUploadHandler extends UploadHandler { protected function initialize() { $this->db = new mysqli( $this->options['db_host'], $this->options['db_user'], $this->options['db_pass'], $this->options['db_name'] ); parent::initialize(); $this->db->close(); } protected function handle_form_data($file, $index) { $file->title = @$_REQUEST['title'][$index]; $file->description = @$_REQUEST['description'][$index]; } protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null, $content_range = null) { $file = parent::handle_file_upload( $uploaded_file, $name, $size, $type, $error, $index, $content_range ); if (empty($file->error)) { $sql = 'INSERT INTO `'.$this->options['db_table'] .'` (`name`, `size`, `type`, `title`, `description`)' .' VALUES (?, ?, ?, ?, ?)'; $query = $this->db->prepare($sql); $query->bind_param( 'sisss', $file->name, $file->size, $file->type, $file->title, $file->description, ); $query->execute(); $file->id = $this->db->insert_id; } return $file; } protected function set_additional_file_properties($file) { parent::set_additional_file_properties($file); if ($_SERVER['REQUEST_METHOD'] === 'GET') { $sql = 'SELECT `id`, `type`, `title`, `description` FROM `' .$this->options['db_table'].'` WHERE `name`=?'; $query = $this->db->prepare($sql); $query->bind_param('s', $file->name); $query->execute(); $query->bind_result( $id, $type, $title, $description ); while ($query->fetch()) { $file->id = $id; $file->type = $type; $file->title = $title; $file->description = $description; } } } public function delete($print_response = true) { $response = parent::delete(false); foreach ($response as $name => $deleted) { if ($deleted) { $sql = 'DELETE FROM `' .$this->options['db_table'].'` WHERE `name`=?'; $query = $this->db->prepare($sql); $query->bind_param('s', $name); $query->execute(); } } return $this->generate_response($response, $print_response); } } $upload_handler = new CustomUploadHandler($options); 

Предполагая, что вы хотите изменить запрос INSERT (в коде, который вы опубликовали, есть только один запрос INSERT), это то, что вам нужно изменить:

 if (empty($file->error)) { $sql = 'INSERT INTO `'.$this->options['db_table'] .'` (`name`, `size`, `type`, `title`, `description`, `uid`)' .' VALUES (?, ?, ?, ?, ?, ?)'; $query = $this->db->prepare($sql); $query->bind_param( 'sisss', $file->name, $file->size, $file->type, $file->title, $file->description, $_SESSION['userid'] ); $query->execute(); $file->id = $this->db->insert_id; } 

Я думаю, вам нужно добавить еще одну запись в первый параметр bind_param:

 $query->bind_param( **'sisss',** $file->name, $file->size, $file->type, $file->title, $file->description, $_SESSION['userid'] 

должно быть

 $query->bind_param( **'sissss',** $file->name, $file->size, $file->type, $file->title, $file->description, $_SESSION['userid'] 

Минус звездочек, конечно, или какой бы то ни было правильный тип данных (см. Раздел «Типы параметров» на странице http://us.php.net/manual/en/mysqli-stmt.bind-param.php ).

Одна странность, я пробовал передать буквальную строку в качестве последнего параметра, и она выбросила эту ошибку:

"PHP Неустранимая ошибка: не удается передать параметр 7 по ссылке в /var/www/html/jqfileuploadertest/server/php/index.php в строке 66"

Но когда я изменил «mystring» на имя файла $ file->, он работал нормально. Это займет определенную борьбу, потому что я хочу отметить их … Я чувствую, что просто добавление «СЕЙЧАС» не будет работать …


Обновлено: я хотел добавить два поля для каждого файла, идентификатор того, кто его загрузил (что, я думаю, это то, что OP ищет), а также временную метку. Я добавил их как скрытые входные данные в форме:

 <input name="contributor[]" type="hidden" value="myuserid" /> <input name="uploadedOn[]" type="hidden" value="2014-03-28 10:00:00" /> 

Если ваша форма – это php-скрипт, вы можете динамически генерировать оба.

Затем добавили это в строку index.php ~ 44:

  $file->contributor = @$_REQUEST['contributor'][$index]; $file->uploadedOn = @$_REQUEST['uploadedOn'][$index]; 

И изменил эту часть index.php, где подготовлен оператор sql:

 if (empty($file->error)) { $sql = 'INSERT INTO `'.$this->options['db_table'] .'` (`name`, `size`, `type`, `title`, `description`,`contributor`, `dateUploaded`)' .' VALUES (?, ?, ?, ?, ?, ?, ?)'; $query = $this->db->prepare($sql); $query->bind_param( 'sisssss', $file->name, $file->size, $file->type, $file->title, $file->description, $file->contributor, $file->uploadedOn ); 

И это сработало.

 protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null, $content_range = null, $uid) { $file = parent::handle_file_upload( $uploaded_file, $name, $size, $type, $error, $index, $content_range, $uid ); $uid=$_SESSION['userid']; if (empty($file->error)) { $sql = 'INSERT INTO `'.$this->options['db_table'] .'` (`name`, `size`, `type`, `title`, `description`,`uid`)' .' VALUES (?, ?, ?, ?, ?,?)'; $query = $this->db->prepare($sql); $query->bind_param( 'sisssi', $file->name, $file->size, $file->type, $file->title, $file->description, $file->uid ); $query->execute(); $file->id = $this->db->insert_id; } return $file; }` 

Ошибка, которую вы получаете, находится в консоли javascript при правильной загрузке файла? Мне кажется, что один из загружаемых файлов 404 не найден, и его попытка проанализировать полученную 404 страницу как файл сценария, когда на самом деле это html-файл, который начинается с <… У меня это случалось раньше. Проверьте в сети и просмотрите все ресурсы, которые загружаются, когда это произойдет. Вероятно, что правильные 404 заголовки не возвращаются, поэтому он попытается разобрать его.