所以我觉得这有点奇怪,因为数据库字段在我开始编写文件上传功能之前没有付出太多努力就更新了。现在数据库似乎没有更新,但文件上传正在工作。一切似乎都在插入、更新等,只需在管理表单的 XML 文件中指定正确的名称即可:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="course_id"
type="hidden" />
<field
name="course_name"
type="text"
label="Course Name: "
description="Full name of the course (up to 255 characters)"
default="" />
<field
name="course_dept"
type="text"
label="Course Department: "
description="4 character department code. Examples: BIOL, CREL, CHEM"
default="" />
<field
name="course_code"
type="text"
label="Course Code: "
description="4 digit course code which immediately preceeds department code"
default="" />
<field
name="course_desc"
type="textarea"
label="Course Description: "
rows="10"
description="As seen in the academic calendar"
default="" />
<field
name="course_graphic_url"
type="file"
label="Course Graphic: "
description="Graphical representation of the course"
accept="image/*" />
</fieldset>
</form>
根据我所读的内容,我必须编写数据库更新逻辑。只是奇怪的是,它以前似乎在工作。现在我是Joomla MVC组件开发的新手,所以也许我复制/粘贴了几行代码,这些代码可以在我没有意识到的情况下完成它。但我对此表示怀疑。这是我尝试过的,但我似乎在某个地方做得不够。这是/admin/controllers/course.php:
<?php defined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
class CourseListControllerCourse extends JControllerForm {
protected $view_list = 'CourseList';
function save($key = null, $urlVar = null){
// ---------------------------- Uploading the file ---------------------
// Neccesary libraries and variables
jimport( 'joomla.filesystem.folder' );
jimport('joomla.filesystem.file');
$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$filename = $files['course_graphic_url']['name'];
$folder = JPATH_SITE . "/" . "images" . "/" . "courselist";
// Create the folder if not exists in images folder
if ( !JFolder::exists( $folder ) ) {
JFolder::create( $folder, 0777 );
}
$src = $files['course_graphic_url']['tmp_name'];
$dest = JPATH_SITE . "/" . "images" . "/" . "courselist" . "/" . $filename;
if (isset($files['course_graphic_url'])) {
JFile::upload( $src, $dest );
}
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$cid = $jinput->get('course_id');
$fields = array($db->quoteName('course_graphic_url') . " = " . $db->quote($dest));
$conditions = array($db->quoteName('course_id') . " = " . $cid);
$query
->update($db->quoteName('#__courselist'))->set($fields)->where($conditions);
$db->execute($query);
return parent::save($key = null, $urlVar = null);
}
}
希望我提供了足够的信息..我仍然停留在周末模式,所以很难提前说:P谢谢!
编辑:我意识到course_id,当我在编辑页面中出现时出现的 url 变量,在单击保存按钮时没有传递(据我所知(。我试图创建一个隐藏的输入字段作为值,希望我能解决当今世界上所有的错误,但没有运气。
对我来说奇怪的是,所有其他数据库字段都在正确更新,不需要额外的 SQL。相应的字段已使用相应表单字段中的值进行了更新。我现在很困惑。
首先,非常感谢Joomla的GDP!堆栈交换引导我朝着正确的方向前进。我不得不说,这个问题相当愚蠢。正如您将在我的代码中注意到的那样,我得到了一个查询对象:
$query = $db->getQuery(true);
我构建查询:
$fields = array($db->quoteName('course_graphic_url') . " = " . $db->quote($dest));
$conditions = array($db->quoteName('course_id') . " = " . $cid);
$query
->update($db->quoteName('#__courselist'))->set($fields)->where($conditions);
但是,我没有设置查询对象!!!这是新添加的代码。真是个假:P
$db->setQuery($query);
$db->execute($query);