РЕШЕНИЕ: Как сохранить имя загруженного файла в базе данных
это помогло мне.
я пытаюсь добавить загрузку файла в пользовательский компонент, используя XML и базу данных.
Я знаю, как выполнить загрузку файлов в статической среде PHP, но мои знания о структуре PHP MVC в joomla делают это, поэтому я не могу его добавить.
Что я сделал до сих пор:
• Добавлено поле в файл XML (типа файла)
• Добавлены поля формы в административном представлении проекта
• Добавлено дополнительное поле My_project table (такое же, как столбец загрузки изображения)
До этого момента он работает (поля отображаются в компоненте бэкэнда администратора)
Теперь, когда вы сохраняете документ с файлом, загруженным в админку, он не сохраняет его в базе данных.
если я поставлю медиа в качестве типа поля, то он работает, но когда я изменяю его на файл, он ломается.
XML-файл
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field name="project_file" type="file"
label="Upload file"
description="Upload file"
directory="mysites" />
<field name="main_image" type="media"
label="COM_MYSITES_FORM_LBL_PROJECT_MAIN_IMAGE"
description="COM_MYSITES_FORM_DESC_PROJECT_MAIN_IMAGE"
filter="raw"
directory="mysites" />
</fieldset>
Сценарий загрузки файла PHP, который я обычно использую
<?php
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
но какая часть идет в модель и какая часть идет в контроллер? и как это назвать.
весь вид вызывается в контроллере
class MysitesControllerProject extends JControllerForm {
function __construct() {
$this->view_list = 'projects';
$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$file = $files['project_file'];
$this->upload($file);
parent::__construct();
}
public function upload($files)
{
$file_name = $files['name'];
$src = $files['tmp_name'];
$size = $files['size'];
$upload_error = $files['error'];
$type = $files['type'];
$dest = "/home/vol3/byethost33.com/b33_13467508/bim-portfolio.cu.cc/htdocs/tmp";
if (isset( $file_name)) {
// Move the uploaded file.
JFile::upload( $src, $filepath );
}
}
}